Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про MDI   Найти похожие ветки 

 
Smok_er   (2003-01-05 18:13) [0]

Господа, как можно определить индекс текущего MDI-окна?
Пробую так:

function TfmMain.ActiveChildIndex: Integer;
var
i: Integer;
begin
Result := -1;
for i := 0 to MDIChildCount - 1 do
if ActiveMDIChild = MDIChildren[i] then
begin
Result := i;
Exit;
end;
end;


Данная функция вызывается при активации дочернего окна. Пробовал передавать в качестве параметра в функцию саму форму, но все напрасно. Функция всегда возвращает ноль.

Может есть какие-то идеи?


 
Skier   (2003-01-05 18:24) [1]

>Smok_er
Попробуй так :
AForm - форма, которая активизируется...

function TfmMain.ActiveChildIndex(AForm : TForm): Integer;
var
i: Integer;
begin
Result := -1;
if AForm = nil then Exit;
for i := 0 to MDIChildCount - 1 do
if AForm = MDIChildren[i] then
begin
Result := i;
Exit;
end;
end;


 
Skier   (2003-01-05 18:27) [2]


> . Функция всегда возвращает ноль.

Кстати, если у тебя кол-во форм = 1 (MDIChildCount = 1), то
твоя Функция работает правильно.


 
Smok_er   (2003-01-05 18:32) [3]

>>Пробовал передавать в качестве параметра в функцию саму форму, но все напрасно

Не работает, как я уже писал.

Передавал следующим образом:

procedure TfmBrowser.FormActivate(Sender: TObject);
begin
fmMain.Label1.Caption := IntToStr(fmMain.ActiveChildIndex(Self));
end;


Вместо Self пробовал имя формы - не работает и всегда возвращает ноль.


 
Smok_er   (2003-01-05 18:34) [4]

>>Кстати, если у тебя кол-во форм = 1 (MDIChildCount = 1), то
>>твоя Функция работает правильно.

При одной форме это нормально, но у меня не одна. Событие срабатывает при смене активного дочернего окна.


 
Skier   (2003-01-05 18:49) [5]

property MDIChildren[I: Integer]: TForm;

I is the index of the child form to access. The order of MDI children changes as different MDI forms are activated. Initially, forms are listed in creation order, with new forms being added to the end of the array. Whenever an MDI child is activated, however, it moves to the front of the list. Thus, use I to index over all forms in the array, but not to refer to a specific form.


 
Smok_er   (2003-01-05 21:34) [6]

Спасибо!
Буду искать другое решение


 
dim-   (2003-01-06 02:50) [7]

Пробуй проверять заголовок формы, если у тебя нет одинаковых заголовков то будет работать
Function getWin(capt:string;view:byte):boolean;
Var i:integer;
Begin
result:=false;
for i:=0 to MainForm.MDIChildCount do
if MainForm.MDIChildren[i].Caption=capt then begin
result:=true;
if view=1 then MainForm.MDIChildren[i].BringToFront;
end;
end;



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

Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
14-49291
TTCustomDelphiMaster
2002-12-27 17:36
2003.01.16
Планирование проектов


14-49249
gsu
2002-12-26 20:15
2003.01.16
А почему ?


3-48948
ИБМ
2002-12-23 10:51
2003.01.16
Для каждого клента должен быть заказ


1-49078
gorv
2003-01-04 22:57
2003.01.16
Sohranenie TLIST v file


3-48893
xenon
2002-12-20 09:54
2003.01.16
Передача параметра в MDIChild





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский