2009년 4월 16일 목요일

Menu에 활성된 창 목록 보여주기 In DELPHI

창을 여러개 열었을 때 어떤 창이 활성화가 되어있는지 알 수 있도록 해준다...

메뉴를 하나 만들고 아래와 같이 선언부에 선언을 해주고 함수를 코딩하고 호출을 해주면 된다...

선언부...
Procedure MakeForWindow(TargetMenu:TMainMenu; iIndex:Integer;sMainFormName:String;event:TNotifyEvent);
Procedure ReViewForm(Sender:TObject);

호출...
MakeForWindow(GgMenu, 7, 'GGMAINF', ReViewForm);
- GgMenu : 메뉴이름.
- 7 : 메뉴 개수.
- GGMAINF : 메인폼 이름.
- ReViewForm : 화면명 선택시 보여줄 함수.

함수...
procedure MakeForWindow(TargetMenu:TMainMenu; iIndex:Integer;sMainFormName:String;event:TNotifyEvent);var ix: Integer; Item: TMenuItem;begin If (TargetMenu.items[iIndex].Count > 2) Then Begin For ix := TargetMenu.items[iIndex].Count - 1 DownTo 2 Do TargetMenu.items[iIndex].Items[ix].Free; // 현재 '창' 메뉴의 아이템을 모두 삭제 End;

For ix := 0 To Screen.FormCount - 1 Do Begin
// 활성화된 폼 중에서 메인화면을 제외하고 Menu Item에 추가 If (Screen.Forms[ix].name <> sMainFormName) And (pos('_P', Screen.Forms[ix].name) = 0) then //메인 프로그램과 '_P'가 포함된 프로그램은 제외...
Begin Item := TMenuItem.Create(nil); Item.Name := Screen.Forms[ix].name; Item.Caption := Screen.Forms[ix].Caption;

//blank click event에 matching (자기폼 activate) Item.OnClick := event;
TargetMenu.items[iIndex].Insert(TargetMenu.items[iIndex].Count , Item);
If (Screen.Forms[ix] = Screen.ActiveForm) Then Item.Checked := True; End; End;end;

//선택한 창을 맨 앞으로 보여준다...
procedure TGGMAINF.ReViewForm(Sender:TObject);begin ((Application.FindComponent((Sender as Tmenuitem).name)) as TForm).BringToFront ;end;

댓글 없음:

댓글 쓰기