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 Timer startet immer neu obwohl disabled?? (https://www.delphipraxis.net/84671-timer-startet-immer-neu-obwohl-disabled.html)

rhodan 19. Jan 2007 20:33


Timer startet immer neu obwohl disabled??
 
moin Leute :)

Ich hab nur kurz ne Frage warum sich dieser timer immer und immer wiederholt bzw. neu started??Irgendwo muss ein Fehler drin sein :S

Delphi-Quellcode:
procedure TForm1.Timer4Timer(Sender: TObject);
var
  c: Char;
  i: integer;
begin
if invchecked2.Visible=false then
timer5.Enabled:=true;
if invchecked2.visible=true then
begin
// sellshop

keybd_event(VK_F2, 0, 0, 0);
Keybd_Event(VK_F2,0,KEYEVENTF_KEYUP,0);
sleep (1000);
setcursorpos (746,193);
sleep (1000);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
sleep(5000);
setcursorpos (853,396);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
sleep (1000);

//EK

begin
  if length(Edit1.Text)> 0 then
  begin
    for i:= 0 to length(Edit1.Text) do
    begin
    c:= Edit1.text[i];
      Case c of
        '1'..'9' :
          begin
          c:= upcase(c);
          keybd_event(ord(c),0,0,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        'A'..'Z':
          begin
          keybd_event(vk_Shift,0,0,0);
          keybd_event(ord(c),0,0,0);
          keybd_event(vk_Shift,0,keyeventf_keyup,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        'a'..'z':
          begin
          c:= upcase(c);
          keybd_event(ord(c),0,0,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        else
        begin
        keybd_event(ord(c),0,0,0);
        keybd_event(ord(c),0,keyeventf_keyup,0);
        end;
      end;
    end;
  end;
end;
sleep(1000);
setcursorpos (471,412);
sleep(1000);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
sleep(500);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
sleep(1000);

// Caution Window

if checkbox1.checked=true then
begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
sleep(500);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
sleep(1000);
end;

//Anzahl

begin
  if length(Edit2.Text)> 0 then
  begin
    for i:= 0 to length(Edit2.Text) do
    begin
    c:= Edit2.text[i];
      Case c of
        '1'..'9' :
          begin
          c:= upcase(c);
          keybd_event(ord(c),0,0,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        'A'..'Z':
          begin
          keybd_event(vk_Shift,0,0,0);
          keybd_event(ord(c),0,0,0);
          keybd_event(vk_Shift,0,keyeventf_keyup,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        'a'..'z':
          begin
          c:= upcase(c);
          keybd_event(ord(c),0,0,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        else
        begin
        keybd_event(ord(c),0,0,0);
        keybd_event(ord(c),0,keyeventf_keyup,0);
        end;
      end;
    end;
  end;
end;
sleep(1000);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
sleep(500);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
sleep(1000);

timer5.Enabled:=true;
timer4.enabled:=false;
end;
end;
Kurze erklärung...ich habe 20 fenster jeweils mit nem kleinen bild drauf, die bilder (invchecked)sind alle unsichtbar...wenn ich im laufenden program drauflicke werden die pics sichtbar um zu markieren welches der 20 fenster ich selektiert habe...zusätzlich ist auf jedem der fenster ein timer..., wenn ich am ende auf OK drücke sollen nur die timer der fenster ausgeführt werden welche der user selektiert hat, sprich wo die bilder sichtbar sind...daher:

Delphi-Quellcode:
if invchecked2.Visible=false then
timer5.Enabled:=true;
if invchecked2.visible=true then
am anfang...wenn das bild NICHT sichtbar ist, soll gleich der nächste timer gestartet werden..

allerdings wird der timer immer wieder gestartet...ich hab nicht rausgefunden warum..vielleicht steht das
Delphi-Quellcode:
timer5.Enabled:=true;
timer4.enabled:=false;
am ende auch ZU weit am ende und der befehl den timer zu disablen und den nächsten zu starten kommt gar nicht mehr zum zug?

über hilfe wäre ich dankbar

nette grüße von rhodan

IngoD7 19. Jan 2007 20:41

Re: Timer startet immer neu obwohl disabled??
 
Setze einen Haltepunkt auf timer4enabled:=false und schaue, ob er jemals da ankommt.

Ich weiß jetzt nicht, ob das überhaupt möglich ist, aber vielleicht wird dein Timer4Timer-Ereignis schon immer wieder erneut aufgerufen, bevor es überhaupt fertig abgearbeitet ist ...?

Grundsätzlich: Hast du es schon mal mit Haltepunkten und vor allem Einzelschrittmodus probiert?

rhodan 19. Jan 2007 20:49

Re: Timer startet immer neu obwohl disabled??
 
wenn ich ehrlich bin habe ich noch nie mit haltepunkten gearbeitet bzw. sie benutzt...

was das ist kann ich könnte ich mir schon vorstellen aber wie wende ich sie an bzw. wie aktiviere ich einen haltepunkt für den timer?

thx

MrKnogge 19. Jan 2007 20:54

Re: Timer startet immer neu obwohl disabled??
 
einfach links neben die entsprechende zeile klicken. Dann erscheint dort ein roter Punkt, wenn du das programm jetzt aus der IDE startest, hält dein Programm an dem Punkt an. Wenn du mit dem Mauszeiger über die Variablen gehst, so erscheint der Wert der Variable als Hint.

Welche Frequenz hat denn dein Timer oben eingestellt ?

rhodan 19. Jan 2007 20:59

Re: Timer startet immer neu obwohl disabled??
 
hmm...also ich hab den haltepunkt gesetzt, prog gestartet, im haltepunkt erschien dann ein kleiner grüner haken :-/ der timer ist auf 500ms

das witzige ist....den ersten der 20 timer führt er nur einmal aus wenn er selektiert ist, aber die anderen 19 macht er jeweils unendlich...das einzige weas sich im code ändert sind die edit nummern, die invchecks und die timer die ich enable bzw. disable :S

MrKnogge 19. Jan 2007 21:04

Re: Timer startet immer neu obwohl disabled??
 
Zitat:

Zitat von rhodan
im haltepunkt erschien dann ein kleiner grüner haken

Dann enthält diese zeile keine vollständige Anweisung, setze den Haltepunkte eine Zeile weiter.

Zitat:

Zitat von rhodan
:-/ der timer ist auf 500ms

Aha, dann haben wir wohl den Fehler, deine obige Funktion wird alle 500 Millisekunden ausgeführt, aber innherhalb deiner prozedur hast du Pausen von insgesamt 10 Sekunden.

Setze den Timer mal auf 20 Sekunden oder so.

Gruß

rhodan 19. Jan 2007 21:10

Re: Timer startet immer neu obwohl disabled??
 
hmmm, das bringt auch nix....ist der timer interval nicht nur die pause die nach dem beenden des letzten timer befehls gewartet wird bis er wieder gestartet wird?

MrKnogge 19. Jan 2007 21:12

Re: Timer startet immer neu obwohl disabled??
 
Nein, interval heist, dass es alle 500 ms ausgeführt wird. Schau dir hierzu einfach mal die OH an.

Gruß

rhodan 19. Jan 2007 21:24

Re: Timer startet immer neu obwohl disabled??
 
hmm, ich grad gemerkt das ich 17 "begin" aber 19 "end;" im text hab...oder werden "else" auch mit end; abgeschlossen?
kann es sein das die end; falsch positioniert sind?

gruß rhodan

Matze 19. Jan 2007 21:28

Re: Timer startet immer neu obwohl disabled??
 
Die 2 zusätzlichen "end" stammen aus den beiden Case-Abfragen. Hättest du da 2 zu viel, würde es dir der Compiler schon melden. ;)

MrKnogge 19. Jan 2007 21:29

Re: Timer startet immer neu obwohl disabled??
 
Zitat:

Zitat von rhodan
werden "else" auch mit end; abgeschlossen?

Nein, aber Case z.B.

Aber wenn die Anzahl deiner end's falsch wäre, dann würde sich dein Quelltext nicht Compilieren lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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