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

SDI 的sub form 如何設定focus

答題得分者是:ccchen
dirboy
一般會員


發表:7
回覆:16
積分:9
註冊:2002-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-22 21:59:38 IP:202.175.xxx.xxx 未訂閱
就好像delphi IDE 一樣, 是一個SDI, 但Delphi menu 中的"window" 可以設定和找到各個form, 請問大家知到如何實作嗎? 謝謝!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-23 09:55:18 IP:203.217.xxx.xxx 未訂閱
Form有一個property叫WindowMenu 只要將此property指向任一個你mainMenu中之menuitem, 所有開啟中之form均會顯示在此menuitem之下
dirboy
一般會員


發表:7
回覆:16
積分:9
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-23 15:25:47 IP:202.175.xxx.xxx 未訂閱
原來如此, 謝謝 ccchen 兄了, 但我看過delphi 的help, WindowMenu 只在MDI application 中生效, 請問SDI 也可以用嗎?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-23 15:45:37 IP:203.217.xxx.xxx 未訂閱
WindowMenu 只在MDI application 中生效
dirboy
一般會員


發表:7
回覆:16
積分:9
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-23 20:31:18 IP:202.175.xxx.xxx 未訂閱
那麼請問, 如果我想在SDI application中實作可以像Delphi那樣選擇form , 有什麼方法? 謝謝!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-23 22:36:51 IP:203.217.xxx.xxx 未訂閱
為何一定要用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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-25 09:14:43 IP:202.175.xxx.xxx 未訂閱
萬二分的謝謝 ccchen 兄! 其實因為已有的App 是以SDI 來開發的, 所以沒有辦法, 另外, 因為原來的選Form 的方法太笨, 所以想找一個好一點的, CCChen 兄的方法很好, 再一次謝謝.
系統時間:2024-04-28 0:32:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!