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

參數的問題??

答題得分者是:jeffreck
jch
中階會員


發表:111
回覆:224
積分:66
註冊:2003-12-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-14 15:55:47 IP:218.162.xxx.xxx 未訂閱
Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); begin Grp := _Grp; frmName := _frmName; Application.Createform(TfrmTAC_3A1, frmTAC_3A1); frmTAC_3A1.Caption := _CAP; frmTAC_3A1.Show; end; 以上是小弟的一個FUNCTION,當第一次執行時傳入的GRP=1,並開啟frmTAC_3A1,若此時,再執行此FUNCTION開啟另一個frmTAC_3A1,並傳入GRP=2,若此時將視窗切換回第一次開啟的視窗,第一個視窗的GRP卻也變成2,部之該如何修改程式,讓GRP的值不會因為開啟視窗的先後次序而改變了GRP原有的值呢?? ======================== 我是DELPHI5的初學者
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-14 16:18:19 IP:61.218.xxx.xxx 未訂閱
引言: Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); begin Grp := _Grp; frmName := _frmName; Application.Createform(TfrmTAC_3A1, frmTAC_3A1); frmTAC_3A1.Caption := _CAP; frmTAC_3A1.Show; end; 以上是小弟的一個FUNCTION,當第一次執行時傳入的GRP=1,並開啟frmTAC_3A1,若此時,再執行此FUNCTION開啟另一個frmTAC_3A1,並傳入GRP=2,若此時將視窗切換回第一次開啟的視窗,第一個視窗的GRP卻也變成2,部之該如何修改程式,讓GRP的值不會因為開啟視窗的先後次序而改變了GRP原有的值呢?? ======================== 我是DELPHI5的初學者
Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); var newForm : TfrmTAC_3A1; begin newForm:=TfrmTAC_3A1.Create(self); newForm.Grp:= _Grp; newForm.frmName := _frmName; newForm.Caption := _CAP; newForm.Show; end; try try see
jch
中階會員


發表:111
回覆:224
積分:66
註冊:2003-12-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-14 16:30:16 IP:218.162.xxx.xxx 未訂閱
程式修改後====== Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); var newForm : TfrmTAC_3A1; begin newForm := TfrmTAC_3A1.Create(self); newForm.Grp := _Grp; newForm.frmName := _frmName; Application.Createform(TfrmTAC_3A1, frmTAC_3A1); newForm.Caption := _CAP; newForm.Show; end; newForm.Grp := _Grp; newForm.frmName := _frmName; newForm.Caption := _CAP; 以上出現 Undeclared identifier 的錯誤 Application.Createform(TfrmTAC_3A1, frmTAC_3A1); ======================== 我是DELPHI5的初學者
jch
中階會員


發表:111
回覆:224
積分:66
註冊:2003-12-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-14 16:30:42 IP:218.162.xxx.xxx 未訂閱
程式修改後====== Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); var newForm : TfrmTAC_3A1; begin newForm := TfrmTAC_3A1.Create(self); newForm.Grp := _Grp; newForm.frmName := _frmName; Application.Createform(TfrmTAC_3A1, frmTAC_3A1); newForm.Caption := _CAP; newForm.Show; end; newForm.Grp := _Grp; newForm.frmName := _frmName; newForm.Caption := _CAP; 以上出現 Undeclared identifier 的錯誤 Application.Createform(TfrmTAC_3A1, frmTAC_3A1);這一句該如何修改呢?? ======================== 我是DELPHI5的初學者
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-14 16:32:26 IP:218.168.xxx.xxx 未訂閱
因為你共用一個frmTAC_3A1變數結果,每次執行將覆蓋自已的Grp並將frmTAC_3A1指到新建立的Form基本上這問題是非常邏輯不通的寫法 要改整個程式結構或設一個currActiveForm變數來操作(在Form的OnActive事件中下currActiveForm := self;) 下述做法只是暫時解決你目前的問題
Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String);
begin    //mark 掉  Grp := _Grp;
  frmName := _frmName;
  Application.Createform(TfrmTAC_3A1, frmTAC_3A1);
  frmTAC_3A1.Caption := _CAP;
  frmTAC_3A1.Grp := _Grp; //移到這邊
  frmTAC_3A1.Show;
end;
混心雜欲 棄修身~唉
------
唉~
jch
中階會員


