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

請問如何讓 Unit2 在 Form1 的 Memo1 上顯示文字 ?

答題得分者是:Miles
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-10 16:18:28 IP:210.69.xxx.xxx 未訂閱
請問如何讓 Unit2 在 Form1 的 Memo1 上顯示文字 ?    Unit1.pas 中 Form1 上有一個 Memo1     Unit2.pas 中  Memo1.Lines.Add('訊息');  有下面錯誤
引言: [Error] Unit2.pas(109): Undeclared identifier: 'Memo1'
如果改為 Form1.Memo1.Lines.Add('訊息'); 有下面錯誤
引言: [Error] Unit2.pas(109): Undeclared identifier: 'Form1'
為了讓 Unit2 認識 Form1, 後來嘗試在 Uses 加上 Unit1, 結果
引言: [Fatal Error] Unit1.pas(13): Circular unit reference to 'Unit1'
請問如何讓 Unit2 在 Form1 的 Memo1 上顯示文字 ? 謝謝 !
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-10 16:29:09 IP:211.20.xxx.xxx 未訂閱
pcboy2 你好
    請調整uses 該單元的位置就可以了    unit Unit2;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Db, DBCommon, DBClient, Provider, DBTables, Unit1; // 移到這裏uses    type
......
.....
var
  Form2: TForm2;    implementation
//  uses Unit1;  // 不要在此uses      
_______________________________________ 深藍的魚,祝您好運..........連連
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-10 16:55:43 IP:210.69.xxx.xxx 未訂閱
感謝您的回答    Unit2.pas 中有不少自己寫的 function 和 procedure 如果 Unit1 中不 uses Unit2 , 會有錯誤    實際照您所說改的結果    
引言: [Error] Unit1.pas(46): Undeclared identifier: 'ShowX'
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-10 17:12:47 IP:211.20.xxx.xxx 未訂閱
pcboy2 你好      當看到 Undeclared identifier: 'XXXX' 的錯訊息時,只要知道 'XXXX'在那個單元檔宣告或定義的,然後uses該單元檔即可,而uses的位置,則以放在Interface區段的uses 或implementation 區段的uses 皆可,若有像前述的[Circular unit reference to 'Unit1' ]訊息時就換個位置應該就可以了。    _______________________________________ 深藍的魚,祝您好運..........連連
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-11 00:52:41 IP:203.204.xxx.xxx 未訂閱
小弟前面已經提 Unit2.pas 中有不少自己寫的 function 和 procedure 所以 Unit1 中必須 uses Unit2 , 您提的 "請調整uses 該單元的位置" 並不適用 還是說 uses Unit2 寫在 Interface區段 或implementation 區段有差異 ?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-11 02:02:27 IP:203.204.xxx.xxx 未訂閱
pcboy2 你好     當兩個單元檔互相uses時,必須一個寫在Interface區段而另一則寫在implementation 區段,讓它們錯開,如下:
{ Unit1.pas  ---------------------------------------}
unit Unit1;    interface
uses
  ........
type
.....
var
  Form1: TForm1;    implementation    uses Unit2;
...
End.    { Unit2.pas  ---------------------------------------}
unit Unit2;    interface    uses
  ...............
  .............., Unit1; // 移到這裏uses
type
......
.....
var
  Form2: TForm2;    implementation
....
_______________________________________ 深藍的魚,祝您好運..........連連
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-11 02:18:43 IP:203.204.xxx.xxx 未訂閱
pcboy2 你好     一般來說uses語句放在 Interface區段 或implementation 差別不是太大的,唯一差別在Interface區段中會用到別的單元檔中的自定型別、元件類別時,該單元檔即需在Interface區段中uses它,其他狀況好像沒什麼差別了。     所以一般來說,系統(標準)元件、自訂元件或公用函數(可能會有一些自定型態)所在的單元檔,皆在Interface 區段中uses它,而專案相關的單元檔會放在implementation  後面uses 它,除非發生Circular unit reference (循環參考)的狀況時,才會將其中一個單元檔的uses搬家(移到Interface區段中)。     當然啦!以上只是我個人的習慣,它不是絕對的,只要不會衝突就可以了。    _______________________________________ 深藍的魚,祝您好運..........連連
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-11 12:12:04 IP:61.31.xxx.xxx 未訂閱
Hi pcboy2 你好:
//Form1
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    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
    ShowMemo(Memo1);
end;    end.
**************************************************
//Unit2
unit Unit2;    interface    Uses StdCtrls;    procedure ShowMemo(InMemo : TMemo);    implementation    procedure ShowMemo(InMemo : TMemo);
begin
   InMemo.Lines.Add('test');
end;    end.
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-11 22:39:19 IP:203.204.xxx.xxx 未訂閱
請問有辦法將 Memo1 變成全域變數嗎 ? 讓 Unit1, Unit2, ... 都可以顯示文字
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-12 20:20:49 IP:61.31.xxx.xxx 未訂閱
Hi pcboy2 你好, 試試這個:    
//*******Unit2*******
unit Unit2;    interface    Uses StdCtrls;    procedure ShowMemo;    Var MyMemo : TMemo;    implementation    procedure ShowMemo;
begin
   if Assigned(MyMemo) then
      MyMemo.Lines.Add('test');
end;    end.
//*******Form1*******
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;    type
  TForm1 = class(TForm)
            Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);      private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    uses Unit2, Unit3;    {$R *.dfm}        procedure TForm1.Button1Click(Sender: TObject);
begin
    MyMemo := Memo1;
    ShowMemo;
end;    procedure TForm1.Button2Click(Sender: TObject);
begin
   Form3.Show;
end;    end.    //*******Form3*******
unit Unit3;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form3: TForm3;    implementation    Uses Unit2;    {$R *.dfm}    procedure TForm3.Button1Click(Sender: TObject);
begin
   ShowMemo;
end;    end.
我不是高手, 高手是正在銀幕前微笑的人.
------


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