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

如何反覆更改物件屬性

尚未結案
marklue
一般會員


發表:33
回覆:55
積分:17
註冊:2005-02-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-21 18:55:00 IP:203.73.xxx.xxx 未訂閱
各位前輩大家好: 小弟初學DELPHI,遇到一個需求 就是要同時更改某些物件的屬性(False.True) 開始我嘗試用procedure(Var x1,x2,x3...:boolean) begin; x1:=not x1; ..... end; 可是發覺屬性無法放進去傳遞 後來改procedure(x1,x2,x3...:Boolean) 可以傳出去,可是傳不回來 我之前是學DOS的程式 請問各位前輩 DELPHI可以反覆執行一段程式 但是不用限制一定要傳參數就可以改變資料的方式 好像BASIC的GOTO或是COBOL的PERFORM那種 感恩!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-21 19:15:08 IP:203.95.xxx.xxx 未訂閱
Hi, 你原來寫的程式是 work 的啊, 怎麼說不行, 如,    
procedure Trans(var b1, b2, b3: boolean);
begin
  b1 := not b1;
  b2 := not b2;
  b3 := not b3;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  a1, a2, a3: Boolean;
begin
  a1 := true;
  a2 := true;
  a3 := true;      ShowMessage('a1=' BoolToStr(a1,true) ',a2=' BoolToStr(a2, true) ',a3=' BoolToStr(a3, true));      Trans(a1, a2, a3);
  ShowMessage('a1=' BoolToStr(a1,true) ',a2=' BoolToStr(a2, true) ',a3=' BoolToStr(a3, true));    end;
應該是沒有問題的! 至於你後面提的功能可以再明確一點嗎? 看不是很懂.
marklue
一般會員


發表:33
回覆:55
積分:17
註冊:2005-02-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-21 19:59:27 IP:203.73.xxx.xxx 未訂閱
timhuang前輩您好: 對不起!我沒說清楚 後面的問題是我想解決前面問題的方法。 我有幾個按鈕,剛好相反,比如說A.C.D按鈕失效的時候B.E.F就生效(簡稱狀況一) A.C.D按鈕生效的時候B.E.F就失效(狀況二) 因為有另外幾個按鈕會控制狀況一或狀況二或是與目前狀況相反 所以我想把按鈕屬性經過一段程式做相反的動作 (不然程式同樣的重複多次.佔空間又難維護) 如Btn1.Enable:= not Btn1.Enable; 可是我在Procedure宣告好像一定要傳參數 無法在Begin與End之間直接改變按鈕屬性! 感恩您!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-21 22:51:56 IP:220.132.xxx.xxx 未訂閱
ok, 在 procedure 中, 是可以不傳參數的沒問題, 寫法如下    
// 在你的 TForm1 的 private 裡(或 public裡, 看使用狀況決定), 定義 procedure
procedure SetButton;    // 後面將內容實作為:
procedure TForm1.SetButton;
begin
  Button1.Enabled := not Button1.Enabled;
  Button2.Enabled := not Button2.Enabled;
  Button3.Enabled := not Button3.Enabled;
  Button4.Enabled := not Button4.Enabled;
end;
這樣即可!
marklue
一般會員


發表:33
回覆:55
積分:17
註冊:2005-02-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-22 07:43:37 IP:203.73.xxx.xxx 未訂閱
timhuang前輩您好: 謝謝您,可以了,可是不知道是不是我的delphi7的關係否,我放在type的private 裡或public裡都會錯誤,後來我放到後面一般事件的地方就可以了。 感恩您!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-22 09:17:57 IP:203.95.xxx.xxx 未訂閱
Hi, 應該是不會有這種現象, 可能你誤會我的意思, 我是指宣告在前, 實作在後, 列出整個程式如下, 希望能解決你的困惑.    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure SetButton;
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}
procedure TForm1.SetButton;
begin
  Button1.Enabled := not Button1.Enabled;
  Button2.Enabled := not Button2.Enabled;
  Button3.Enabled := not Button3.Enabled;
  Button4.Enabled := not Button4.Enabled;
end;    procedure TForm1.Button5Click(Sender: TObject);
begin
  SetButton;
end;    end.
marklue
一般會員


發表:33
回覆:55
積分:17
註冊:2005-02-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-22 12:18:26 IP:203.73.xxx.xxx 未訂閱
timhuang前輩您好: 抱歉!因為實在沒基礎,所以弄錯您的意思。 依照前輩方式可以正常運作,謝謝! 而我把它直接放在一般事件的地方時 發覺電腦在TYPE下有自動放一行 procedure SetButton;的宣告 請問前輩 放在TYPE下跟private、public差異在哪 是不是private只可以這個FROM用 而public可以給下層的FROM用 至於TYPE就無法揣測 麻煩前輩不吝賜教 感恩!
系統時間:2024-06-02 1:04:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!