2011-01-26 65 views
1
procedure TForm1.Timer1Timer(Sender: TObject); 
var 
    i : integer; 
begin 
    if i > StrToInt(Edit1.Text) then 
    Timer1.Enabled := False 
    else 
    i :=+ 1; 
    SendClick(645,302); 
    Sleep(2200); 
    SendClick(694,619); 
    Sleep(2200); 
    SendClick(967,638); 
    Sleep(2200); 
    SendKeys('{BKSP}{BKSP}{BKSP}{BKSP}1',False); 
    SendClick(917,688); 
    Sleep(2200); 
    SendClick(917,688); 
    Sleep(2200); 
    SendClick(917,688); 
    amount := StrToInt(Label3.Caption) + 1; 
    Label3.Caption := IntToStr(amount); 
end; 

由於某種原因它只重複一次並停止......任何人都可以發現問題嗎?即時通訊相當累了,香港專業教育學院走過去,在它幾次,我似乎無法看到一個...德爾福計時器問題

+0

是的,我知道我可以使用一個for循環...它工作正常的for循環...但它凍結的對話框中,直到其完成......我爲什麼desided使用定時器... – Bryan 2011-01-26 20:19:57

+0

這是_is_做一個循環的一些迂迴的方法... – badp 2011-01-26 20:21:07

+1

你真正的問題應該是問如何正確地做到這一點,沒有SendKeys,SendClick或任何廢話。 – 2011-01-26 20:38:24

回答

11

我是一個未初始化的局部變量(它包含垃圾),所以如果i> StrToInt(Edit1.Text)是隨機比較的結果。

您可能需要一個成員變量添加到您的窗體類,在適當的時間進行初始化並檢查它在onTimer事件價值,是這樣的:

type 
    TForm1 = class(TForm) 
    .. 
    private 
    FTimerCount: Integer; 
    FMaxTimerCount: Integer; 
    .. 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
    FTimerCount := 0; 
    FMaxTimerCount := 20; //the timer will fire 20 times. 
    Timer1.Enabled := True; 
end; 

procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
    Inc(FTimerCount); 
    Timer1.Enabled := FTimerCount < FMaxTimerCount; 
    DoOtherStuff(); 
end; 
10

i :=+ 1; 

價值+1(也稱爲1)分配給變量名稱爲i。 (也就是說,如果i等於55,和你i :=+ 1,然後i將等於1。)

也許你正在尋找

i := i + 1; 

inc(i); 

5

你沒有初始化i,它是一個局部變量。因此,定時器可以被啓用或不被它的內存位置保存的任意值取決於。

0

這是一個很好的情況下,人們忽略警告消息。 我希望編譯器應該吐出提示或錯誤和無警告。警告只是一個短的來自編譯器的情況,它應該在更高版本中修復。

乾杯