全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1388
推到 Plurk!
推到 Facebook!

呼叫表單又一問...

尚未結案
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-04 15:54:28 IP:61.222.xxx.xxx 未訂閱
請教各位高手: 由使用MainMenu下拉式選擇表單樣式,我已可以順利呼叫第一項表單,但若我再進行選擇第二項表單,會有錯誤發生,以下為我的程式碼,請高手不吝幫忙,感謝! unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus; type TCommon = class(TForm) MainMenu1: TMainMenu; F1: TMenuItem; N1: TMenuItem; AltP1: TMenuItem; AltS1: TMenuItem; N2: TMenuItem; AltI1: TMenuItem; AltO1: TMenuItem; C1: TMenuItem; H1: TMenuItem; H2: TMenuItem; AltC1: TMenuItem; procedure N1Click(Sender: TObject); procedure AltS1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Common: TCommon; implementation uses emp; {$R *.dfm} procedure TCommon.N1Click(Sender: TObject); var employee : Temployee; begin try employee:=Temployee.Create(Self); employee.Show; finally employee.Free; end; end; procedure TCommon.AltS1Click(Sender: TObject); var Source : TResource; begin try Source:=TSource end; end; end. 出現錯誤訊息如下: [Error] Main.pas(59): Undeclared identifier: 'free' [Fatal Error] Project1.dpr(7): Could not compile used unit 'Main.pas' [Pascal Error] Main.pas(1): Unable to invoke Code Completion due to errors in source code 我第二項表單Form的Name為Source,則Unit為Resource
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-04 16:19:46 IP:202.39.xxx.xxx 未訂閱
更改紅色的部份試試 而 TResource 是 record 型態, 宣告在 Graphics 單元
procedure TCommon.AltS1Click(Sender: TObject);
var
  Source : TResource; // TResource 改為 TSource
begin
  try
    Source := TSource.Create(nil);
    // ...
  finally
  end;
end;
-- 向 KTop 的弟兄們致敬!
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-04 16:41:29 IP:61.222.xxx.xxx 未訂閱
修改後的訊息如下: unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus; type TCommon = class(TForm) MainMenu1: TMainMenu; F1: TMenuItem; N1: TMenuItem; AltP1: TMenuItem; AltS1: TMenuItem; N2: TMenuItem; AltI1: TMenuItem; AltO1: TMenuItem; C1: TMenuItem; H1: TMenuItem; H2: TMenuItem; AltC1: TMenuItem; procedure N1Click(Sender: TObject); procedure AltS1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Common: TCommon; implementation uses emp; {$R *.dfm} procedure TCommon.N1Click(Sender: TObject); var employee : Temployee; begin try employee:=Temployee.Create(Self); employee.Show; finally employee.Free; end; end; procedure TCommon.AltS1Click(Sender: TObject); var Source : TSource; begin try Source:=TSource.; end; end; end. 錯誤訊息: [Fatal Error] Main.pas(35): File not found: 'emp.dcu' [Fatal Error] Main.pas(35): File not found: 'emp.dcu' [Pascal Error] Main.pas(1): Unable to invoke Code Completion due to errors in source code 謝謝您!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-04 16:52:39 IP:202.39.xxx.xxx 未訂閱
emp.pas 為 emp.dcu 這些檔案所在路徑為何? 如果不是跟 Project 在同一目錄下的話 那得 emp.pas / emp.dcu 檔案所在路徑加入 Library Path 中 加入方法: Delphi 選單 -> Tools -> Environment Options 選 Library Tabsheet 中的 Library Path 選項 另一方法是將 emp.pas 加入 Project 中 加入方法: Delphi 選單 -> Project -> Add To Project    -- 向 KTop 的弟兄們致敬! 
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-05 08:53:30 IP:61.222.xxx.xxx 未訂閱
引言: emp.pas 為 emp.dcu 這些檔案所在路徑為何? 如果不是跟 Project 在同一目錄下的話 那得 emp.pas / emp.dcu 檔案所在路徑加入 Library Path 中 加入方法: Delphi 選單 -> Tools -> Environment Options 選 Library Tabsheet 中的 Library Path 選項 另一方法是將 emp.pas 加入 Project 中 加入方法: Delphi 選單 -> Project -> Add To Project -- 向 KTop 的弟兄們致敬!
您好; 我的emp.pas及emp.dcu所存方的位置為D:\test下,而我依照您的方式將該目錄加入至Tools -> Evironment Options -> Library -> Library Path下,仍出現以下訊息: [Fatal Error] Main.pas(35): File not found: 'emp.dcu' [Fatal Error] Main.pas(35): File not found: 'emp.dcu' [Pascal Error] Main.pas(1): Unable to invoke Code Completion due to errors in source code 再次謝謝您!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-05 09:17:42 IP:202.39.xxx.xxx 未訂閱
您是說在沒加入 Source 這個 Form 之前可以呼叫 employee 這個 Form 但加入後就不行了?    -- 向 KTop 的弟兄們致敬! 
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-05 11:21:24 IP:61.222.xxx.xxx 未訂閱
引言: 您是說在沒加入 Source 這個 Form 之前可以呼叫 employee 這個 Form 但加入後就不行了? -- 向 KTop 的弟兄們致敬!
嗯~~沒錯!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-05 11:44:21 IP:202.39.xxx.xxx 未訂閱
看您描述, 這個問題小弟百思不得其解, 不曉得為什麼? 您可將 Project 上傳至會員求助區
unit Main;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;    type
  TCommon = class(TForm)
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    N1: TMenuItem;
    AltP1: TMenuItem;
    AltS1: TMenuItem;
    N2: TMenuItem;
    AltI1: TMenuItem;
    AltO1: TMenuItem;
    C1: TMenuItem;
    H1: TMenuItem;
    H2: TMenuItem;
    AltC1: TMenuItem;
    procedure N1Click(Sender: TObject);
    procedure AltS1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Common: TCommon;
implementation
uses
   emp, Resource; // 這裏加上 Resource 這個 Unit    {$R *.dfm}    procedure TCommon.N1Click(Sender: TObject);
var
  employee : Temployee;  這個變數可不用宣告, 在 emp 這個 Unit 應該有這個變數名稱了
begin
  employee := Temployee.Create(Self); // 這行放在 try 的外面
  try
    employee.Show;
    finally
    employee.Free; // 這行很奇怪, employee 這個 Form 才 Show 就又把它 Free 了?employee.Show; 應該改成 employee.ShowModal 的方式吧
  end;
end;    procedure TCommon.AltS1Click(Sender: TObject);
var
  Source : TSource;
begin
  try
    Source:=TSource.Create(nil);
    //
  finally
    Source.Free;
    Source := Nil;
  end;
end;    end.
-- 向 KTop 的弟兄們致敬!
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-06 14:22:23 IP:61.222.xxx.xxx 未訂閱
再次感謝您的回應及建議! 我若寫這樣寫會得到Application.Run 這樣的錯誤~
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-07 08:10:08 IP:202.39.xxx.xxx 未訂閱
請問一下 "Application.Run" 的錯誤是什麼意思? 是指程式 run 到 Application.Run 這行出現錯誤嗎? 如果是的話, 您可以把中斷點設在 Application.Run; 這行 當程式執行到這行時, 再按 F7 鍵來繼續 debug 下去 應該可以發現是哪一行程式碼造成的錯誤.    -- 向 KTop 的弟兄們致敬! 
系統時間:2024-05-17 16:49:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!