Delphi-PRAXiS

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 SpinEdit - bei gedrückter Maustaste kein OnChange auslösen (https://www.delphipraxis.net/18101-spinedit-bei-gedrueckter-maustaste-kein-onchange-ausloesen.html)

Keldorn 14. Mär 2004 17:54


SpinEdit - bei gedrückter Maustaste kein OnChange auslösen
 
Hallo

Ich steh momentan ein wenig auf dem Schlauch. Ich habe ein Spinedit und bei jeder Änderung wird eine etwas lang andauernde Aktion durchgeführt. Wenn der User die Werte mit den Up/down -Schalter verändert, soll die Aktion nur durchgeführt werden, wenn er die Schalter am Ende wieder "losläßt", sonst soll sich nur die Wertanzeige ändern. Und dort haperts. Ich habe im Onchange mir erstmal mit einem
Delphi-Quellcode:
if GetAsyncKeyState(VK_LBUTTON)=0 then Mach_eine_langwierige_Aktion;
beholfen, dann wird die Aktion nur ausgeführt, wenn der User lange auf einem der Buttons bleibt und zum Schluß losläßt. Leider wird die Aktion nicht ausgeführt, wenn der User nur einmal kurz auf einen der beiden Buttons drückt um den Wert einmal zu ändern.

hat jemand eine Idee, wie ich das realiseren könnte? Ich möchte nach Möglichkeit beim Original-spinedit bleiben und in meinem Programm reagieren und nicht die Sourcen ändern.

Danke im Voraus

Frank

mirage228 14. Mär 2004 18:23

Re: SpinEdit - bei gedrückter Maustaste kein OnChange auslös
 
Du könntest es mit einem TUpDown und einem TEdit zusammen versuchen.
Vielleicht hat das TUpDown ein Event, dass dir weiterhilft.

mfG
mirage228

Keldorn 14. Mär 2004 18:48

Re: SpinEdit - bei gedrückter Maustaste kein OnChange auslös
 
Danke, hmm, dort geht es. Dort kann ich auf mousedown und mouseup reagieren und dann würde es gehen.
Allerdings bin ich mit dem Spinedit schon ziemlich weit. Hätte noch jemand ne Alternativ idee?

Wheelie 14. Mär 2004 18:58

Re: SpinEdit - bei gedrückter Maustaste kein OnChange auslös
 
Du könntest nach Veränderung des Wertes des SpinEdits eine "Pause" (siehe unten) im Programm einlegen, bevor die lange Prozedur ausgeführt wird. Die Pause muss wahrscheinlich nicht mal eine halbe Sekunde lang sein. Falls nun der Wert des SpinEdits vor dem Ende der Pause verändert wird, fängt die Pause von vorne an etc. Notfalls musst du noch von ein paar Boolean-Variablen gebrauch machen. Ich hoffe du weißt so ungefähr was ich meine.

Hier eine Prozedur, die dir das aus Turbo Pascal bekannte "Delay()" simuliert:
Delphi-Quellcode:
procedure Wait(Time: Word);
var Start: Integer;
begin
  Start := GetTickCount;
  While GetTickCount - Start <= Time do
    Application.ProcessMessages;
end;

Keldorn 16. Mär 2004 19:24

Re: SpinEdit - bei gedrückter Maustaste kein OnChange auslös
 
Also ein Delay möchte ich nicht einbauen, da könnte ich auch meine Prozedure laufen lassen, das wär das gleiche. Wenn dann könnte ich die Zwischenzeit der Onchanges abfragen , aber das ist mir irgednwie zu ungenau.

Ich habs jetzt anders gemacht, und doch eine eigene Kompoonente anhand des Spinedit-sourcen erstellt, eine zusätzliche Bool-Eigenschaft hinzugefügt und bei timer-ereignis der Hoch-Runterbuttons setzte ich diese und weiß, ob der Click durch den Timer ausgelöst wurde oder normal durch Klicken.

Trotzdem Danke für die Vorschläge

Frank


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

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