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

Вниз

Как связать Node`ы в TreeView с MDIChild окнами?   Найти похожие ветки 

 
denik   (2004-02-25 10:09) [0]

Когда одно из MDIChild окон становится активным, выделяется соответствующий ему Node.
Помогите пожалуйста.


 
Skier   (2004-02-25 10:13) [1]

1) ActiveForm.Tag := Integer(Node);
2) Node := TTreeNode(ActiveForm.Tag);
3) Node.Selected := True;


 
Юрий Зотов   (2004-02-25 10:14) [2]

Node имеет свойство Data. Это указатель и он вполне может указывать на связанную с ним форму. Остальное просто - в цикле проходим по дереву, находим Node у которой Data ссылается на ActiveMDIChild и делаем ему Selected. Все.


 
denik   (2004-02-25 10:46) [3]

> Юрий Зотов ©

А как проверить как Node.Data ссылается на ActiveMDIChild?
Указатель на формы у меня RecPtr.FName


 
vl_chel   (2004-02-25 11:27) [4]

В класс окна добавить указатель на ноду и проверять


 
denik   (2004-02-25 12:22) [5]

Как узнать адрес самого ActiveMDIChild?


 
denik   (2004-02-25 12:23) [6]

Как узнать адрес самого ActiveMDIChild?


 
denik   (2004-02-25 12:33) [7]

Вот пишу:

for i :=0 to tree.Items.Count-1 do
begin
if Tree.Items.Item[i].Data = ?...? then
begin
Tree.Items.Item[i].Selected
end;
end;

Что в ?...? здесь поставить.


 
Тимохов   (2004-02-25 12:36) [8]

поставь ActiveMDIChild


 
denik   (2004-02-25 13:38) [9]

> Тимохов ©

значение ActiveMDIChild почемуто равно nil


 
Тимохов   (2004-02-25 13:42) [10]

У кого ты вызываешь ActiveMDIChild?
Т.е. у какого объекта вызываешь этот метод?


 
denik   (2004-02-25 13:52) [11]

У MainForm.ActiveMDIChild


 
Тимохов   (2004-02-25 13:57) [12]

У тебя MainForm является FormStyle = fsMDIForm?


 
denik   (2004-02-25 14:04) [13]

Блин.
Пишу.
for i :=0 to Tree.Items.Count-1 do
begin
if Tree.Items.Item[i].Data = MainForm.ActiveMDIChild then
begin
...
end;
end;

И он показывает что ВСЕ Data равны MainForm.ActiveMDIChild


 
Тимохов   (2004-02-25 14:07) [14]

Ответ на 12 я так и не получил.

Допустим, что FormStyle <> fsMDIForm в этом случае ActiveMdiChild всегда = nil. Допускаем, что у Вас все Data также равны nil. В этом случае получаем описанное Вами поведение.

Допустим, что FormStyle = fsMDIForm. Тогда описанное вами поведение возможно, только если все Data имеют одинаковое значение, равное ActiveMdiChild.

Третьего не дано.


 
denik   (2004-02-25 14:27) [15]

Все спасибо большое. Получилось.


 
Тимохов   (2004-02-25 14:33) [16]

В чем ошибка то была?


 
denik   (2004-02-25 14:36) [17]

Всё перепутал. Когда Node создается я указывал
CurNode := Tree.Items.AddObject(nil, frmObject.Caption, RecPtr);
а надо
CurNode := Tree.Items.AddObject(nil, frmObject.Caption,RecPtr.PName);


 
denik   (2004-02-25 14:37) [18]

И еще вопрос такой.
Каким образом мне при нажатии на Node активировать окно?


 
denik   (2004-02-25 14:38) [19]

Я пишу:
BringWindowToTop(PRec(Tree.Selected.Data).PName.Handle);

А оно не хочет.


 
Тимохов   (2004-02-25 14:59) [20]

Еще раз, что такое у Вас PName?


 
denik   (2004-02-25 15:02) [21]

New(RecPtr);
RecPtr.PName := frmObject;


 
denik   (2004-02-25 15:04) [22]

где frmObject: TForm


 
Тимохов   (2004-02-25 15:06) [23]

Воспользуйся BringToFront.


 
denik   (2004-02-25 15:20) [24]

Зная адрес хранящийся в Date, как узнать Handl.


 
denik   (2004-02-25 15:29) [25]

Получилось.
Но как то нелепо:
for i :=0 to MDIChildCount-1 do
begin
if Tree.Selected.Data = MDIChildren[i] then
begin
BringWindowToTop(MDIChildren[i].Handle);
end;

end;
Опять циклы. А без них нельзя?


 
Тимохов   (2004-02-25 15:34) [26]

Зачем тебе обязательно handle. Вызови BringToFront у формы.


 
denik   (2004-02-25 15:47) [27]

PMyRec(Tree.Selected.Data).PName.BringToFront;

Он мне ошибку выдает!


 
Тимохов   (2004-02-25 15:50) [28]


> Он мне ошибку выдает!

какую?


 
denik   (2004-02-25 15:54) [29]

Access violation at adress


 
Тимохов   (2004-02-25 16:08) [30]

Значит PName у тебя "битый", т.е. не ссылается на форму.
Может быть, конечно, что у тебя какая-то левая работа идет у формы, например, в событии OnActivate. Если у тебя нет таких событий, то однозначно ссылка "битая". Ищи.


 
Erik   (2004-02-25 17:14) [31]

Криво у тебя все написано. Сделай так
for i :=0 to MDIChildCount-1 do
begin
if Tree.Selected.Caption = MDIChildren[i].Caption then
begin
CurForm := MDIChildren[i];
BringWindowToTop(CurForm.Handle);
end;

И Далее работай с CurForm. А свойством дата тебе лучше непользоватся.


 
denik   (2004-02-26 20:19) [32]

> Erik ©
> А свойством дата тебе лучше непользоватся.

Почему не пользоваться?

У меня всё получилось и без циклов:
PRec(Tree.Selected.Data).PName.BringToFront;

> Тимохов ©
Спасибо!



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

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

Наверх





Память: 0.51 MB
Время: 0.009 c
1-25796
Ш-К
2004-02-26 09:40
2004.03.09
Работа с классами


3-25705
Belkova
2004-02-10 16:58
2004.03.09
Уважаемые мастера Delphi! Подскажите, как организовать цикл по вы


1-25803
iluxa
2004-02-25 13:53
2004.03.09
Помогите разобраться в DLL


6-25844
asdqwer
2003-12-29 18:19
2004.03.09
WebBrowser.Document.All.Tags


14-25867
Nous Mellon
2004-02-05 13:30
2004.03.09
О DM-клиенте к любимому форуму





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский