显示窗体出错 |
尚未結案
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
大大们,您们好!有一个问题麻烦大家了。
我有两个窗体,Form1和Form2,其中Form1是主窗体,我想先显示窗体2,让Form2显示在Form1中间。
我是这样做的,先在Project->Options中将Form2从Auto-create forms移到Available forms中去,然后在File->Use unit中将Unit2包含到Unit1中去,下面是在Form1中的代码:
...... uses Unit2; ...... procedure TForm1.FormCreate(Sender: TObject); var MyRect: TRect; begin Form2 := TForm1.Create(self); MyRect := Application.Form1.BoundsRect; Form2.Left := ((MyRect.Right - MyRect.Left) - Form2.Width)/2 MyRect.Left; Form2.Top := ((MyRect.Bottom - MyRect.Top) - Form2.Height)/2 MyRect.Top; Form2.ShowModal; Form2.Free; end;结果一编译,许多地方都有错: [Error] Unit1.pas(55): Undeclared identifier: 'TForm1' [Error] Unit1.pas(55): Missing operator or semicolon [Error] Unit1.pas(57): Incompatible type: 'Integer' and 'Extended' [Error] Unit1.pas(58): Incompatible type: 'Integer' and 'Extneded' 我找了很久,对错在这里感到很迷惑?不是说了是用Create来创建Form2的吗,怎么回说不知道TForm1的identifier呢?而且第3行的错误我也很迷惑。 希望大大们能指点我,谢谢了 < class="code"> =============== 人生在勤,不索何获? ===============
------
人生在勤,不索何获? |
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
您好:
procedure TForm1.FormCreate(Sender: TObject); begin Form2 := TForm2.Create(Application); Form2.Left := form1.Left (form1.Width-form2.Width) div 2; Form2.Top := form1.Top (form1.Height-form2.Height)div 2; Form2.ShowModal; Form2.Free; end;這樣試試 form1,form2都是需要藉由Application來Create ~~應無所住而生其心~~ 發表人 - terrychen 於 2004/03/13 22:36:06 |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言:bigdogchina 你好 Form2 := TForm2.Create(self);只一個字輸入錯而已,但這樣Form2的Owner是Form1,所以你必須自已找適當的時機,將它釋放,不然就把Self改為Application交由Application來釋放(如Terrychen大大所述)。 後兩個錯誤,只是資料型態的不一致而己, Form2.Left 是整數型態,而((MyRect.Right - MyRect.Left) - Form2.Width)/2 結果是Extended型態,無法自動轉型,你必須自行用Trunc或Round轉成整數型態。 祝好運................ 發表人 - chance36 於 2004/03/13 23:10:51 發表人 - chance36 於 2004/03/13 23:17:19...... uses Unit2; ...... procedure TForm1.FormCreate(Sender: TObject); var MyRect: TRect; begin Form2 := TForm1.Create(self); MyRect := Application.Form1.BoundsRect; Form2.Left := ((MyRect.Right - MyRect.Left) - Form2.Width)/2 MyRect.Left; Form2.Top := ((MyRect.Bottom - MyRect.Top) - Form2.Height)/2 MyRect.Top; Form2.ShowModal; Form2.Free; end; |
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
真诚的感谢terrychen,Chance36,jest0024大大的热心回答,先在这里跪谢了!
后两个错误已经明白了< >
不过自己实在是愚笨,在理解了大大们指出的第一个错误后,仍然还是出错,汗颜啊!< >
方法如前,按照terrychen大大的提示,Form1中的代码改为:
...... uses Unit2; ...... procedure TForm1.FormCreate(Sender: TObject); begin Form2 := TForm2(Application); Form2.ShowModal; Form2.Free; end;编译后出现下面的错误提示: Debugger Exception Notification Project Project1.exe raised exception class EAccessViolation with message 'Acess violation at address 6A006A00. Read of address 6A006A00'.Process stopped. Use Step or Run to contnue. 然后停在Application.Run上,实在是不好意思,我仍然要厚着脸皮问:这个错误又是为什么呢?比刚才的错误还令人眩晕 < class="code"> =============== 人生在勤,不索何获? ===============
------
人生在勤,不索何获? |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |