請教走馬燈 |
答題得分者是:CHIWW
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
請教各位前輩﹒
procedure TForm1.Timer1Timer(Sender: TObject); begin if Label1.Left < Form1.Width-Label1.Width-40 then Label1.Left := Label1.Left 5 else Label1.Left := 40; end;</pre> 可以正常控制Label1在指定的範圍中跑﹐到限定的位置后再返回到位置40并循環﹐請問如何做到當此Label1跑到限定的位置后開始回跑﹐即[if Label1.Left =Form1.Width-Label1.Width-40 then Label1.Left=Label1.Left-5]﹐做成正反向的跑馬燈﹒ 關鍵的問題在于如何設置Label1.Left < Form1.Width-Label1.Width-40</font>和[blue]if Label1.Left =Form1.Width-Label1.Width-40[/red]不起沖突﹒ 謝謝﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
CHIWW
初階會員 發表:8 回覆:16 積分:29 註冊:2002-09-15 發送簡訊給我 |
var V:Integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
V:=5;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (Label1.Left > Form1.Width-Label1.Width-40) or (label1.Left<40) then
V:=-V;
label1.Left:=Label1.Left V;
end;
//將程式上述方法即可
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: var V:Integer; procedure TForm1.FormCreate(Sender: TObject); begin V:=5; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if (Label1.Left > Form1.Width-Label1.Width-40) or (label1.Left<40) then V:=-V; label1.Left:=Label1.Left V; end; //將程式上述方法即可謝謝指點﹒ 但似乎不行喔﹐首先將V宣告在OnFromCreate中﹐Timer1Timer就找不到V這個變數了﹐小弟將V的宣告改寫在Timer1Timer中﹐也不能實現需要的效果﹐我想您大概誤解小弟的意思了﹐小弟是需要當Label1.Left的位置處于小于Form1.Width-Label1.Width-40這個限定範圍時﹐由左至右跑馬燈﹐當Label1.Left的位置處于等于Form1.Width-Label1.Width-40這個範圍時﹐就由右至左跑馬燈﹐直至位置Label.Left為40﹒如此循環﹒ 請問該如何處理﹖ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/14 10:10:51
------
忻晟 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
CHIWW 的方法是對的, v 要宣告在 Form1 裡 或 獨立宣告不能宣告成 Method 的 Local Variable
implementation {$R *.dfm} var V : Integer=5; procedure TForm1.Timer1Timer(Sender: TObject); begin if (Label1.Left > Form1.Width-Label1.Width-40) or (label1.Left<40) then V := -V; label1.Left:=Label1.Left V; end; |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
Timer2 先 Disable
procedure TForm1.Timer1Timer(Sender: TObject); begin if Label1.Left < (Form1.Width - Label1.Width - 40) then begin Label1.Left := Label1.Left 1; Label1.Refresh; end else begin Timer1.Enabled := False; Timer2.Enabled := True; end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin if Label1.Left > 40 then begin Label1.Left := Label1.Left - 1; Label1.Refresh; end else begin Timer2.Enabled := False; Timer1.Enabled := True; end; end;--- --<-<-<@ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: CHIWW 的方法是對的, v 要宣告在 Form1 裡 或 獨立宣告不能宣告成 Method 的 Local Variable感謝Justmade版主的指正﹒ 小弟沒有注意到這一點﹐謝謝﹗ 也感謝hagar版主提供的使用兩個TTimer的方法﹗ ===================== 努力,相信會獲得美麗! 忻晟implementation {$R *.dfm} var V : Integer=5; procedure TForm1.Timer1Timer(Sender: TObject); begin if (Label1.Left > Form1.Width-Label1.Width-40) or (label1.Left<40) then V := -V; label1.Left:=Label1.Left V; end;
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |