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

MDI中子窗体和该窗体对应的QuickRep1.Preview同时出现的问题

答題得分者是:channel
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-04 07:09:12 IP:221.232.xxx.xxx 訂閱
我的主程序是MDI模式 打印一张表
var
form:Tform1;//form1为quickrpt所在子窗体
begin
form:=Tform1.Create(application);//若去掉此句 则提示 path to source file: QuickRpt.pas的问题 所以这里没有去掉 但不去掉又出现后面的问题
form.QuickRep1.Preview;
end;
如此 不仅QuickRep1.Preview会出现 子窗体form1也会出现在主程序界面中 这里如何只出现QuickRep1.Preview 而不出现 子窗体form1 呢?其实 就只是想预览 但不用出现这个子窗体form1啊

我需要在MDI下实现QuickRep1.Preview
现在的问题是 QuickRep1.Preview和 form1同时出现了

谢谢大家

channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-04 23:14:25 IP:59.114.xxx.xxx 訂閱
兩個方法可以解決:
1:將Form1的屬性WindowState設為wsMinimized

2:當您要新增一張報表程式時,不要先新增Form1然後在Form1放上QuickRep1
而是直接在Delphi Menu File -> new ->在new的頁次,選擇Report,這樣的話就是直接產生QuickRep(他是繼承TQuickRep)
這樣就不會有Form又有QuickRep的問題了…

~小弟淺見,參考看看~
===================引 用 文 章===================
我的主程序是MDI模式 打印一张表
var
form:Tform1;//form1为quickrpt所在子窗体
begin
form:=Tform1.Create(application);//若去掉此句 则提示 path to source file: QuickRpt.pas的问题 所以这里没有去掉 但不去掉又出现后面的问题
form.QuickRep1.Preview;
end;
如此 不仅QuickRep1.Preview会出现 子窗体form1也会出现在主程序界面中 这里如何只出现QuickRep1.Preview 而不出现 子窗体form1 呢?其实 就只是想预览 但不用出现这个子窗体form1啊?

我需要在MDI下实现QuickRep1.Preview
现在的问题是 QuickRep1.Preview和 form1同时出现了

谢谢大家 ?

------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-05 02:44:28 IP:221.232.xxx.xxx 訂閱
感谢channel的回复

方法一 MDI中子窗体和该窗体对应的QuickRep1.Preview仍然同时出现 只是Form1在MDI 的主窗体中最小化了而已

方法二 实施后 就不存在同时出现的问题了 但是 请看我的代码:
主窗体对应的 点击Click 代码
var
form:Tform1;//form1为新的quickrpt
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;//若不加上次此句 则再次点击实现预览时 提示 这个组件已经存在 所以我这里FREE了一下
end;
但是 又有了新的问题 主窗体对应的 点击 键依然可点 若在不关闭 新的quickrpt对应的print preview的情况下再次点击执行
Click 代码
则出现 没有加 form.Free 时的错误提示:这个组件已经存在

请问 在不关闭 print preview的情况下再次点击执行Click 代码 错误提示:这个组件已经存在 怎么解决?
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-05 03:00:24 IP:59.114.xxx.xxx 訂閱
if form = nil then //或if not Assigned(form) then
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;
end;

~小弟淺見,參考看看~
===================引 用 文 章===================
感谢channel的回复

方法一??MDI中子窗体和该窗体对应的QuickRep1.Preview仍然同时出现 ?只是Form1在MDI 的主窗体中最小化了而已

方法二 实施后 就不存在同时出现的问题了 但是 请看我的代码:
主窗体对应的 点击Click 代码
var
form:Tform1;//form1为quickrpt所在子窗体
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;//若不加上次此句 则再次点击实现预览时 提示 这个组件已经存在 所以我这里FREE了一下
end;
但是 又有了新的问题 主窗体对应的 点击 键依然可点 若在不关闭 print preview的情况下再次点击执行
Click 代码
则出现 没有加 form.Free 时的错误提示:这个组件已经存在

请问 在不关闭 print preview的情况下再次点击执行Click 代码 错误提示:这个组件已经存在 怎么解决?
------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-05 03:16:15 IP:221.232.xxx.xxx 訂閱
非常感动channel此时还在线上 不论如何 先谢谢channel大大

主窗体对应的 点击Click 代码

var
form:Tform1;//form1为新的quickrpt
begin
if form=nil then
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;
end;
end;

这样了以后 点击Click 代码 无反应了....
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-05 03:19:54 IP:59.114.xxx.xxx 訂閱
想請問一下您為什麼要重新宣告form:Tform1;//form1为新的quickrpt??

~敬請指教,感激不盡~
===================引 用 文 章===================
?非常感动channel此时还在线上 不论如何 先谢谢channel大大

主窗体对应的 点击Click 代码

var
form:Tform1;//form1为新的quickrpt
begin
if form=nil then
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;
end;
end;

这样了以后 点击Click 代码 无反应了....
------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-05 03:23:45 IP:221.232.xxx.xxx 訂閱
小弟初次尝试  这个宣告是从例子学习中 借鉴的
请问channel 如果不是这样 这里你会怎么处理?

还有 我仍然是把form1作为了MDI的一个子窗体 否则在MDI母窗体中 执行点击代码 没有效果
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-04-05 03:28:32 IP:59.114.xxx.xxx 訂閱
我的意思是指,您竟然已new一個Report,在Project就已存在這一個unit,應該不需要重新宣告…

我想知道您重新宣告的用意是什麼?這樣才有辦法幫您解決問題…

~小弟淺見,淺考看看~

===================引 用 文 章===================
是的 ...
------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-05 03:31:13 IP:221.232.xxx.xxx 訂閱
我仍然是把form1作为了MDI的一个子窗体 否则在MDI母窗体中执行点击代码 不能实现print preview
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-04-05 03:35:09 IP:59.114.xxx.xxx 訂閱
假設您New Report的Name為Form1,Unit的名稱為fm1
您在MDI母窗体中的implementation底下uses fm1;

不用再宣告form:Tform1;

//var
//form:Tform1;//form1为新的quickrpt
//以上這兩行不要
begin
if form=nil then
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;
end;
end;

~小弟淺見,參考看看~
===================引 用 文 章===================
小弟初次尝试? 这个宣告是从例子学习中 借鉴的
请问channel 如果不是这样 这里你会怎么处理?

还有 我仍然是把form1作为了MDI的一个子窗体 否则在MDI母窗体中 执行点击代码 没有效果
------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-04-05 03:43:40 IP:221.232.xxx.xxx 訂閱
“假設您New Report的Name為Form1,Unit的名稱為fm1
您在MDI母窗体中的implementation底下uses fm1;”我确实是这样做的

不用再宣告form:Tform1;


//var
//form:Tform1;//form1为新的quickrpt
//以上這兩行不要
begin
if form=nil then//这里的form 是指???
begin
form:=Tform1.Create(application);
form.Preview;
form.Free;
end;
end;
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-04-05 03:46:15 IP:59.114.xxx.xxx 訂閱
這裏的form就是您uses unit 的Form Name啊…

就是您不是有New一個Report的Name…

~小弟淺見,參考看看~

===================引 用 文 章===================
不用再宣告form:Tform1;

//var
//form:Tform1;//form1为新的quickrpt
//以上這兩行不要
begin
? if form=nil then//这里的form 是指???
? begin
????form:=Tform1.Create(application);
??? form.Preview;
??? form.Free;
? end;
end;
------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-04-05 03:51:20 IP:221.232.xxx.xxx 訂閱
因为
//var
//form:Tform1;//form1为新的quickrpt
//以上這兩行不要

form1就是新的quickrpt的name
所以调整成如下
begin
if form1=nil then
begin
form1:=Tform1.Create(application);
form1.Preview;
form1.Free;
end;
end;//执行成这样以后 执行Click 只有点击的第一次有效果 执行后 关闭print preview 再执行Click 时 就没有反应了....



channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-04-05 04:03:53 IP:59.114.xxx.xxx 訂閱
剛寫了程式測試了一下…
您將form1.Free;這一行改為FreeAndNil(form1);
這樣就可以…您測試看看吧…

~小弟淺見,參考看看~
===================引 用 文 章===================
因为
//var
//form:Tform1;//form1为新的quickrpt
//以上這兩行不要

form1就是新的quickrpt的name
所以调整成如下
begin
? if form1=nil then
? begin
????form1:=Tform1.Create(application);
??? form1.Preview;
??? form1.Free;
? end;
end;//执行成这样以后 执行Click 只有点击的第一次有效果 执行后 关闭print preview 再执行Click 时 就没有反应了....



------
~小弟淺見,參考看看~
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-04-05 04:08:29 IP:221.232.xxx.xxx 訂閱
感谢channel大大的悉心指导 终于解决了 

再次感谢channel
已发简讯
系統時間:2024-04-20 0:54:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!