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 onClick und onMouseOver benutzen (https://www.delphipraxis.net/105837-onclick-und-onmouseover-benutzen.html)

Privateer3000 31. Dez 2007 10:31


onClick und onMouseOver benutzen
 
Hi folks,

wenn man beide Ereignisse verarbeiten will
wie muss man es anstellen, dass zwischen
beiden unterschieden wird?
Wenn ich beiden eine funktion zuweise wird nur
onmouseover verarbeitet, das onclick-ereigniss
wird ignoriert. Trotz das ich dem onmousedown
das Shift-attribut zugewiesen habe...
Hintergund:
Onclick soll eine Aktion starten, mit mousedown
soll das verschieben der kompo aktiviert werden.

Grüßle

Diamondback2007 1. Jan 2008 02:20

Re: onClick und onMouseOver benutzen
 
ich verstehe dein problem nicht so ganz...
willst du dem OnClick und dem OnMouseDown
die gleiche prozedur zuweisen oder iwie?
also wenn du eine OnClick und eine
OnMouseDown haben willst machst du im
Objectinspector bei der registerkarte
"Ereignisse" einfach einen doppelklick
auf das entsprechende ereignis...
de rest übernimmt die IDE für dich...

vielleicht kannst du dein problem noch
etwas genauer beschreiben, denn ich kann
ehrlich gesagt überhaupt nichts damit anfangen...

gruß

Privateer3000 1. Jan 2008 18:23

Re: onClick und onMouseOver benutzen
 
das sind zwei verschiedene proceduren
onclick löst das eine aus zB. eine
berechnung, onmousedown aktiviert
das verschieben des buttons....

sirius 1. Jan 2008 18:31

Re: onClick und onMouseOver benutzen
 
Erst (beim runterdrücken der Maustaste) wird onMousedown ausgeführt und wenn die Maustaste wieder losgelassen wird kommt onClick.

Edit: :gruebel: geht es jetzt um mousedown oder um mouseover?

Aurelius 1. Jan 2008 19:31

Re: onClick und onMouseOver benutzen
 
Ich nehm an es geht um MouseDown.

Man könnte das ganze mit einem Flag lösen. Im Mousedown auf TRUE setzen, im MouseMove
Delphi-Quellcode:
if Flag then Flag := false
und dann im Click prüfen
Delphi-Quellcode:
if Flag then...

xaromz 1. Jan 2008 19:34

Re: onClick und onMouseOver benutzen
 
Hallo,

Zitat:

Zitat von xX0815Xx
Man könnte das ganze mit einem Flag lösen. Im Mousedown auf TRUE setzen, im MouseMove
Delphi-Quellcode:
if Flag then Flag := false
und dann im Click prüfen
Delphi-Quellcode:
if Flag then...

da hast Du aber ein Problem: Das Ereignis MouseDown kommt immer vor einem Klick. Ist ja auch logisch.

Gruß
xaromz

sirius 1. Jan 2008 19:39

Re: onClick und onMouseOver benutzen
 
:warn: Könnten wir mal kurz klären, über welche Ereignisse wir reden und warum? Das macht mich doch etwas verwirrt hier :drunken:

Aurelius 1. Jan 2008 19:43

Re: onClick und onMouseOver benutzen
 
@ xaromz: Ich weiß, das geht doch aus so, oder? Wird die Maus bewegt wird das FLAG auf FALSE gesetzt, so dass das OnClick ereignis nicht ausgeführt wird. Wenn die Maus nicht bewegt wird wird die Click-Prozedure ausgeführt. Die Überlegung sollte doch passen...

@ sirius: Es geht imho darum dass beim Click auf den Button was ausgeführt werden soll, man den Button aber auch auf der Oberfläche verschieben kann (dann soll die Click-Prozedur nicht ausgeführt werden)

Privateer3000 1. Jan 2008 20:07

Re: onClick und onMouseOver benutzen
 
Hallo Leute und Euch allen ein gesundes neues Jahr!
Zitat:

Zitat von xX0815Xx
@ sirius: Es geht imho darum dass beim Click auf den Button was ausgeführt werden soll, man den Button aber auch auf der Oberfläche verschieben kann (dann soll die Click-Prozedur nicht ausgeführt werden)

exacto del mundo, im moment ist es so das zwar das onmousedown ausgeführt wird,
aber das onclick überhaupt nicht. Habe das mit Rückgabe wert kontrolliert.

Auszug aus dem oncreate des Buttons:
Delphi-Quellcode:
aLabel.OnClick:=p1_1Click;
 aLabel.OnMouseDown:=verschiebebutton;
  aLabel.OnMouseUp:=speicherposition;
dann
Delphi-Quellcode:
procedure TKasse.verschiebebutton(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then begin
with (Sender as TXiButton) do begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
end;
end;
dann speichern
Delphi-Quellcode:
procedure TKasse.speicherposition(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
with (Sender as TXiButton) do begin
t1_quer.Close; t1_quer.SQL.Clear;
t1_quer.SQL.Add('UPDATE k_artdb SET');
t1_quer.SQL.Add('SETLEFT='+IntToStr(Left)+',');
t1_quer.SQL.Add('SETTOP='+IntToStr(Top)+' ');
t1_quer.SQL.Add('WHERE id='+IntToStr(TComponent(Sender).Tag)+'');
t1_quer.ExecSQL;
Showmessage('!');
end;
end;
das onlick erspar ich mir jetzt.

Vielen Dank Leute

Aurelius 1. Jan 2008 20:11

Re: onClick und onMouseOver benutzen
 
Hast du meinen Tipp mal ausprobiert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
Seite 1 von 2  1 2      

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