線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2378
推到 Plurk!
推到 Facebook!

請教走馬燈

答題得分者是:CHIWW
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-14 01:00:16 IP:63.84.xxx.xxx 未訂閱
請教各位前輩﹒    
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-14 01:33:54 IP:61.227.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-14 10:04:03 IP:63.84.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-14 10:32:34 IP:218.16.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-14 10:35:29 IP:202.39.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-14 11:18:19 IP:63.84.xxx.xxx 未訂閱
引言: 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;
感謝Justmade版主的指正﹒ 小弟沒有注意到這一點﹐謝謝﹗ 也感謝hagar版主提供的使用兩個TTimer的方法﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-05-05 3:12:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!