Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать MDIChild окно активным? [D7, WinME, WinXP]


Дмитрий Попов ©   (2003-01-21 21:45:00) 

Вопрос в следующем:
Я изучаю делфи недавно, потому прошу не ругать за глупый вопрос.

Хочу сделать возможность переключения между MDI-окнами, по нажатию соответствующей кнопки ToolController"а.

При создании нового окна, у меня создается и соответствующая вкладка в тулбаре. Вопрос, наверное банален, но уже неделю мучаю хелп, интернет и литературу, но не могу найти на него ответ:

Как мне сделать MDI окно активным, кроме стандартных (щелчок из windowmenu, или самому окну) способов?
Какие есть для этого программные способы?

Пытался записывать в objectList - нет никаких свойств самого окна.
Пытался фокусировать через MDIChildren[index] - тоже не нашел!

Как же это сделать? Очень прошу мне помоч...


Дмитрий Попов   (2003-01-22 18:57:00) [1]

Огроменное всем спасибо, но проблему удалось все-таки решить!


> вышеназванный индекс - это не порядок создания, а порядок
> активизации окон.


Я это понял, и потому решил другим способом. Вот, что получилось (работает идеально):

for I:= 0 to MDIChildCount - 1 do
if form1.MDIChildren[I].Caption = page_scrl.Tabs.Strings[page_scrl.TabIndex] then
begin
with MDIChildren[I] do
begin
Show;
if WindowState = wsMinimized then
WindowState:= wsNormal;
end;
Break;
end;


Осталось немного улучшить, и все будет очень даже!


> >>соответствующей кнопки ToolController"а

Конечно-же я ошибся, имелся ввиду TabControl...


smok_er   (2003-01-22 10:15:00) [2]

>>соответствующей кнопки ToolController"а

Что за компонент такой?


smok_er   (2003-01-22 10:02:00) [3]

MDIChildren[index] возвращает не форму, созданную по порядку
Пример: вы создали форму1, форму2 и форму3
вышеназванный индекс - это не порядок создания, а порядок активизации окон.
в хелпе об этом написано, сам недавно здесь спрашивал.
Я делаю активным окно методом SHow


Дмитрий Попов   (2003-01-22 09:15:00) [4]

mrcat...
В смысле?


mrcat   (2003-01-22 02:05:00) [5]

не помогает - делайте Restore; =))))


Дмитрий Попов   (2003-01-22 01:01:00) [6]

Не-а...
Попробовал for_t:=Tform3.Create(form1); - результат тот же...


Stager   (2003-01-21 23:12:00) [7]

У меня несколько другой случай. Создавал я их примерно таким образом:

var
TRKs: array [0..15] of TfmTrk;

....

function CreateMDIChild(N: byte): boolean;
begin
with fmMain do begin
Result:=False;
try
TRKs[fmMain.MDIChildCount]:=TfmTrk.Create(fmMain);
with TRKs[fmMain.MDIChildCount] do begin
{...}
Result:=True;
end;
except
// Error!
end;
end;
end;


Все работало. И работает. :) У меня подозрение на Ваш "Self".


Дмитрий Попов   (2003-01-21 22:33:00) [8]

Да, естественно, индекс активного окна - не ноль...


Дмитрий Попов   (2003-01-21 22:29:00) [9]

Хм... А у меня почему-то не работает.

Создаю я окно так:
for_t:=Tform3.Create(self);
for_t.RichEdit1.Lines.Clear;
for_t.RichEdit1.Lines.Add("


Stager   (2003-01-21 22:08:00) [10]


> Пытался фокусировать через MDIChildren[index] - тоже не
> нашел!


Ну не знаю... У меня всю жизнь работает вот такая команда:
fmMain.MDIChildren[i].SetFocus;

где fmMain- окно-родитель.


Наверх

Титульная страница Поиск, карта сайта Написать письмо