線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1099
推到 Plurk!
推到 Facebook!

显示窗体出错

尚未結案
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-13 21:12:58 IP:211.162.xxx.xxx 未訂閱
大大们,您们好!有一个问题麻烦大家了。 我有两个窗体,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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-13 22:32:41 IP:211.76.xxx.xxx 未訂閱
您好:  
   
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-13 23:08:10 IP:203.204.xxx.xxx 未訂閱
引言:

......
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;    
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
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-14 00:36:50 IP:210.66.xxx.xxx 未訂閱
1.Form1的Show事件中加入 Form2.Show; 2.Form2屬性Position設為poMainFormCenter
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-14 12:27:17 IP:211.162.xxx.xxx 未訂閱
真诚的感谢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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-14 12:53:23 IP:202.39.xxx.xxx 未訂閱
前面的大大不都寫出來了嗎?
......
uses Unit2;
......
procedure TForm1.FormCreate(Sender: TObject);
begin
        Form2 := TForm2.Create(Application);
        Form2.ShowModal;
        Form2.Free;
end;
--- 屬於那自己生命的歌 不管是什麼顏色
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-14 14:59:33 IP:211.162.xxx.xxx 未訂閱
看完hagar大大的提示,我的心情竟是久久不能平复,正如老子所云:大音希声,大象希形。我现在终于明白我缺乏的是什么了。< > 面对各位大大的不嫌其烦的回答,我震惊得几乎不能动弹了。现在的我羞愧万分< >没有看清别人的回复,没有用心去领会,这是我的错!对不起了,请各位大大原谅我拿无知当个性。现在说什么都晚了,我唯一能做的,就是避免以后再犯这样的错。

===============
人生在勤,不索何获? 
===============
------
人生在勤,不索何获?
系統時間:2024-06-24 4:03:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!