Вниз
Скачать: CL | DM;

Как сделать MDIChild окно активным?   Найти похожие ветки 

← →
Дмитрий Попов   (2003-01-21 21:45) [0]

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

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

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

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

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

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


← →
Stager   (2003-01-21 22:08) [1]


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


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

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


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

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

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


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

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


← →
Stager   (2003-01-21 23:12) [4]

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

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-22 01:01) [5]

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


← →
mrcat ©   (2003-01-22 02:05) [6]

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


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

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



← →
smok_er   (2003-01-22 10:02) [8]

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


← →
smok_er   (2003-01-22 10:15) [9]

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

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


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

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


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


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

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...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
1-96743
Goro
2003-01-18 01:28
2003.01.30
Help! (диплом под угрозой)


1-96740
Andrey V.
2003-01-22 10:30
2003.01.30
FreeReport & мышинное колесо


14-96978
patrol
2003-01-10 18:32
2003.01.30
Ссылка на


1-96863
Anton
2003-01-21 10:29
2003.01.30
что такое Application.ProcessMessages;


1-96647
bvn123
2003-01-21 12:32
2003.01.30
Будут проблемы? GetMem(Buffer, FileSize); FileSize>1M;




   Наверх