Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
ВнизИ снова MDI Найти похожие ветки
← →
X3coder (2003-03-07 17:48) [0]Подскажите, как в MainMenu1 добавить список всех дочерних окон и по нажатию на нужную, она становилась активной
← →
Roma (2003-03-07 18:57) [1]TCustomForm.WindowMenu + F1
← →
X3coder (2003-03-07 21:59) [2]а что это значит? :)
← →
Strumpf (2003-03-07 22:05) [3]А это значит, что пора, наконец, выучить английский. Я в свое время профилонил - теперь страдаю!
← →
Pesh (2003-03-07 22:25) [4]представь себе TMainMenu в котором есть TMenuItem miWindowMenu (расположенный на Menu Bar). Вручную создаеш в нём MenuItem"зы:
miTile, miCascade, miArrangeIcons (как в любом нормальном приложении).
При создании нового MDI-Child вызываешь
CreateWindowItem (f.Caption,MDIChildCount,FFMDIForms);
f - свежесозданная форма, FFMDIForms - самопальная функция, возвращающая первую свободную позицию в самопальном массиве MDIForms.
Возможно ты в этом и не разберёшся или найдёшь выход получше. Но если хочешь, пиши на мыл и получишь реальную прогу, в которой всё этот дело 100% работает.
TFormPointer = record
case Integer of
1: (p: Pointer);
2: (f: TForm);
end;
MDIForms: Array [1..100] of TFormPointer;
Вот обработчики:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function FFMDIForms:byte;
var i:byte;
begin i:=1; result:=0;
while Assigned(MDIForms[i].p) and (i<=100) do inc (i);
if i<=100 then result:=i;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TfCDtMain.miTileClick(Sender: TObject);
begin Tile;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~procedure TfCDtMain.miCascadeClick(Sender: TObject);
begin Cascade;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~procedure TfCDtMain.miArrangeIconsClick(Sender: TObject);
begin ArrangeIcons;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~procedure TfCDtMain.WindowClick (Sender: TObject);
var f:TForm;
begin
if Sender is TMenuItem then
begin
f:=MDIForms[TMenuItem(Sender).Tag].f;
if not assigned (f) then exit;
If f.WindowState=wsMinimized then f.WindowState:=wsNormal else
f.Show;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~procedure TfCDtMain.CreateWindowItem (Caption:String;ShortCutIndex,FormIndex:integer);
var miRec:TMenuItem; sc:String;
begin
if Caption="" then exit;
miRec:=TMenuItem.Create (miWindowMenu);
miRec.Visible:=true;
miRec.Caption:=Caption;
miRec.AutoHotkeys:=maManual;
miRec.OnClick:=WindowClick;
sc:=IntToStr(ShortCutIndex);
miRec.Tag:=FormIndex;
miRec.ShortCut:=ShortCut(Word(sc[1]), [ssAlt]);
miWindowMenu.Add (miRec);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~procedure TfCDtMain.miWindowMenuClick(Sender: TObject);
var i:integer;
begin
for i:=4 to miWindowMenu.Count-1 do miWindowMenu.Items[i].Checked:=false;
if miWindowMenu.Count>4 then
for i:=4 to miWindowMenu.Count-1 do
begin
miWindowMenu.Items[i].Caption:=MDIForms[miWindowMenu.Items[i].Tag].f.Caption;
if MDIForms[miWindowMenu.Items[i].Tag].f=ActiveMDIChild then miWindowMenu.Items[i].Checked:=true;
end;
end;
← →
Strumpf (2003-03-07 22:56) [5]> Pesh (07.03.03 22:25)
ДА УЖЖЖЖЖЖ.....
← →
Pesh (2003-03-07 23:13) [6]а чо Strumpf есть другие предложения?
я же не догматик, сам бы с удовольствием тебя послушал...
← →
nikkie (2003-03-07 23:21) [7]>есть другие предложения?
читайте хелп...
← →
Pesh (2003-03-07 23:53) [8]ты хочешь сказать, nikkie, что в хелпе есть полезные сведения по этому вопросу?
типа например, присвойте свойству WindowMenu главной формы какой-нить TMenuItem и тут же получите туда список всех MDI-Child"ов, вместе с горячими клавишами, отметками на активном окне и т.д. ????????????????????
← →
nikkie (2003-03-08 00:24) [9]ты выражаешь сомнение в том, что это будет так работать? или в том, что хелп содержит полезную информацию? если первое - сам попробуй. если второе - почитай хелп.
The Window menu also lists (at the bottom) the child windows that are currently open in the application. When the user selects one of these windows from the menu, the window becomes the active window in the application.
← →
Pesh (2003-03-08 00:36) [10]Сам факт того что эта ботва не пашет, заставляет меня в этом сомневаться. Конечно, если у тебя есть код, в котором список чайлдов отображается в меню только потому, что этот пункт меню прописан в WindowMenu главной формы, я бы с удовольствием посмотрел (самому интересно). Дай ссылочку или кинь на мыл, если не в лом.
← →
Pesh (2003-03-08 00:48) [11]Наконец то я догнал в чём здесь макар... оказывается, что есть такая недокументированная фишка - в этом самом WindowMenu должен быть хотя бы 1 элемент!!! Обязательно! Иначе не работает... :(((
Кто ж знал....
← →
X3coder (2003-03-08 11:23) [12]Что-то уж много всего, вам не кажется?
Вроде это делается несколькими строчками кода... МНЕ ТАК КАЖЕТСЯ :))
Pesh, спасибо за приведёный код, щас будем пробывать
← →
Pesh (2003-03-08 17:14) [13]X3coder, забей на код - для чего базар то весь был?
nikkie хотел убедить меня, что всё работает без кода, надо только у родительсткой MDI формы в свойстве WindowMenu задать нужный TMenuItem и туда попадут все MDI-дети, но он забыл сказать, что при этом меню, прописанное в WindowMenu НЕ ДОЛЖНО БЫТЬ ПУСТЫМ! Вот и всё, я проверял - действительно работает без кода...
← →
X3coder (2003-03-08 17:23) [14]Очень тупо!
В родительской форме ставлю Windowmenu=Windows1
Запускаю... ничё нету :(
Вписываю чёнить в Windows1...
Запучаю... появляется список окон и то что я вписал :(((
Зачем мне то, что я вписал... мне нужно просто список окон..
← →
Pesh (2003-03-09 12:45) [15]ну так впиши туда то, что я предлагал в начале - режимы отображения окон: Tile, Cascade и при желании ArrangeIcons.
Первые 2 ещё никому не помешали...
← →
X3coder (2003-03-09 12:48) [16]Ну я так и сделал...
Засунул туда
Minimize all
Restore All
Title
Cascade ...
Я думаю это не лишнее :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c