Autor Beitrag
Adory
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP
Delphi 7
BeitragVerfasst: So 16.01.11 16:56 
Hallo Leute,

ich habe für einige Panels ein OnMouseEnter-Ereignis definiert; möchte jedoch, dass nur dann etwas ausgeführt wird, wenn dabei die Linke-Maustaste gedrückt gehalten wird. Hatte es schon so versucht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure mouseenter(Sender: TObject);
begin
if (GetAsyncKeyState(VK_LBUTTON)) = 1 then begin
//... etc.


aber irgendwie klappt es nicht :/ Hat jemand eine Idee?
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 16.01.11 17:55 
Hi, warum verwendest Du nicht das original onMouseDown-Ereignis der Panels? Dann brauchst Du auch nicht den Umwegmachen. Und ein onMouseEnter :gruebel: in das onEnter ereignis zu setzen, erwartet glaube ich auch ein Tastaturereignis!?

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 16.01.11 18:14 
Wenn die Maustaste in einem anderen Programm gedrückt wurde und dann gedrückt über dein Fenster gezogen wird, bin ich mir nicht sicher, ob überhaupt ein OnMouseEnter Ereignis ausgelöst wird. :gruebel:

Denn dann hat das andere Programm noch die Maus im Capture. Ich denke also, dass das Ereignis erst nach dem Loslassen der Maustaste überhaupt ausgelöst wird.

@user profile iconALF: OnMouseDown wird ja nur ausgelöst, wenn das Ereignis über dem eigenen Programm bzw. dem entsprechenden Control passierte.
Adory Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP
Delphi 7
BeitragVerfasst: So 16.01.11 18:19 
Danke erstmal :)

Die Panels werden zur Laufzeit erzeugt, dass hätte ich vllt. dazuschreiben sollen. OnMouseDown verwende ich aus dem Grund nicht, dass ich nicht jedesmal erst klicken möchte wenn ich mit der Maus über ein neues Panel fahre.. Das Ereignis soll ausgelöst werden sobald ich mit der Maus drüberfahre (aber eben unter der Bedingung, dass dabei auch die Linke Maustaste gehalten wird.). Es funktioniert auch soweit alles bestens, es hapert nur an der Unterscheidung zwischen Maustaste gedrückt und nicht :<




ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure mouseenter(Sender: TObject);
begin
if (GetAsyncKeyState(VK_LBUTTON)) = 1 then begin
//... etc.


procedure Tform1.FormCreate(Sender: TObject);
begin
for y:=1 to 20 do begin
   for x:=1 to 20 do begin
    TPanel.Create(Self).Name := NamePrefix + IntToStr(x)+'_'+IntToStr(y);
    with TPanel(FindComponent(NamePrefix + IntToStr(x)+'_'+IntToStr(y))) do
    begin
      width      :=10;
      height     :=10;
      Left       :=(x*10)+7;
      Top        :=(y*10)+12;
      Color      :=$00E6E6E6;
      Parent     :=self;
      bevelouter :=bvnone;
      onmouseenter:=mouseenter; //<----
     end;
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 16.01.11 18:28 
ansonsten kan man ja auch onMouseMove verwenden!

Gruss als

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Adory Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP
Delphi 7
BeitragVerfasst: So 16.01.11 18:35 
Wie gesagt, es funktioniert ja auch soweit. Das Ereignis wird entsprechend ausgelöst. OnMouseMove könnte ich auch verwenden, das käme vermutlich auf dasselbe heraus.
Es geht mir nur darum wie ich unterscheiden kann ob die linke Maustaste momentan gedrückt ist oder nicht.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 16.01.11 18:40 
Einfache Lösung, Du setzt, wenn irgendwo Deine Mousetaste gedrückt wurde(im eigenen Fenster), ne Variable auf thrue, und fragst sie in deiner Routine ab!?

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 16.01.11 18:44 
user profile iconAdory hat folgendes geschrieben Zum zitierten Posting springen:
Es geht mir nur darum wie ich unterscheiden kann ob die linke Maustaste momentan gedrückt ist oder nicht.
Das weißt du innerhalb deines Programmes ja, wenn du OnMouseDown und OnMouseUp entsprechend behandelst und den Zustand speicherst. Innerhalb des Programms hat user profile iconALF da schon Recht.

Ich habe es aber gerade ausprobiert. Ich hatte Recht. Wenn ich auf z.B. dem Formular die Maus drücke, wird OnMouseEnter der Panels erst ausgelöst, wenn ich die Maus wieder losgelassen habe...
Das gleiche gilt für OnMouseMove der Panels. Eben weil das Control, auf dem die Maus gedrückt wurde, noch den Capture hat und deshalb die Mausereignisse bekommt.

Deshalb wirst du so wie du es im Moment versuchst nicht weiterkommen...

// EDIT:
Sieht nach einem typischen Fall aus, in dem mehrere visuelle Komponenten zur Darstellung benutzt werden, obwohl das an der Stelle wenig sinnvoll ist. Willst du vielleicht etwas in der Art machen?
www.delphi-forum.de/viewtopic.php?p=557541
(Also mehrere Textpanels sozusagen?)
Da eignet sich das Vorgehen mit einer TPaintBox z.B. viel besser.
Adory Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP
Delphi 7
BeitragVerfasst: So 16.01.11 19:06 
Zitat:
Sieht nach einem typischen Fall aus, in dem mehrere visuelle Komponenten zur Darstellung benutzt werden, obwohl das an der Stelle wenig sinnvoll ist.

Da könntest du Recht haben. Danke ;)