Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie schnell reagiert Delphi (https://www.delphipraxis.net/100563-wie-schnell-reagiert-delphi.html)

taktaky 30. Sep 2007 16:35


Wie schnell reagiert Delphi
 
Hallo,

was muss man tun, damit Delphi schnell reagiert ?
ich habe z.B. ein Panel1 erstellt, das auf MouseOver reagiert, leider wenn ich den Cursor darüber sehr schnell anfahre, dann passiert nichts, nur wenn ich den Cursor langsam bewege !!!
Delphi-Quellcode:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
ShowMessage('ich habe dich erwischt');
end;
Delphi kann nie den Cursor erwischen !!!


____

DeddyH 30. Sep 2007 17:05

Re: Wie schnell reagiert Delphi
 
Das ist kein Delphi- sondern ein Windows-Problem.

malo 30. Sep 2007 17:12

Re: Wie schnell reagiert Delphi
 
Kann ich nicht nachvollziehen. Habs grad mit WinXP Pro und D5 Pro ausprobiert und ich kann gar nicht schnell genug mit dem Cursor über das Panel huschen, dass keine Meldung erscheint. Vielleicht ist deine CPU-Auslastung einfach ziemlich hoch?

OregonGhost 30. Sep 2007 17:12

Re: Wie schnell reagiert Delphi
 
Wenn du den Cursor mal schnell bewegst, wirst du feststellen, dass er sich nicht flüssig von A nach B bewegt, sondern springt. Genauere Daten kommen nicht herein. Wenn dein Panel also genau zwischen zwei Mauspositionen liegt, bekommt es keine Meldung. Es gibt normalerweise auch keine Notwendigkeit, auf solche Bewegungen zu reagieren.

@malo, roter Kasten: Mach das Panel mal relativ klein, dann wirst du's schon sehen.

taktaky 30. Sep 2007 17:16

Re: Wie schnell reagiert Delphi
 
Zitat:

Zitat von DeddyH
Das ist kein Delphi- sondern ein Windows-Problem.

Ok, und was kann man dafür machen?
Ich habe versucht mit einem Timer das Problem zu lösen, leider immer noch nicht geschaft

---

DeddyH 30. Sep 2007 17:21

Re: Wie schnell reagiert Delphi
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if not PtInRect(Rect(Left,Top,Left + Width, Top + Height),Mouse.CursorPos) then
    Close;
end;
So z.B.

taktaky 30. Sep 2007 17:22

Re: Wie schnell reagiert Delphi
 
Zitat:

Zitat von malo
Kann ich nicht nachvollziehen. Habs grad mit WinXP Pro und D5 Pro ausprobiert und ich kann gar nicht schnell genug mit dem Cursor über das Panel huschen, dass keine Meldung erscheint. Vielleicht ist deine CPU-Auslastung einfach ziemlich hoch?

Vielleicht hast Du das Panel Breit gemacht. Mach das Panel klein wie ein Button und noch einmal ausprobieren

---

taktaky 30. Sep 2007 17:36

Re: Wie schnell reagiert Delphi
 
Zitat:

Zitat von DeddyH
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if not PtInRect(Rect(Left,Top,Left + Width, Top + Height),Mouse.CursorPos) then
    Close;
end;
So z.B.

Schon ausprobiert und funktioniert sehr gut :thumb: .

Ich wollte den selben Code um das Form2 aufzurufen (und zu beenden), dann wird das Form2 zwar aufgerufen auch wenn ich sehr schnell den Cursor bewege, erscheint aber danach eine Fehlermeldung:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if PtInRect(Rect(Left,Top,Left + Width, Top + Height),Mouse.CursorPos) then
    Form2.ShowModal();
end;

DeddyH 30. Sep 2007 17:42

Re: Wie schnell reagiert Delphi
 
Das war der Code für Form2, um es beim Verlassen zu beenden (auch wenn Form1 da steht).

taktaky 30. Sep 2007 23:24

Re: Wie schnell reagiert Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja Form2 wird wie gewünscht beendet mit Timer1
Ich muss aber auch das Form2 mit einem anderen Timer genauso einblenden lassen

Wie kann ich nun Form2 aufrufen, wenn der Cursor auf Panel2 kommt?
Aber genuso mit einem anderen Timer und nicht so:
Delphi-Quellcode:
procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  begin
Form2.ShowModal();

end;
Oder stimmt was @OregonGhost gesagt hat und können wir dafür nicht machen ?

Also mit dem Code kann ich Form2 einblenden, wenn der Cursor auf Form1 kommt.
Ich möchte aber das Form2 einblenden, wenn der Cursor auf Panel2 kommt und nicht auf Form1 :
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if PtInRect(Rect(Left,Top,Left + Width, Top + Height),Mouse.CursorPos) then
    Form2.ShowModal();
end;
Leider kann man keinen Timer auf Panel anlegen.


-----------

turboPASCAL 1. Okt 2007 03:55

Re: Wie schnell reagiert Delphi
 
Zitat:

Zitat von taktaky
Leider kann man keinen Timer auf Panel anlegen.

Och, der liegt doch da sehr gut. :mrgreen:

Ein Timer ist eine nicht visuelle Komponente, du musst das schon im Quelltext regeln.

DeddyH 1. Okt 2007 07:58

Re: Wie schnell reagiert Delphi
 
Versuch es mal so auf Form1:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if PtInRect(Rect(0,0,Panel1.Width,Panel1.Height),
              Panel1.ScreenToClient(Mouse.CursorPos)) and not Form2.Visible then
    Form2.Show;
end;
Du musst auch beachten, ob Form2 bereits sichtbar ist. ;)

taktaky 18. Okt 2007 22:01

Re: Wie schnell reagiert Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH
Versuch es mal so auf Form1:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if PtInRect(Rect(0,0,Panel1.Width,Panel1.Height),
              Panel1.ScreenToClient(Mouse.CursorPos)) and not Form2.Visible then
    Form2.Show;
end;
Du musst auch beachten, ob Form2 bereits sichtbar ist. ;)

Hallo,

Es geht weiter :mrgreen:
Die Idee ist super. Das ist aber beim Schließen
Ich möchte auch das Form2 wieder anzeigen lassen möchte, nur wenn der Cursor auf Panel kommt
Aber natürlich ganz schnell, genau wie der Code Oben

Den Code oben kann ich nicht in Form1 anlegen, da ich das Form2 nur anzeigen lassen, wenn der Cursor auf Panel bewegt.
Kann man noch einen Timer auf Form1, der nur reagiert, wenn der Cursor auf Panel kommt?

Muetze1 18. Okt 2007 23:29

Re: Wie schnell reagiert Delphi
 
Informier dich mal über die VCL Botschaften Delphi-Referenz durchsuchenCM_MOUSEENTER und Delphi-Referenz durchsuchenCM_MOUSELEAVE

taktaky 18. Okt 2007 23:59

Re: Wie schnell reagiert Delphi
 
Zitat:

Zitat von Muetze1
Informier dich mal über die VCL Botschaften Delphi-Referenz durchsuchenCM_MOUSEENTER und Delphi-Referenz durchsuchenCM_MOUSELEAVE

sind die besser als der Code oben?

Allerdings habe ich den Code nun verbessert
Form2 wird angezeigt nur wenn der Cursor auf Panel kommt :thumb:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if PtInRect(Rect(left+panel1.Left,top+panel1.Top,left+panel1.Left + panel1.Width, top+panel1.Top + panel1.Height),Mouse.CursorPos) then
    Form2.ShowModal();
end;
Ein kleines Problem: Form2 wird zwar angezeigt aber nur wenn der Cursor fast in der Mitte von dem Panel ! :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr.

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