您沒有發佈足夠的代碼以確保它是正確的,但我認爲您的窗體在第一次單擊按鈕之前不可見或甚至沒有窗口句柄,因此窗體的移動不可見。如果你插入
Form.Show;
Form.Update;
之前循環的東西也應該第一次工作了。請注意0的呼叫,需要真正顯示上一行顯示的表單。
類似地,在循環內改變Top
屬性之後,您應該插入一個對Update()
的調用 - 它也可以調用Application.ProcessMessages()
,但不會是這樣的大錘。每當有更好的方法時,儘量不要Application.ProcessMessages()
,搜索堆棧溢出進行討論。建議
兩個多件關於你的循環:
編輯:
下面是創建形式的不斷運動,即使不同的延遲一些示例代碼:
uses
MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
var
Frm: TForm;
TicksStart, TicksNow: Longword;
Progress: Single;
begin
Frm := TForm.CreateNew(Self);
try
// slide a form of 600 by 500 pixel into view over a period of 100 millis
Frm.SetBounds((Screen.Width - 600) div 2, -500, 600, 500);
Frm.Show;
TicksStart := timeGetTime;
while True do begin
Sleep(15);
TicksNow := timeGetTime;
if TicksNow - TicksStart >= 1000 then
break;
Progress := (TicksNow - TicksStart)/1000;
Frm.Top := - Round((1.0 - Progress) * 500);
end;
Frm.Top := 0;
Sleep(500);
finally
Frm.Free;
end;
end;
當你進行分配,以TimeSleep? – frogb 2010-12-12 11:45:16