關於MDI. |
答題得分者是:channel
|
yezi_ji
一般會員 發表:16 回覆:31 積分:9 註冊:2003-03-22 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 請教各位大哥及前輩,我在MDI主窗口中做了一個Panel,但是我在彈出子窗口時,Panel會擋在子窗口的前面,我現在想在顯示子窗口時,這個Panel不能遮住子窗口,好能完全看的到子窗口。並且在關閉子窗口之後,Panel又能顯示。請問有什麽好的方法?謝謝!建議您一個作法: 在開啟子窗口,將Panel引藏起來,例: OpenForm(****,****);//開啟的procedure Panel1.Visible := False;//這一行緊接在開啟Form的程式後面 在關閉子窗口,將Panel顯示出來,例: procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction); begin if MainForm.MDIChildCount <= 1 then MainForm.Panel1.Visible := True; end;~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
yezi_ji
一般會員 發表:16 回覆:31 積分:9 註冊:2003-03-22 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
設定主窗口的 onActivate 及 onDeActivate 事件 :
procedure TForm1.FormActivate(Sender: TObject); begin Panel1.Visible := true; Panel2.Visible := true; end; procedure TForm1.FormDeactivate(Sender: TObject); begin Panel1.Visible := false; Panel2.Visible := false; end;這樣就不會在每個子窗口設定了。 引言: 能不用經過菜單直接在主界面里進行顯示操作,比如,顯示某些子窗口。設定主窗口的 WindowMenu 為你其中一個主菜單項目元件 (通常是"窗口"那個),這樣所有開啟了的子窗口清單便會自動加在該菜單項目尾端。 |
yezi_ji
一般會員 發表:16 回覆:31 積分:9 註冊:2003-03-22 發送簡訊給我 |
|
yezi_ji
一般會員 發表:16 回覆:31 積分:9 註冊:2003-03-22 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 我在登錄框里定義了一個變量,並賦有一定的值,接著,我在主窗口引用這個變量,但是程序報錯您宣告在什麼地方,您可以宣告在紅色字體那兩個地方的其中之一。 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TLoginForm = class(TForm) private { Private declarations } public { Public declarations } t: String; end; var LoginForm: TLoginForm; t: String; implementation {$R *.DFM} end. 引言: 而且,在主界面的程序里好像不能用Login(登錄框),比如t:=Login.Edit1.Text;(t為主界面的變量),程序也報錯。請問有什麽方法解決?檢查一下您的Login視窗有沒有宣告LoginForm: TLoginForm;,也就是藍色字體的地方 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
yezi_ji
一般會員 發表:16 回覆:31 積分:9 註冊:2003-03-22 發送簡訊給我 |
引言: 您宣告在什麼地方,您可以宣告在紅色字體那兩個地方的其中之一。你的Unit1是不是我說的登錄框,沒有用的,我是這樣做的。我的程序是先顯示登錄框再顯示主界面,並且,我在主界面的OnCreat的事件里做了數據庫的ADOQuery,好像不能再主界面的OnCreate的事件里調用登錄框的變量。我做的是MDI界面,實在主界面的OnShow事件里調用登錄框的,所以在界面的OnCreate事件時,登錄框還沒有建立,(我不知道Form的事件順序,但我是這樣認爲的),登錄框的變量也就還沒有賦值。有沒有哪位大哥知?我還想知道Form事件的大概 執行順序。 我是菜鳥,請多指點! 不勝感激!! |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
引言: 有沒有可能是這樣的,因爲我在主界面的OnCreate的事件里引用了登錄框的變量,而在登錄框它還沒有被賦值,所以才會報錯。你認爲呢? 那我是不是在主界面的OnShow事件之後才能引用登錄框的變量?對啦,Login 裡的變數,一定在你 Create 之後, Free 之前才可以使用的。 而且,還要看看你是甚樣 Create 的,用法會有不同哩。 如果你是以 Login := TLogin.Create(self); 來 Create 的話,你就可以在 Free 之前用 t : =Login.Edit1.Text; 但如果你是用 with TLogin.Create(self) do try ... ... finally free; end; 的話,你可以在 try 到 finally 之中用 t := Edit1.Text; 為甚麼沒有 Login 字眼呢? 因為跟本沒有使用這個變數 (沒有 Login := ...),而且 with XXX do 的意思即是說在之後的區段裡所有變數都是預設是 XXX 這個物件的,不用再加上 XXX 的物件名字。 如果 TLogin 和 TMainForm 都有 Edit1 甚辦呢? 由於預設是 TLogin 那個 Form 的,所以要存取 TLogin 的 Edit1 直接打 Edit1.yyy 就可以,反之,要存取 TMainForm 的就要加上 MainForm.Edit1.yyy。 如果要存取 TMainForm 的 Edit2, 而 TLogin 裡是沒有的,要用 MainForm. 嗎? 可以用也可以不用,因為在 預設的 XXX 裡找不到的,會自動當成是本地(TMainForm)的。 |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 你的Unit1是不是我說的登錄框,沒有用的,我是這樣做的。我的程序是先顯示登錄框再顯示主界面,並且,我在主界面的OnCreat的事件里做了數據庫的ADOQuery,好像不能再主界面的OnCreate的事件里調用登錄框的變量。我做的是MDI界面,實在主界面的OnShow事件里調用登錄框的,所以在界面的OnCreate事件時,登錄框還沒有建立,(我不知道Form的事件順序,但我是這樣認爲的),登錄框的變量也就還沒有賦值。有沒有哪位大哥知?我還想知道Form事件的大概 執行順序。你的Unit1是不是我說的登錄框?是的 unit Loginfm; interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TLoginForm = class(TForm) private { Private declarations } public { Public declarations } end; var LoginForm: TLoginForm; t: String;宣告在這個地方,應該不會錯了,只是取到t的值是空的 implementation{$R *.DFM} end.我還想知道Form事件的大概執行順序。 您可以看一下Delphi Menu中的Project\View Source,大概的長相如下: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} begin Application.Initialize;-->程式就是從這開始執行的 Application.CreateForm(TForm1, Form1); Application.Run; end.所以您的程式執行的順序應該是主界面的OnCreate、OnShow、再執行登錄框的登錄程式! 如果您是要取得登錄者的Id及Password您可以將變數宣告在主界面,紅色字體的地方,在您的登錄框的程式中uese主界面將t := Edit1.Text;,這樣就可以了。 註:t的前面不用加unit Name,直接用就可以了 unit Mainfm; interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TLoginForm = class(TForm) private { Private declarations } public { Public declarations } end; var LoginForm: TLoginForm; t: String; implementation{$R *.DFM} end.~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |