[vb.net] Form zonder focus bewegen

Pagina: 1
Acties:

  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 08-05 22:01
Mensen ik heb een probleem.
Ik zou graag een form willen laten bewegen en transparant maken.
Het bewegen lukt reeds alleen denk ik dat het efficenter kan.
Omdat het formpje beweegt wilt hij niet transparant worden klopt dit?

Het formpje is 96 pixels hoog en bestaat alleen als een form beslaand label en beweegt van boven het scherm tot net in beeld.
blijft dan 9 a 10 sec hangen en gaat dan weer terug waat hij zichzelf opheft.

ik gebruik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Public Class emailmelder
 Inherits System.Windows.Forms.Form
 Private ETop As Short = 10
 Private EStay As Short = 10
 Private Espeed As Short = 200
 Private EStap As Short = 0

 'Form gedeelte weggelaten

 Public Sub Show_Melding(ByVal Melding As String)
  Me.Top = 0 - (Me.Height + 10)
  Me.Left = (Screen.PrimaryScreen.WorkingArea.Width - Me.Width) / 2
  Me.Opacity = 0.75

  Me.Show()

  ETop = 10
  EStay = 10
  Espeed = 20

  MoveTeller.Interval = Espeed
  EStap = 1
  MoveTeller.Start()

 End Sub

 Private Sub MoveTeller_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MoveTeller.Tick
  Select Case EStap
   Case 1
    Me.Top += 1
    If Me.Top = ETop Then
     MoveTeller.Stop()
     MoveTeller.Interval = 1000
     EStap = 2
     MoveTeller.Start()
    End If
   Case 2
    EStay -= 1
    If EStay = 0 Then
     MoveTeller.Stop()
     MoveTeller.Interval = Espeed
     EStap = 3
     MoveTeller.Start()
    End If
   Case 3
    Me.Top -= 1
    If Me.Top = 0 - (Me.Height + 10) Then
     MoveTeller.Stop()
     Me.Close()
    End If
  End Select

  Me.Refresh()
 End Sub
End Class


Zonder die me.refresh() is het formpje helemaal zwart.

Is het tevens mogelijk het form geen focus te geven.
Het moet alleen een informatie ballon zijn we topmost op het scherm komt.
en zelf weer verdwijnt (een beetje ala msn popup).

edit:

Heb het transparant probleem opgelost.
Gebruikte 75 ipv 0.75 (schaamt zich)

[ Voor 4% gewijzigd door mrfatmen op 10-04-2005 14:29 ]

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

In de test die ik net heb uitgevoerd wordt mijn schermpje altijd netjes getekend... De code die ik gebruikte:
C#:
1
2
3
4
5
6
7
8
private void Slide()
{
    while (this.Top != 0)
    {
        this.Top += 1;
        System.Threading.Thread.Sleep(5);
    }
}
Om deze methode aan te roepen had ik een timer op het weer te geven scherm gezet, waarin de locatie van het scherm goed gezet werd (this.Top = 0 - this.Height) en vervolgens de methode Slide aangeroepen werd.

Wat betreft de focus: daarvoor is een Windows API die doet wat jij wil. De ShowWindow (als ik me niet vergis) in combinatie met SW_SHOWNOACTIVATE. Die laatste is ook wel een goede om op te zoeken ;)

Jouw code zou volgens mij inderdaad een stukje optimaler kunnen. Als je mijn methode Slide als volgt aanpast ben je er volgens mij ook... Je zou dit natuurlijk eventueel in aparte methodes kunnen zetten.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void Slide()
{
    //Slide in
    while (this.Top != 0)
    {
        this.Top += 1;
        System.Threading.Thread.Sleep(5);
    }
    //Stay in
    while(eStay > 0)
    {
        eStay -= 1;
        //Een seconde slapen voor elke eStay
        System.Threading.Thread.Sleep(1000);
    }
    //Slide out
    while (this.Top != 0 - this.Height)
    {
        this.Top -= 1;
        System.Threading.Thread.Sleep(5);
    }
}

My personal website