奇怪的情形.....這行那錯了呢?? |
尚未結案
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
奇怪的情形.....這面行那錯了呢??
為什麼會 EAccess Violation ?? function diglist(acaption:string;astringlist:Tstringlist):string;
var form:tform;
ckecbox:Tchecklistbox;
edit:Tedit;
function ProcToMethod(Proc : Pointer; Obj : TObject) : TMethod;
begin
result.Code := Proc;
result.Data := Obj;
end;
procedure MyClick(Self : TObject;Sender : TObject);
begin
edit.text:='s';<----------------------這那錯了呢?
end;
begin
Form := TForm.Create(Application);
with Form do
try
Edit := TEdit.Create(Form); <-----------
with Edit do
begin
color:=clInfoBk;
Parent := Form;
Width := form.width-5;
end; ckecbox:=Tchecklistbox.create(form);
with ckecbox do
begin
Parent := Form;
onclickcheck:= TNotifyEvent(ProcToMethod(@myClick,ckecbox));
end; if ShowModal = mrCancel then result:= edit.text;
finally Form.Free;
end;
end;
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
引言: 奇怪的情形.....這面行那錯了呢?? 為什麼會 EAccess Violation ?? function diglist(acaption:string;astringlist:Tstringlist):string; var form:tform; ckecbox:Tchecklistbox; edit:Tedit; function ProcToMethod(Proc : Pointer; Obj : TObject) : TMethod; begin result.Code := Proc; result.Data := Obj; end; procedure MyClick(Self : TObject;Sender : TObject); begin edit.text:='s';<----------------------這那錯了呢? end; begin Form := TForm.Create(Application); with Form do try Edit := TEdit.Create(Form); <----------- with Edit do begin color:=clInfoBk; Parent := Form; Width := form.width-5; name:='edit';//給個名字吧 end; ckecbox:=Tchecklistbox.create(form); with ckecbox do begin Parent := Form; onclickcheck:= TNotifyEvent(ProcToMethod(@myClick,ckecbox)); end; if ShowModal = mrCancel then result:= edit.text; finally Form.Free; end; end;發表人 - hahalin 於 2003/09/23 03:28:52 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Edit is a local variable..... BTW I prefer using class procedure...
type TMyClass = class class procedure MyClick(Sender: TObject); end; procedure TMyClass.MyClick(Sender: TObject); begin if Sender is TEdit then TEdit(Sender).Text := 's' else if Sender is TComboBox then TComboBox(Sender).Text := 's'; end; {.... skip ....} Edit := TEdit.Create(Form); with Edit do begin {... skip ...} OnClick := TMyClass.MyClick; end; |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
蜻蜓草
一般會員 發表:22 回覆:30 積分:10 註冊:2002-03-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |