![]() |
Aktion darf nur alle 3 Sekunden ausgeführt werden.
Hi!
Ich bräuchte mal eure Hilfe. Ich will, dass eine bestimmte Aktion nur alle 3 Sekunden ausgelöst werden kann, sprich, wenn ich 2 mal innerhalb von 2 Sekunden auf den Button klicke, nur einmal was passiert.Nach 3 Sekunden ist es dann wieder "frei" Wie kann ich das realisieren? |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Guten Morgen,
beim ertsen klicken die Zeit speichern (GetTickCounts) beim nächsten klicken wieder GetTickCount aufrufen und den Zeitunterschied ermitteln. Ist er kleiner als 3 Sekunden -> mache nichts Ist er größer oder gleich 3 Sekunden -> Zeit neu setzen und führe Aktionen aus. Grüße Klaus |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Hi,
da haste mehrere Möglichkeiten. 1.) Du kannst nen TTimer auf dein Formular ziehen und auf drei sekunden einstellen (interval=3000) dann kannst du im Buttonklick - den Timer Aktivieren - Den Button disablen im Timer kannst du [edit=bug entfernt] - nachdem der timer einmal durchgelaufen ist den Button wieder Enablen[/edit] 2. Möglichkeit: Suche mal nach Gettickcount, damit kannst du die Zeit abfragen die vergangen ist ;) Es gibt wahrscheinlich noch mehr möglichkeiten Gruß |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Moin, moin,
ja, so wie Klaus geschrieben hat! Vielleicht sollte alternativ (damit der Benutzer nicht verwirrt ist) der Button nach der ersten Click für 3 Sekunden gesperrt (disabled) werden, dann sieht der Anwender auch sofort, dass er in diesem Zeitraum keine Aktion auslösen kann Gruß |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
@angos: Der Timer braucht nur einmal durchlaufen zu werden, da Du das Interval bereits auf 3000 vorbesetzt.
@postruh: Welche Lösung favorisierst Du denn nun eigentlich? Erst schreibst Du, dass man es wie Klaus machen solle, dann gibst Du an, dass man den Button auch entsprechend disablen solte, was eindeutig die Lösung von angos ist :-) Gruß onlinekater |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Zitat:
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Also den Button disablen geht schonmal nicht ^^
Das ganze wird über eine externe USB Karte gesteuert, welche ihre eigenen Knöpfe hat.D.h.: Mein programm reagiert auf Knopfdrücke der Karte. Ich werde mir mal Gettickcount anschauen in der Delphi Hilfe, wäre allerdings auch cool wenn es hier jemand besser als die Hilfe erklären kann. //Edit: Also ich habe grade mal nachgeschaut, und die Delphi Hilfe hat leider keinen Eintrag zu dem Thema. |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Hallo, Zusammen!
Ich favorisiere die von mir vorgeschlagene Alternative, den Button für den Zeitraum zu sperren - finde ich benutzerfreundlicher :wink: |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Na, N3ON,
Klaus hat die Schritte aber wirklich gut vorgegeben, versuch's doch einfach mal... |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Zitat:
Schon wenn ich versuche die Zeit zu speichern: begin Gettickcounts; end; bekomme ich ne Fehlermeldung. Muss ich das vielleicht in eine Variable speichern oder so? |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Schreibe GetTickCount, mit Cursor 'draufgehen, F1 drücken, dann wird (bei mir) ein Hilfetext angezeigt. Ist 'ne Funktion, Ergebnis ist vom Typ DWord, gibt die Zeit in Millisekunden seit dem WindowsStart an. Also kannst du beim zweiten Aufruf die Zeitdifferenz in Millisekunden bestimmen...
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Ja klar, vom Typ DWord :wink:
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Delphi-Quellcode:
Meint ihr das stimmt so?
begin
Test := Gettickcount; Ergebniss := Gettickcount - Test; if Ergebniss > 3 then shellexecute(handle,'open',pchar('mplayerc.exe'),pchar(video1),nil,sw_show); end; |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Hm, die Prüfung ergibt wohl alle drei Millisekunden ein TRUE, also besser 3*1000 ...
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
ach so, dann auch noch den StartZeitpunkt zurücksetzen, d.h. neu lesen
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Ja, und überhaupt - du darfst natürlich nicht direkt hintereinander 2x GetTickCount lesen, das geht ja nun leider überhaupt nicht ...
Lese doch bitte noch mal in Ruhe die Handlungsvorgabe von Klaus! |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Zitat:
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Hm, im Prinzip gern, musst aber noch ein bisschen warten (habe jetzt einen Bürotermin) Vielleicht hilft in der Zwischenzeit ja ein Anderer. Schaue aber nachher noch mal 'rein und helfe sonst gern weiter.
Gruß |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Also ich hab folgende globale Variablen:
Delphi-Quellcode:
Zeit : integer;
Zeit2 : integer; Ergebniss: integer; Dann habe ich bei der Formcreate folgendes eingetragen:
Delphi-Quellcode:
Zeit := Gettickcount;
In meiner Abfrage steht folgendes:
Delphi-Quellcode:
begin
Zeit2 := Gettickcount; Ergebniss := Zeit - Zeit2; if Ergebniss > 3000 then shellexecute(handle,'open',pchar('mplayerc.exe'),pchar(video1),nil,sw_show); Zeit := Gettickcount; end; Es geht nicht. Irgendwo hab ich nen Logikfehler. Das Video startet nicht einfach nicht. |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
< -3000
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Sehr schön: Besprechung fällt aus! Tja, also wie wäre es, wenn du die Subtraktion mal anders herum ausführst? Zeit2 - Zeit (hihihi) Ausserdem kannst du kürzen ..
Delphi-Quellcode:
if GetTickCount-Zeit>3000 then ...
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
lol, es funktioniert ja tatsächlich.
Ich verstehe nur noch nicht so zu 100% warum das so ist. Zeit müsste doch nen höheren Wert haben als Zeit2 oder etwa nicht? Naja, falls es noch Probleme gibt, meld ich mich :> //Edit: Also, es beinflusst nicht die Arbeitsweise des Programms, allerdings bekomme ich noch Fehlermeldungen: Zitat:
Delphi-Quellcode:
Wie kann ich das ändern?
if GetTickCount-Zeit>1500 then
|
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Kommt die Meldung auch noch, wenn Du Zeit als Cardinal deklarierst?
Grüße Klaus |
Re: Aktion darf nur alle 3 Sekunden ausgeführt werden.
Also, verwende den Datentyp DWORD und nicht Integer! Übrigens, ist schon logisch so: Der Wert für ZEIT lliegt in der Vergangenheit und ist daher kleiner als die aktuelle Zeit, die du mit GetTickCount erhälst. Noch viel Spaß beim "Weiterbasteln" :hi:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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