Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Erkennen ob die Linke Maustaste losgelassen wurde!!


DelphiManiac - Mi 29.08.07 11:27
Titel: Erkennen ob die Linke Maustaste losgelassen wurde!!
Hallo,

gibt es irgendeine Möglichkeit sich über das loslassen der Maustaste über einer Komponente (die Kein MouseUP Event hat) informieren zu lassen?

Mein Problem: ich nutze ein TJVSpinEdit.

Ein Editfeld der Jedis mit dem man auch Floatwerte darstellen kann, in dem Editfeld rechts hat man Up/Down Buttons (kennt mitsicherheit jeder) die zu hoch/runter zählen benutzt werden.

Nun das Edifeld als solche bietet mir ja ein MouseUP Event an, aber das bringt mir nichts, da ich ja das Event für die Buttons brauche.

Also Benutzer hält die Linke Maustaste gedrückt über dem (Bsp:) Hochzählen Button und lässt sie dann (irgendwann) los ,das muss ich erkennen können.

Danke schonmal...

//EDIT: Hatte MouseDown anstatt MouseUP geschrieben


chrisw - Mi 29.08.07 11:50

Wie wärs mit dem OnMouseUP Event ?


DelphiManiac - Mi 29.08.07 11:58
Titel: Re: Erkennen ob die Linke Maustaste losgelassen wurde!!
Hi chrisw
user profile iconchrisw hat folgendes geschrieben:
Wie wärs mit dem OnMouseUP Event ?


Ja leider gibt es kein MouseUp/Down Event für die Buttons des Editfeldes, das ist ja mein Problem:


chrisw - Mi 29.08.07 12:02

Versteh ich nicht !

Wenn ich Abfangen möchte, ob die linke Maustaste losgelassen wurde kann ich das doch im OnMouseUp abfangen !

Bsp.:


Delphi-Quelltext
1:
2:
3:
4:
procedure Tform1.JvSpinEdit1MouseUp(....);
begin
  if Button = mbLeft then ....
end;


DelphiManiac - Mi 29.08.07 12:11

user profile iconchrisw hat folgendes geschrieben:
Versteh ich nicht !

Wenn ich Abfangen möchte, ob die linke Maustaste losgelassen wurde kann ich das doch im OnMouseUp abfangen !

Bsp.:


Delphi-Quelltext
1:
2:
3:
4:
procedure Tform1.JvSpinEdit1MouseUp(....);
begin
  if Button = mbLeft then ....
end;


Leider geht dies so nicht, da dieses Event nur ausgelöst wird, wenn die Maustaste über dem Editfeld (und nicht über dem [integriertem] Up/Down Tasten losgelassen wurde


DelphiManiac - Mi 29.08.07 13:38

Hat den keiner eine Idee, wie man das lösen könnte?

Danke euch...


chrisw - Mi 29.08.07 14:15

OnBottomClick und OnTopClick sind nicht ausreichend ?
Dann musst Du wohl eine neue Komponente ableiten.


DelphiManiac - Mi 29.08.07 14:53

user profile iconchrisw hat folgendes geschrieben:
OnBottomClick und OnTopClick sind nicht ausreichend ?
Dann musst Du wohl eine neue Komponente ableiten.


Hi ja genau das wollte/will ich tun, habe jedoch noch nicht sonderlich viel Erfahrung in der Komponentenerstellung.
Also die Buttons haben ja irgendwann mal von TControl geerbt, und TControl hat ja ein MouseUp Event, aber dieses wird wohl nicht durchgereicht, und ist sowie ich das sehe private, wird also dann in meiner Komponente auch nicht verfübar sein,oder??

Gruß
und Danke schonmal


Jakob_Ullmann - Mi 29.08.07 16:55

Das könntest du doch auch mit GetAsyncKeystate machen:

Delphi-Quelltext
1:
2:
3:
4:
if GetAsyncKeystate(VK_RBUTTON) => 0 then
begin
  // rechte Maustaste wurde losgelassen
end;


jaenicke - Mi 29.08.07 18:51

Wenn du dir den Quelltext der JEDI-Komponente (in JvSpin.pas) mal ansiehst, dann siehst du, dass das da bereits vorhanden ist, dass das aber nicht in die äußere Komponente weitergegeben wird. Du müsstest also die Datei kopieren, den Komponentennamen ändern und die Funktionalität dementsprechend ändern können.


DelphiManiac - Do 30.08.07 11:38

jaenicke:

Hi ja da hast du Recht so müsste ich es machen, habe leider noch nicht so viel Erfahrung was Komponentenentwicklung angeht, ich habe mir die Datei jetzt mal kopiert und umbenannt.

Da wird natürlch ganz schön viel vereerbt..., was das ganze nicht unbedingt leichter macht,
vielleicht kannst du (oder alle anderen) mir ja ein wenig helfen, bei der Implementierung.

Gruß
DelphiManiac


DelphiManiac - Do 30.08.07 11:52

Jakob_Ullmann:

Wie würde ich es denn mit GetAsyncKey lösen können?

Gruß
DelphiManiac