發表:111
回覆:224
積分:66
註冊:2003-12-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-14 16:49:00 IP:163.17.xxx.xxx 未訂閱
多謝大哥,但是小弟將程式修改後問題依然存在喔! Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); begin Application.Createform(TfrmTAC_3A1, frmTAC_3A1); frmTAC_3A1.Caption := _CAP; frmTAC_3A1.Grp := _Grp; frmTAC_3A1.frmName := _frmName; frmTAC_3A1.Show; end; frmTAC_3A1.Grp := _Grp; frmTAC_3A1.frmName := _frmName; 以上出現 Undeclared identifier 的錯誤 在Form的OnActive事件中下currActiveForm := self; 該如何下呢??小弟直接在OnActive事件上加上這一句一樣出現錯誤!! ======================== 我是DELPHI5的初學者
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-14 17:03:03 IP:61.218.xxx.xxx 未訂閱
引言: 多謝大哥,但是小弟將程式修改後問題依然存在喔! Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); begin Application.Createform(TfrmTAC_3A1, frmTAC_3A1); frmTAC_3A1.Caption := _CAP; frmTAC_3A1.Grp := _Grp; frmTAC_3A1.frmName := _frmName; frmTAC_3A1.Show; end; frmTAC_3A1.Grp := _Grp; frmTAC_3A1.frmName := _frmName; 以上出現 Undeclared identifier 的錯誤 在Form的OnActive事件中下currActiveForm := self; 該如何下呢??小弟直接在OnActive事件上加上這一句一樣出現錯誤!! ======================== 我是DELPHI5的初學者
我試沒問題 可能是你沒宣告 Grp 及frmName 程式如下:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;    type
  TfrmTAC_3A1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Procedure fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Grp : String;
    frmName: string;
  end;    var
  frmTAC_3A1: TfrmTAC_3A1;    implementation    {$R *.dfm}    Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String);
var
newForm : TfrmTAC_3A1;
begin
newForm := TfrmTAC_3A1.Create(self);
newForm.Grp := _Grp;
newForm.frmName := _frmName;
newForm.Caption := _CAP;
newForm.Show;
end;    procedure TfrmTAC_3A1.BitBtn1Click(Sender: TObject);
begin
self.fnTAC_3A1('aaa','aaa','aaa');
end;    procedure TfrmTAC_3A1.BitBtn2Click(Sender: TObject);
begin
self.fnTAC_3A1('bbb','bbb','bbb');
end;    end.     
發表人 - jeffreck 於 2004/07/14 17:46:09
jch
中階會員


發表:111
回覆:224
積分:66
註冊:2003-12-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-14 17:26:41 IP:218.162.xxx.xxx 未訂閱
多謝大哥,原來是小弟宣告參數的地方錯了!但是又有一個問題 newForm := TfrmTAC_3A1.Create(self); newForm.Grp := _Grp; newForm.frmName := _frmName; 利用這個方法,在newForm := TfrmTAC_3A1.Create(self);就已經觸發了onCreate的事件,但是在該是件需要使用到Grp和frmName這兩個參數,會造成程式錯誤,不知該如何於onCreate的事件前就先將Grp和frmName這兩個參數賦予值呢?? ======================== 我是DELPHI5的初學者
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-14 17:38:37 IP:61.218.xxx.xxx 未訂閱
引言: 多謝大哥,原來是小弟宣告參數的地方錯了!但是又有一個問題 newForm := TfrmTAC_3A1.Create(self); newForm.Grp := _Grp; newForm.frmName := _frmName; 利用這個方法,在newForm := TfrmTAC_3A1.Create(self);就已經觸發了onCreate的事件,但是在該是件需要使用到Grp和frmName這兩個參數,會造成程式錯誤,不知該如何於onCreate的事件前就先將Grp和frmName這兩個參數賦予值呢?? ======================== 我是DELPHI5的初學者
那自己宣告一個 Procedure 把 Create 的程式寫在裡面 如 mycreate Procedure TfrmTAC_3A1.fnTAC_3A1(_frmName:String;_CAP:String; _Grp:String); var newForm : TfrmTAC_3A1; begin newForm := TfrmTAC_3A1.Create(self); newForm.Grp := _Grp; newForm.frmName := _frmName; newForm.Caption := _CAP; newForm.mycreate; //<--- 去執行 newForm.Show; end; Procedure TfrmTAC_3A1.myCreate(); begin self.Label1.Caption :=Grp;//<--- 原 Create事件寫在這一行 end;
jch
中階會員


發表:111
回覆:224
積分:66
註冊:2003-12-01

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-14 17:47:03 IP:163.17.xxx.xxx 未訂閱
多謝大哥!!問題已經解決了! ======================== 我是DELPHI5的初學者
系統時間:2024-05-17 20:02:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!