Ivo Pereira Posted May 16, 2009 at 04:58 PM Report #264651 Posted May 16, 2009 at 04:58 PM Boas pessoal, tenho a minha dúvida explicada na imagem 😛 Ver em maior: http://i138.photobucket.com/albums/q266/DJ_BloodHunter/duvida-1.jpg Abraço 🙂
Soulsick Posted May 16, 2009 at 06:00 PM Report #264665 Posted May 16, 2009 at 06:00 PM boas, se percebi bem o teu problema, penso que este código te ajuda Public Class Form1 Dim tmp As Integer = 1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'este 5 e apenas para nao ficar mesmo encostado à lateral do ecra lol Me.Left = Screen.PrimaryScreen.WorkingArea.Width - Me.Width - 5 Me.Top = Screen.PrimaryScreen.WorkingArea.Height 'timer adicionado a form com interval = 100 ms Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Me.Top >= Screen.PrimaryScreen.WorkingArea.Height - Me.Height Then Me.Top = Screen.PrimaryScreen.WorkingArea.Height - tmp ElseIf Me.Top = Screen.PrimaryScreen.WorkingArea.Height - Me.Height Then Me.Timer1.Enabled = False Exit Sub End If tmp += 1 End Sub End Class ps: só fiz o fade in 🙂
Ivo Pereira Posted May 16, 2009 at 06:08 PM Author Report #264666 Posted May 16, 2009 at 06:08 PM Realmente ajudou 😛 Mas podias explicar melhor o código? E já agora como fazer o fade-out? É que como não percebi bem o código não estou a conseguir fazer o fade-out 😄 Abraço e obrigado 🙂
ribeiro55 Posted May 16, 2009 at 07:01 PM Report #264683 Posted May 16, 2009 at 07:01 PM A classe form osetnta uma propriedade chamada Opacity. O valor desta propriedade oscila do 0 (zero) ao 1. Se quiseres obter por exemplo 37% de opacidade, 37/100 = 0.37 é o valor a atribuír à propriedade. Uma regra de três simples resolve-te o problema: Posição máxima está para 1 de opacidade assim como a Posição actual está para X de opacidade. Uns pequenos ajustes e adaptações matemáticas e tens o problema resolvido. Até fazia num instantinho e mostrava-te um exemplo, mas não estou nem perto de uma máquina com a IDE instalada. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Ivo Pereira Posted May 16, 2009 at 07:03 PM Author Report #264684 Posted May 16, 2009 at 07:03 PM A classe form osetnta uma propriedade chamada Opacity. O valor desta propriedade oscila do 0 (zero) ao 1. Se quiseres obter por exemplo 37% de opacidade, 37/100 = 0.37 é o valor a atribuír à propriedade. Uma regra de três simples resolve-te o problema: Posição máxima está para 1 de opacidade assim como a Posição actual está para X de opacidade. Uns pequenos ajustes e adaptações matemáticas e tens o problema resolvido. Até fazia num instantinho e mostrava-te um exemplo, mas não estou nem perto de uma máquina com a IDE instalada. Por momentos pensei que estavas a explicar o código do Soulsick, mas depois vi que não fazia sentido, e percebi o que querias dizer 😛 Realmente, também era uma forma engraçada, e com o opacity eu sei trabalhar bem 😄 vou experimentar 🙂 Abraço
ribeiro55 Posted May 16, 2009 at 09:16 PM Report #264725 Posted May 16, 2009 at 09:16 PM Sinceramente não olhei para o código do soulsick, porque só reparei na pergunta que fizeste e não no pedido de explicação... Se até domingo à noite continuares com dúvida, eu faço-te um exemplo. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Soulsick Posted May 17, 2009 at 02:20 AM Report #264756 Posted May 17, 2009 at 02:20 AM Boas, relativamente ao código do "fade-in": Me.Top = Screen.PrimaryScreen.WorkingArea.Height Torna o valor do top igual à altura da área visível, fazendo com que o form fique escondido. If Me.Top > Screen.PrimaryScreen.WorkingArea.Height - Me.Height Then Me.Top = Screen.PrimaryScreen.WorkingArea.Height - tmp ElseIf Me.Top = Screen.PrimaryScreen.WorkingArea.Height - Me.Height Then Me.Timer1.Enabled = False Exit Sub End If Verifica se o valor do top é maior que o total do tamanho da área visível subtraído à altura do form: Se for reduz ao top, de modo a que faça o efeito de subir Se o top for igual ao tamanho da área visível - a altura do form ,significa que o form já está na "altura" máxima e não o deixa subir mais. Atenção: No primeiro código que te dei, retira o igual na primeira comparação para que o form fique mesmo encostado à barra de tarefas. 😛 e agora quanto ao fade out: Basicamente é o contrario do fade in lol 🙂 Me.Top = Screen.PrimaryScreen.WorkingArea.Height - Me.Height Atribui ao top o valor da área visível - a altura do form, de modo a que este fique a ver-se. If Me.Top < Screen.PrimaryScreen.WorkingArea.Height Then Me.Top = Screen.PrimaryScreen.WorkingArea.Height - Me.Height + tmp ElseIf Me.Top = Screen.PrimaryScreen.WorkingArea.Height Then Me.Timer1.Enabled = False Exit Sub End If Verifica se o valor do top é menor que o tamanho da área visível: Se for então atribui a top o valor da área visível - a altura do form + tmp, ou seja faz com que o top seja maior fazendo o efeito de descer. Se o valor do top for igual ao tamanho da área visível, significa que já está completamente escondido e sai. Presumo que te tenhas apercebido que só precisas de trocar os excertos de código uns pelos outros para obteres o efeito que desejas:P Se houver alguma dúvida, avisa que eu não sou muito bom a explicar coisas lol ? cumps 😉
ribeiro55 Posted May 17, 2009 at 02:18 PM Report #264812 Posted May 17, 2009 at 02:18 PM Fade pode-se traduzir em "desvanecer". Onde o Soulsick escreve "fade-in" leia-se antes "slide-up" e onde escreve "fade-out", leia-se antes "slide-down". Para obteres o efeito "FADE" continuas a precisar da opacidade e a tal regra de 3 simples. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
zubimaster Posted May 17, 2009 at 02:27 PM Report #264814 Posted May 17, 2009 at 02:27 PM Hmm, porquê complicar? Timer com intervalo de 1 e com o código: Me.Opacity -= 0.01 If Me.Opacity = 0 Then Application.Exit() Quando quiseres que faça o efeito: Timer1.Enabled = "true" Nada de génio, mas funcional 🙂 Cumps
ribeiro55 Posted May 17, 2009 at 03:37 PM Report #264828 Posted May 17, 2009 at 03:37 PM A ideia e tornar o form mais opaco ou mais transparente consoante a posição vertical em que se encontra. Não queiram fugir à matemática :nono1: Eu já meto aqui um exemplo, como prometi. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
ribeiro55 Posted May 17, 2009 at 05:23 PM Report #264848 Posted May 17, 2009 at 05:23 PM Um bocado em cima do joelho, mas aí está um exemplo. (sem grandes cálculos, por isso é que ando sempre com valores de ajuste de um lado para o outro) Gosto de utilizar atenuadores de movimento, o que pode complicar um pouco o código e a sua percepção... mas para qualquer esclarecimento tou cá. Deve, no mínimo, chegar para te dar uma ideia. Se quiseres uma cena mais simples... melhor. Todos os controlos são adicionados em runtime para minimizar os erros no copy/paste. Para veres o exemplo, só precisas de 2 forms e no startup form (o Form1 por defeito) adicionas um botão, onde vais meter este código: Dim F As New Form2 F.Show() F.Mostrar("Que cena marada!", 5) Depois substituí todo o código do form2 para este: Public Class Form2 Private WithEvents TMR As New Timer Private WithEvents Temporizador As New Timer Private MSG As New Label Private ValorVerticalMin As Integer = 0 Private ValorVerticalMax As Integer = 0 Private ValorHorizontal As Integer = 0 Private Dir As Direccao = Nothing Private Enum Direccao Mostrar Esconder Parado End Enum ''' <summary> ''' Mostrar o "popup" ''' </summary> ''' <param name="Texto">Texto a apresentar (nada de centrado nem isso, apenas para demonstrar)</param> ''' <param name="Tempo">Tempo em segundos</param> ''' <remarks></remarks> Public Sub Mostrar(ByVal Texto As String, ByVal Tempo As Integer) Dir = Direccao.Mostrar MSG.Text = Texto TMR.Enabled = True Temporizador.Interval = Tempo * 1000 End Sub Private Sub RepetidorMovimento(ByVal sender As Object, ByVal e As System.EventArgs) Handles TMR.Tick Select Case Dir Case Direccao.Esconder Dim Modificador As Double = ((ValorVerticalMin + 24) - Me.Top) * 0.05 If Modificador > 1 Then Me.Top += Modificador Me.Opacity = VerificaOpacidade() Else TMR.Enabled = False Dir = Direccao.Parado Me.Close() End If Case Direccao.Mostrar Dim Modificador As Double = (Me.Top - (ValorVerticalMax + 24)) * 0.05 If Modificador > 1 Then Me.Top -= Modificador Me.Opacity = VerificaOpacidade() Else TMR.Enabled = False Dir = Direccao.Parado Temporizador.Enabled = True End If End Select End Sub Private Function VerificaOpacidade() As Double Dim OffsetMax As Integer = ValorVerticalMin - ValorVerticalMax Dim OffsetPos As Integer = ValorVerticalMin - Me.Top Return (OffsetPos / OffsetMax) + 0.2 End Function Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load TMR.Interval = 1 TMR.Enabled = False ValorVerticalMax = My.Computer.Screen.WorkingArea.Height - Me.Height ValorVerticalMin = My.Computer.Screen.WorkingArea.Height ValorHorizontal = My.Computer.Screen.WorkingArea.Width - Me.Width - 3 Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None Me.Top = ValorVerticalMin Me.Left = ValorHorizontal Me.BackColor = Color.White Temporizador.Enabled = False With MSG .AutoSize = False .Top = 2 .Left = 2 .Width = Me.Width - 4 .Height = Me.Height - 4 End With Me.Controls.Add(MSG) End Sub Private Sub TemporizadorParaEsconder(ByVal sender As Object, ByVal e As System.EventArgs) Handles Temporizador.Tick Dir = Direccao.Esconder TMR.Enabled = True Temporizador.Enabled = False End Sub End Class Há maneiras mais fáceis? Há. Tudo depende da maneira como queres utilizar. Só um remark, adiciono 0.2 à opacidade na função que retorna a opacidade por causa do factor 0.05 que uso para atenuar o movimento. Há maneiras matemáticas de dar a volta a isto e ficar certinho, mas não valia a pena para aqui. EDIT: Se o que pretendes é apenas um Fade in/out, o código fica brutalmente mais fácil. Diz qualquer coisa assim que tentares. Posso ter percebido mal o que pretendes. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Soulsick Posted May 17, 2009 at 06:09 PM Report #264863 Posted May 17, 2009 at 06:09 PM Fade pode-se traduzir em "desvanecer". Onde o Soulsick escreve "fade-in" leia-se antes "slide-up" e onde escreve "fade-out", leia-se antes "slide-down". Para obteres o efeito "FADE" continuas a precisar da opacidade e a tal regra de 3 simples. sim eu sei 🙂 e eu até coloquei o fade-in entre "" mas o fade-out passou-me. Apenas utilizei as designações que o sir pereira deu 😛
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now