Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mouseover bei einem Formular...? (https://www.delphipraxis.net/8439-mouseover-bei-einem-formular.html)

DieTa 4. Sep 2003 16:20


Mouseover bei einem Formular...?
 
Servus,

Also ich weiß nicht wer von Euch das Dock bei MacOS-X kennt. Ist im Grunde bei der Windows-Taskleiste der selber Effekt, wenn diese langsam nach unten gleitet :).

Nun... im Grunde geht es auch nicht um das "nach unten gleiten", sondern viel mehr um das wieder zum Vorschein bringen. Bei der Taskleiste geht das indem man im Grunde in den Bereich kommt, wo diese vorher war.

Hat jemand eine Idee, wie man das realisieren kann!? :)


Ciao
DieTa

Alexander 4. Sep 2003 16:28

Re: Mouseover bei einem Formular...?
 
Also irgendwie habe ich das ncith so ganz verstanden ;-)
Wenn du keinen Hook auf die Maus hast und dann WM_MOUSEMOVE abfängst, hättest du prakitsch ein OnMouseOver für dein Formular.
Aber irgnediwe habe ich so das Gefühl, dass ich dich nicht verstanden habe :mrgreen:

DieTa 4. Sep 2003 16:31

Re: Mouseover bei einem Formular...?
 
Hmmm ich glaube auch *g*

Du kennst die Funktion "Taskleiste ausblenden", oder?
Sowas möchte ich gerne nachbauen :)

Wenn diese ausgeblendet ist, fährst Du mit der Maus an den unteren Bildschirmrand und die Taskleiste kommt zum Vorschein.

neolithos 4. Sep 2003 16:40

Re: Mouseover bei einem Formular...?
 
via MouseMove erkennst du ob eine Maus über dem Formular ist.
Und hab ich einen Timer aktiviert der solange läuft bis die Maus das Formular verlässt. In ihm wird das natürlich geprüft.

DieTa 4. Sep 2003 16:48

Re: Mouseover bei einem Formular...?
 
@Neolithos: Alles klar, dann werde ich das mal so testen.

Allerdings habe ich hier momentan noch ein anderes Problem. Wenn ich einen Button anklicke, soll sich das Formular in Richtung Bildschirmrand bewegen. Sollte das schon dort sein, soll es sich um 70 Pixel darüber hinaus in den negativen Bereich bewegen. Das macht es aber nicht. Auch bewegt es sich z.B. einwandfrei von zB Position "left" 100 nach 500, nur eben nicht von 500 nach 100 zurück. Ich lege mal den Code bei...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if YPos = 0 then
  begin
  for i := YPos to -70 do
  begin
    form1.Left := i;
    sleep(10);
  end;
  end
  else
  if not YPos = 0 then
  begin
  for i := YPos to 0 do
  begin
    form1.Left := i;
    sleep(10);
  end;
end;
end;
Ciao
DieTa

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

neolithos 4. Sep 2003 17:01

Re: Mouseover bei einem Formular...?
 
überprüfe mal to un downto

DieTa 4. Sep 2003 17:21

Re: Mouseover bei einem Formular...?
 
@neolithos:
Ok.. das mit dem downto klappt - im Grunde genommen. Allerdings klickt man den Button, es passiert nen Moment gar nichts und dann ist das Teil auch schon im Bildschirmrand drin :)

Ich habe es so realisiert:
Delphi-Quellcode:
var
  j: integer;
  i: integer;

begin
  for i := 0 downto -60 do
  begin
    form1.Left := i;
    sleep(30);
   end;

  for j := 255 downto 0 do
    begin
    form1.AlphaBlendValue := i;
    sleep(30);
  end;
end;
PS. Daniel B: Ich hoffe das ist jetzt der richtige :)

neolithos 4. Sep 2003 17:31

Re: Mouseover bei einem Formular...?
 
Du musst dem Fenster auch die Möglichkeit zum neuzeichnen geben.

einfachsten:
Delphi-Quellcode:
Application.ProcessMessages;
professionel:
SetWindowPos
UpdateWindow
verwenden


Ein Beispiel:

Delphi-Quellcode:
procedure SlideWindow(ahwndWin : HWND; arcEnd : TRect; adwTimerInterval : Cardinal);
var rcStart : TRect;
    dwTimerStart,
    dwTimerEnd,
    dwTime : Cardinal;
    iX,
    iY,
    iHeight,
    iWidth : Integer;
    fPos : Double;
begin
  GetWindowRect(ahwndWin, rcStart);

  if fPWApp.smFullDrag and not PWRect.Compare(rcStart, arcEnd) then
     begin
       dwTimerStart := GetTickCount;
       dwTimerEnd := GetTickCount + adwTimerInterval;
       dwTime := GetTickCount;

       while dwTime < dwTimerEnd do
         begin
           fPos := (dwTime - dwTimerStart) / adwTimerInterval;

           iX := rcStart.Left - Round((rcStart.Left - arcEnd.Left) * fPos);
           iY := rcStart.Top - Round((rcStart.Top - arcEnd.Top) * fPos);
           iWidth := PWRect.Width(rcStart) - Round((PWRect.Width(rcStart) - PWRect.Width(arcEnd)) * fPos);
           iHeight := PWRect.Height(rcStart) - Round((PWRect.Height(rcStart) - PWRect.Height(arcEnd)) * fPos);

           SetWindowPos(ahwndWin, 0, iX, iY, iWidth, iHeight,
             SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
           UpdateWindow(ahwndWin);
           dwTime := GetTickCount;
         end;
     end;

  SetWindowPos(ahwndWin, 0,
    arcEnd.Left, arcEnd.Top,
    PWRect.Width(arcEnd), PWRect.Height(arcEnd),
    SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
  UpdateWindow(ahwndWin);
end;
adwTimerInterval setze ich meist auf 400

DieTa 4. Sep 2003 17:50

Re: Mouseover bei einem Formular...?
 
*hust*

habe ich eigentlich erwähnt, das ich erst seit 2 Tagen Delphi benutze? Mein Vorkenntnisse sind etwas VB und TurboPascal *g*

naja.. ich lese mich mal weiter ein...

Frage zu diesem:
Delphi-Quellcode:
Application.ProcessMessages;
wo muss das genau hin? Einfach in die Prozedur rein? :)

Mit dem MouseOver klappt übrigens wunderbar :)

neolithos 4. Sep 2003 17:55

Re: Mouseover bei einem Formular...?
 
Delphi-Quellcode:
var
  j: integer;
  i: integer;

begin
  for i := 0 downto -60 do
  begin
    form1.Left := i;
    Application.ProcessMessages;
    sleep(30);
   end;

  for j := 255 downto 0 do
    begin
    form1.AlphaBlendValue := i;
    Application.ProcessMessages;
    sleep(30);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz