全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1049
推到 Plurk!
推到 Facebook!

procedure 問題

尚未結案
vernon
一般會員


發表:27
回覆:26
積分:10
註冊:2003-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-04 08:57:00 IP:202.175.xxx.xxx 未訂閱
如有一功能是把大於 10 的數設置為 10 的, 如下 : procedure TForm(num:integer); begin if (num > 10) then Edit1.Text:='10'; end; 現有 10 個 Edit1 .. Edit10, 但我不可能寫 10 個 procedure 出來的 在 procedure 中的 Edit1.text 的位置能不能用什麼來作動態改變 ?? 即 XXX.text 而 XXX 可隨時代入 Edit1 .. Edit10 , Delphi 可以這樣做嗎 ?
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-04 09:12:00 IP:61.30.xxx.xxx 未訂閱
你好: 看你的問題好像是要依條件動態選擇 Edit 是嗎< > 你參考看看< > 1. 設置一個物件陣列,使用陣列存取。
        var
                EditAry : array [1..10] of TEdit;            procedure TForm1.FormCreate(Sender: TObject);
        begin
                EditAry [1] := Edit1;
                EditAry [2] := Edit1;
                EditAry [3] := Edit1;
                EditAry [4] := Edit1;
                EditAry [5] := Edit1;
                EditAry [6] := Edit1;
                EditAry [7] := Edit1;
                EditAry [8] := Edit1;
                EditAry [9] := Edit1;
                EditAry [10] := Edit1;
        end;
2. 透過物件名稱取得物件。
        procedure TForm1.test;
        var
                edit : TEdit;
        begin
                edit := FindComponent(format ('Edit%d', [i]));
                if edit <> nil then begin
                        edit.text := 10;
                end;
        end;
以上方式也可搭配使用,端看你的環境與需要。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-04 09:56:47 IP:61.10.xxx.xxx 未訂閱
你沒有說很清楚你是甚樣呼叫這功能的,但若呼叫時你若已知道是要改那個 edit, 最簡單的方法莫過於連那個 edit 也一起傳過 功能那裡 如 :
procedure TForm.DoMax(num:integer;MyEdit : TEdit);
begin
  if (num > 10) then MyEdit.Text:='10';
end;    呼叫時用 :
DoMax(11,Edit1);
DoMax(6,Edit2);
...
vernon
一般會員


發表:27
回覆:26
積分:10
註冊:2003-05-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-04 10:48:51 IP:202.175.xxx.xxx 未訂閱
我想每一個 Edit 的 Events 都用同一個 procedure 怎辦 ?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-04 11:02:42 IP:61.10.xxx.xxx 未訂閱
選同一個 Event 就好 Sender 參數就是這樣用的 TEdit(Sender).Text := '10'; 就可以改變呼叫這事件的 Edit
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-04 11:18:05 IP:61.30.xxx.xxx 未訂閱
你好: 你的說明讓我很難理解,如果按照你最後說的要求,提供下列的程式碼供你試試 < class="code"> unit MainSrc; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActnList, Menus, OleCtrls, SHDocVw, ComCtrls, ToolWin, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls, shellAPI; type TForm1 = class(Forms.TForm) procedure FormCreate(Sender: TObject); private procedure edit_OnChange(Sender: TObject); public end; implementation procedure TForm1.FormCreate(Sender: TObject); var i : integer; edit : TEdit; begin // 動態建立的 TEdit 物件 for i := 1 to 10 do begin edit := TEdit.Create(self); edit.parent := self; edit.top := i * 30; edit.left := 10; edit.OnChange := edit_OnChange; end; end; procedure TForm1.edit_OnChange(Sender: TObject); begin if not (Sender is TEdit) then system.exit; // 判斷 Sender 是不是 TEdit 物件。 (Sender as TEdit).Text := '10'; // Sender 就是呼叫 OnChange 事件的 TEdit 物件本身。 end; end;
vernon
一般會員


發表:27
回覆:26
積分:10
註冊:2003-05-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-04 14:46:20 IP:202.175.xxx.xxx 未訂閱
很高興得到各位前輩的幫忙, 在下的問題有你們所提供的資料己經解決了 非常感謝 !! 
系統時間:2024-05-20 15:23:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!