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

關於Timer計時器的問題

尚未結案
jimm
一般會員


發表:10
回覆:9
積分:3
註冊:2004-09-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-13 17:03:14 IP:219.84.xxx.xxx 未訂閱
我想請問一下,我想要寫一個麻仔台的小遊戲 然後再點選開始的Button後,"口"字型的Label的Color 會照順序的一個一個跑...由慢到快..再由快到到慢 最後Label的Color停在計時器最後選到的Label上 請問這部份的Timer該如何下手 煩請各位高手指點一下
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-13 17:07:12 IP:61.218.xxx.xxx 未訂閱
如果是只為了要造"跑"的感覺,其實用Sleep即可 procedure Sleep(milliseconds: Cardinal); Delay program execution for a specified number of microseconds.
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-13 17:29:45 IP:221.169.xxx.xxx 未訂閱
jimm:請參考
http://delphi.ktop.com.tw/topic.php?topic_id=35393
【Delphi】【問題】請問Panel.Caption 可否讓文字像走馬燈順暢滾動
答題得分者為:ha0009
但我認為sos_admin版大最簡單:引用sos_admin版大的話:
在panel上放個label就可以實現上下左右,還有其他方式的現實,不論是什麼字體系統支援就可以。
procedure TForm1.Timer1Timer(Sender: TObject);
BEGIN
  Timer1.Enabled=false;
  if Label1.Left5
  else
    Label1.Left:=0;
//  if (Label2.Left Label2.Width > 0)  // 向左
//    Label2.Left:=Label2.Left-5
//  else
//    Label2.Left=Panel1.Width;
  Timer1.Enabled=true;
END;
由慢到快..再由快到到慢你可以改變Timer1.Interval數值,
或改變範例藍字5。
請參考!
Andy Chang
------
Andy Chang
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-13 17:40:26 IP:61.218.xxx.xxx 未訂閱
時間的快慢,我大概想到用陣列預先設定去控制,如下:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    FStop:Boolean;
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
const
  DelayArray:array[0..9] of integer =
    (100,90,80,70,60,60,70,80,90,200);
var
  i,j,Index:Integer;
  aLab:TLabel;
begin
  Index:=0;
  for j:=0 to High(DelayArray) do
  begin
    for i:=1 to 10 do
    begin
      aLab:=(Self.FindComponent('Label' IntToStr(i)) as TLabel);
      aLab.Font.Color:=clRed;
      aLab:=(Self.FindComponent('Label' IntToStr(i-1)) as TLabel);
      if not(Assigned(aLab)) then
        aLab:=Label10;
      aLab.Font.Color:=clWindowText;
      Sleep(DelayArray[j]);
      Application.ProcessMessages;
    end;
  end;
end;    end.
jimm
一般會員


發表:10
回覆:9
積分:3
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-15 03:25:49 IP:61.62.xxx.xxx 未訂閱
我想要的感覺大約就是像是圖檔那樣子, 改變的是Label的背景色 AndyChang1690的意思...就我這個新手而言 看起來好像是在一堆Label中間 再創造一個有底色的Label....然後移動它? 如果真是這樣,那有背景色的Label會不會擋到圖片呢?_? 麻煩各位高手教導一下 謝謝
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-15 09:10:58 IP:221.169.xxx.xxx 未訂閱
jimm:對不起誤解你的題意,下列方式僅代表我的思考作法!
不見得最佳!
對不起!習慣C  ,一下給C  希望你看的懂
跑到那一個圖形我想你要自行處理假設你現有24個圖檔。建議
每個圖檔下皆有TPanel,Panel依序排列Panel1、Panel2、Panel3‧‧‧
圖型要做以下設定:
Image1->Align=clClient;
Image1->Transparent=true;
Image1->Center=true;
程式要
#include 
int i=0; // 記錄圖檔位置
int PanelCount=24; // 圖檔共有24個
int midd_i;        // 中間數
int total_i;       // 要跑圖檔次數
int loop_time=50;  // 時間暫停基本單位 50/1000秒
由慢到快..再由快到到慢,我的方式是採用中間數,
假設我程式算出這回要跑total_i=68個圖檔(當然這你要訂出上下限)中間數是
midd_i=total_i/2;
利用絕對值(abs)的函數簡單處理如下例:
for (int j=0; j < total_i;j  ) {
    Sleep(loop_time*abs(j-midd_i));
// 這方式可以由慢到快..再由快到到慢的處理!
    // 還原正常底色
    ((TPanel *)FindComponent("Panel" IntToStr(i 1)))->Color=clBtnFace;
    i  ;
    if (i>PanelCount) 
      i=0;
    // 給一新底色
    ((TPanel *)FindComponent("Panel" IntToStr(i 1)))->Color=clRed;  
    Application->ProcessMessages(); // 記得要加此行
  }    請參考!
Andy Chang 發表人 - andychang1690 於 2004/10/15 09:13:43
------
Andy Chang
系統時間:2024-06-30 13:56:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!