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

動態生成的ComboBox,如何當我Click 它時,call另一個函數而且帶一個String

答題得分者是:careychen
gptesu
一般會員


發表:14
回覆:14
積分:5
註冊:2008-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-02 12:38:29 IP:202.175.xxx.xxx 訂閱
我動態生成了一個ComboBox, 當我Click 它時,我希望它call 另一個函數而且帶一個String的,我寫了下面的程式,但有其中有一點問題不懂,請各位幫忙幫忙解決!!謝謝!!

Proceduce MyClick(Sender: TObject; msg : string);

Proceduce TForm1.MyClick(Sender: TObject; msg : string)
begin
showmessage(msg );
end;
...
//動態生成了一個MyComboBox
MyComboBox.OnClick := MyClick(???????????) // <---這裏要填什麼?
...
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-02 12:43:03 IP:211.72.xxx.xxx 訂閱

===================引 用 gptesu 文 章===================

Proceduce TForm1.MyClick(Sender: TObject; msg : string)
begin
showmessage(msg );
end;
...
//動態生成了一個MyComboBox
MyComboBox.OnClick := MyClick(NIL 或 MyComboBox, 'Message String') // <---這裏要填什麼?
...
gptesu
一般會員


發表:14
回覆:14
積分:5
註冊:2008-09-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-03 13:13:12 IP:202.175.xxx.xxx 訂閱
我試過NIL或MyComboBox, 也不行呢...
[DCC Error] CreatePRForm.pas(227): E2010 Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-03 15:19:36 IP:211.72.xxx.xxx 訂閱
OnClick() 屬 TNotifyEvent(請參見 Delphi Help), 只能有一個參數 TObject,
故 Message 可能要另外處理.
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-12-03 15:20:30 IP:122.118.xxx.xxx 訂閱
參考一下,雖不如您的要求,但目的可以達到。
[code delphi]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure MyClick(sender:Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
MyComboBox:TComboBox;

implementation
{$R *.dfm}
procedure TForm1.MyClick(sender:Tobject);
begin
if sender is TComBoBox then begin
showmessage('字串參數: ' TComBoBox(Sender).hint);
showmessage('數字參數: ' inttostr(TComBoBox(Sender).tag));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

MyComboBox:= TComboBox.create(self);
with MyComboBox do begin
Parent := form1;
Left := 0;
Top := 0;
Hint := 'msg'; // 字串參數
Tag := 9999; // 數字參數
Items.Text := '1';
onclick:= MyClick;
end;
end;

end.

[/code]
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-12-03 15:22:25, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-12-03 17:54:29 IP:211.72.xxx.xxx 訂閱
小弟實測了一下,
自訂 procedure MyClick(Sender: TObject); 則 Assign 給 Create 產生的 ComboBox 沒問題.
至於 MyClick() 要用的 Message, 可用 public String Msg
或填於 ComboBox 之 Hint (ShowHint := False 便不會顯示),
則便可用 ShowMessage(Msg ); 或 ShowMessage(ComboBox.Hint);
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-12-03 18:00:07 IP:60.248.xxx.xxx 訂閱
Hi, 我寫另一種方式給你參考,可以修改 TComboData 裡的 Record 結構來放入更多你需要的資料

[code delphi]
unit Unit1;
interface
uses
Windows, SysUtils, Dialogs, Forms, Classes, Controls, StdCtrls;
type
PComboData = ^TComboData;
TComboData = record
myString: String;
myInteger: Integer;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure MyClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyClick(Sender: TObject);
begin
with TComboBox(Sender) do
ShowMessage(PComboData(Items.Objects[ItemIndex])^.myString);
end;
procedure TForm1.FormCreate(Sender: TObject);
var ComboData: PComboData;
I: Integer;
begin
with TCombobox.Create(Self) do
begin
Top := 100;
Left := 100;
Parent := Self;
OnClick := MyClick;
for I := 0 to 3 do
begin
New(ComboData);
ComboData^.myString := '我是第 ' IntToStr(I) ' 個 Item';
ComboData^.myInteger := I;
Items.AddObject('第 ' IntToStr(I) ' 個項目', TObject(ComboData));
end;
end;
end;
end.
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
gptesu
一般會員


發表:14
回覆:14
積分:5
註冊:2008-09-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-12-04 13:04:21 IP:202.175.xxx.xxx 訂閱
以上兩個方法都可以做到我需要的效果!問題終於解決了!
謝謝大家熱心幫忙!^_^
系統時間:2024-05-16 8:23:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!