SDI 的sub form 如何設定focus |
答題得分者是:ccchen
|
dirboy
一般會員 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
dirboy
一般會員 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
dirboy
一般會員 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
為何一定要用SDI, MDI不是很好嗎?
真要用SDI也可以.但麻煩多了.
主要關鍵在Screen(此為Delphi提供之Global變數),有一array-->"forms"可以得到所有開啟中之form 假設MainMenu1在Form1上,有一menuitem, name為history
1. 將mainmenu之AutoHotkeys設為maManual 2. 在FormActive //這只是方便的選擇, 你可選對你更合適之時機
procedure Tform1.FormActivate(Sender: TObject); var NewItem: TMenuItem; I : integer; begin with history do begin clear; //先清除history以下之所有item for I := 0 to Screen.FormCount-1 do begin //對每一開啟中之form if Screen.Forms[I]<> self then begin //check 不是mainform NewItem := TMenuItem.Create(Self); //create menuitem NewItem.Caption := Screen.Forms[I].Name; //用該form之name做為menuitem之caption NewItem.OnClick:=FOrmMenuClick; //click時必須給他一準備好之procedure Add(NewItem); //將此menuitem加入history中 end; end; end; end;3. 另寫一procedure 以便click form之name時可show該form type Tform1 = class(TForm) MainMenu1: TMainMenu; ... procedure FormMenuClick(Sender: TObject);//自行加入此行宣告 ... procedure Torm1.FormMenuClick(Sender: TObject); var formname:string; i:integer; begin if Sender is TMenuItem then begin //確定是user click了menuitem formname:=TMenuItem(Sender).Caption; //由menuitem取得formname for I := 0 to Screen.FormCount-1 do if comparetext(Screen.Forms[I].Name,formname)=0 then //找到此form Screen.Forms[I].show; //不一定是直接show, 須看你自己的需要 end; end; |
dirboy
一般會員 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |