BCB to delphi 語法轉換問題 |
答題得分者是:careychen
|
showrain
一般會員 發表:2 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
我不知道什麼是TCHATFORUM
[code delphi] var p:TChatForum; begin p:=TChatForum.Create(); //new TChatForum(); 可能你不需要這行 p:=TChatForum(FindWindow("ChatForum",NULL)); end; [/code] 你要這個嗎?? |
showrain
一般會員 發表:2 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
不好意思,我重新說明一下我的問題
我的程式有兩個 Form 定義如下 Form1 為 Main 也就是 Auto Create forms Form2 為 Available forms (就是程式進後需自行 Create 的方式建立,並且在程式中是利用 showmodal 的方式顯示) 因為在 Form1 的程式成員中有定義一個 資料結構 MyRec (屬性為 MyRecord 請看程式碼中的定義), 而我要在 Form2 程式執行後 存取 Form1.MyRec.id 這一個資料成員 以往在 bcb 我只要利用以下方式直接存取 TForm1 的相關函式或資料成員 TForm1 *p=new TForm1 (FindWindow("Form1",NULL)); 但是在delphi 中卻會引發記憶體存取違規的錯誤 第一個 Form1 [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type MyRecord=record id:integer; name:String; end; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public MyRec:MyRecord; { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var p:TForm2; begin p:=TForm2.Create(owner); p.ShowModal; p.Destroy; end; end. [/code] 第二個 Form2 [code delphi] unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); var p:TForm1; begin p:=TForm1(FindWindow('Form1',nil)); p.MyRec.id:=99; {<-- 在這裡就會出現存取違規} p.Label1.Caption:='999999999999999999999'; end; end. [/code]
編輯記錄
showrain 重新編輯於 2008-08-29 02:42:27, 註解 無‧
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
[code delphi]
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); //var // p:TForm1; begin // 直接把 P 改成 Form1 //p:=TForm1(FindWindow('Form1',nil)); Form1.MyRec.id:=99; {<-- 在這裡就會出現存取違規} Form1.Label1.Caption:='999999999999999999999'; end; end. [/code]
------
價值的展現,來自於你用哪一個角度來看待它!! |
showrain
一般會員 發表:2 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
哦~~,你是動態的呀~~,那有兩種方式,參考一下
方法一: [code delphi] procedure TForm2.Button1Click(Sender: TObject); var p:TForm1; begin p:=TForm1.Create(Application); Form1.MyRec.id:=99; Form1.Label1.Caption:='999999999999999999999'; // 用完後 free FreeAndNil(p); end; [/code] 方法二: [code delphi] procedure TForm2.Button1Click(Sender: TObject); begin with TForm1.Create(Application) do try MyRec.id:=99; Label1.Caption:='999999999999999999999'; finally Free; // 用完後 free end; end; [/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-09-01 09:21:21, 註解 無‧
|
showrain
一般會員 發表:2 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
FINDWINDOW 是得到一個HWND
而不是一個POINTER PS.上面提到的方法一 到底P有什麼用?? DELPHI中還可能會造成WARNING , 他還以為是FORM2中產FORM1 [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type MyRecord=record id:integer; name:String; end; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public MyRec:MyRecord; { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var p:TForm2; begin p:=TForm2.Create(owner); p.ShowModal; showmessage(inttostr(MyRec.id)); p.Destroy; end; end. [/code] [code delphi] unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin Form1.MyRec.id:=99; {<-- 在這裡就會出現存取違規} Form1.Label1.Caption:='999999999999999999999'; end; end. [/code] |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
那就有點怪了,在我第一次回的時候,那個樣子
你用 Form1 Create 了 Form2 ,然後 Form2 去使用 form1 的資源,這樣是可行的 那我就不大懂你的問題是什麼了 底下附的是我依你上面的方式寫成的,他是可以 Run 的 48bc9575bd247_Projects.rar
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-09-02 09:23:51, 註解 無‧
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
不過大大的方式小弟試過只有在 auto create form 的模式下可行
在動態創建的方式下好像無法存取 Form1 的資料成員 這是DELPHI版本問題??? 我也不明白 不過大大的方式小弟試過只有在 auto create form2 的模式下可行 在動態創建form2的方式下好像無法存取 Form2 的資料成員 還可以說通 ===================引 用 careychen 文 章=================== 那就有點怪了,在我第一次回的時候,那個樣子 你用 Form1 Create 了 Form2 ,然後 Form2 去使用 form1 的資源,這樣是可行的 那我就不大懂你的問題是什麼了 底下附的是我依你上面的方式寫成的,他是可以 Run 的 48bc9575bd247_Projects.rar |
showrain
一般會員 發表:2 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
感謝各位大大 不辭辛勞為小弟解答!!
今天仔細檢查一下原來是小弟的程式碼寫錯了,不好意思!!造成各位大大的困擾!! careychen 大大所提出 程式碼 方法一 是可行的!! 對各位先進說聲抱歉與致上十二萬分的歉意! 但是,小弟想再請教一個問題假如: form1 auto create form2 和 form3 是動態建立 而 form3 是由 form2程式碼中動態建立 from2 是由 form1 程式碼中動態建立 那請問一下 form3 是否也能夠依照 careychen 大大的方法一存取 form2 資料呢?? 感謝各位先進的指導!!謝謝!!
編輯記錄
showrain 重新編輯於 2008-09-03 03:01:56, 註解 無‧
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
以下程式只有 Form1 是 Main Form ,其他是需要時才 Create
Form1 準備一個 Button , 一個 Label ,Form1 的程式如下 ( 只 Copy Implementation 以下的 ) [code delphi] implementation {$R *.dfm} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TForm2.Create(Application); Form2.ShowModal; FreeAndNil(Form2); end; [/code] Form2 準備 二個 Button 、一個 Label [code delphi] implementation {$R *.dfm} uses Unit1, Unit3; procedure TForm2.Button1Click(Sender: TObject); begin Form3 := TForm3.Create(Application); Form3.ShowModal; FreeAndNil(Form3); end; procedure TForm2.Button2Click(Sender: TObject); begin Form1.Label1.Caption := 'Call From Form2'; Form1.MyRec.Id := 123; end; [/code] Form3 準備一個 Button [code delphi] implementation {$R *.dfm} uses Unit2; procedure TForm3.Button1Click(Sender: TObject); begin Form2.Label1.Caption := 'Call From Form3'; end; [/code]
------
價值的展現,來自於你用哪一個角度來看待它!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |