uese 無效??? |
尚未結案
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
請問各位大大,
在delphi 中,在uses 指令,可以存取他form 的物件資源,
可是,不知道去用到什麼指令或設定,下了uses指令,也一樣無法存取他form
的資源??
以下指令,是原先可以正常的... ex: implementation
uses STChgWork; //有下uses
.
[略]
.
.
with F_STCHGWORK do
begin
st_cn_uniserial := VacationQRY.FieldValues['cn_uniserial'];
end //------錯誤訊息如下----他是說 違規存取.... 發表人 - cxh17895 於 2005/07/24 12:18:35
|
cxg
中階會員 發表:116 回覆:192 積分:76 註冊:2004-02-12 發送簡訊給我 |
你可以把錯誤信息貼上來看一下。我貼一個例子您可以參考一下:
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
begin
WITH FORM2 DO
BEIGN
Query1.CLOSE;
Query1.SQL.ADD('...');
Query1.OPEN;
END;
end; end.
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
cxg
中階會員 發表:116 回覆:192 積分:76 註冊:2004-02-12 發送簡訊給我 |
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
回應h@visli
st_cn_uniserial := F_STCHGWORK.VacationQRY.FieldValues['cn_uniserial'];
一樣失敗... 回應 cxg ---
F_STCHGWORK 窗体有创建,因為呼叫,這支程式是由F_STCHGWORK呼叫,不可能沒創建..
且VacationQRY是實體,並不是動態變量... 語法如下: Procedure TF_STCHGWORK.STUchgWork (input :string);
var
F_STCHGWORK : TF_STCHGWORK;
begin F_STCHGWORK := TF_STCHGWORK.Create(nil); //重建 動態FORM try
F_STCHGWORK.stno := input;
F_STCHGWORK.ShowModal; FINALLY F_STCHGWORK.Release;
end; end; //--
我也自己又開了一個ap來測式互相存取...可以耶...
真不知道是那裡有問題.. 發表人 -
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
我開始還以為您的F_STCHGWORK是個靜態創建的窗體。 原來您在with F_STCHGWORK do裡引用的F_STCHGWORK,是在
Procedure TF_STCHGWORK.STUchgWork (input :string);
var
F_STCHGWORK : TF_STCHGWORK;
裡定義的? 這裡的F_STCHGWORK是屬於STUchgWork這個Procedure的,您要在窗體的Form中引用它是不用的。但您可以試試把F_STCHGWORK放到
TF_STCHGWORK的public區域來申明定義: private
{ Private declarations }
public
{ Public declarations }
F_STCHGWORK : TF_STCHGWORK;
end; 我沒有試過,不知道行不行
< >< >< >< >
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
1. 把
var
F_STCHGWORK : TF_STCHGWORK; 移到 STChgWork.pas 的 Implementation 前面 2.叫出 Project-->Options 在 Forms 那一頁 F_STCHGWORK 由 Auto-create forms 區 移到 Available forms 區 步驟1 是將 F_STCHGWORK 讓有 uses STChgWork 的 unit 都可以引用他
步驟2 是 請 Delphi 不要安插 Create F_STCHGWORK 的程式碼, 而自行決定
F_STCHGWORK 的 Create 及 Destory 時機 產生錯誤的原因 確實是 如 cxg 所說 F_STCHGWORK 沒有创建, 因為ShowModal 後 F_STCHGWORK 就被你 Release 掉了.
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
回應h@visli
--------
這裡的F_STCHGWORK是屬於STUchgWork這個Procedure的,您要在窗體的Form中引用它是不用的。但您可以試試把F_STCHGWORK放到
TF_STCHGWORK的public區域來申明定義: 結果是一樣失效...
-----------------
回應malanlk 1. 把
var
F_STCHGWORK : TF_STCHGWORK; 移到 STChgWork.pas 的 Implementation 前面 結果
在程式中 F_STCHGWORK : TF_STCHGWORK; 其實就自動設定 Implementation 前面了,所以也不用設定,我也有改名稱試試,一樣沒有作用! 再來就是...
產生錯誤的原因 確實是 如 cxg 所說 F_STCHGWORK 沒有创建, 因為ShowModal 後 F_STCHGWORK 就被你 Release 掉了. 程式碼中,是如此寫
try
F_STCHGWORK.stno := input;
F_STCHGWORK.ShowModal; FINALLY
F_STCHGWORK.Release;
end; 我是用showmodal 也就是獨佔視窗,在未結束前,跟本不會Release掉,也就是沒有大大上面所說的問題,被Release 掉了,
//-------
試了幾天,有了一些心得
當叫出 Project-->Options 在 Forms 那一頁 F_STCHGWORK 由Available forms 區 移到Auto-create forms 區,程式碼又可以正常了,
不知要如何處理這種疑問?? 這個問題,小弟以經用另外一種寫法處理掉了,基本上,已解決,但是,本討論串的疑問(就是動態form為何無法順利存取.... )還是存在的...
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
當你將 Form 由 Auto-create forms 區 移到 Available forms 區後,
這個 Form 就必須手動 Create 處理. 請將程式做調整.
with F_STCHGWORK do begin //... 略 ... end;改成 F_STCHGWORK := TF_STCHGWORK.Create(self); try with F_STCHGWORK do begin //... 略 ... end; finally F_STCHGWORK.Free; end;雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
cxh17895
初階會員 發表:13 回覆:37 積分:25 註冊:2003-03-19 發送簡訊給我 |
各位大大,我大概知道問題點了.. 示範程式在此
http://delphi.ktop.com.tw/loadfile.php?TOPICID=23688479&CC=529781 接下來是的,分數要給誰?給分數較低的人好了...有沒有問題? 發表人 - cxh17895 於 2005/07/27 10:10:09
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
濃霧終於散去....
可是你還是搞錯了......
請你將
你放上去的程式
procedure TForm1.Button1Click(Sender: TObject); begin //Form2.CallForm2; newForm2.CallForm2; end; var //Form2: TForm2; newForm2 : TForm2; implementation你就會知道, 錯是錯在 Unit1 沒有呼叫對的物件 你原來的圖是對的 傷腦筋, 分數你喜歡給誰就給誰... 我只在乎分數要給出來 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |