Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Как связать 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
1-25816
Galerus
2004-02-25 20:39
2004.03.09
TStringGrid


1-25735
Сергей Петров
2004-02-27 01:26
2004.03.09
Нехватка ресурсов под win98


14-25942
Empleado
2004-02-17 12:46
2004.03.09
SQL Query


6-25840
Skyhawk
2003-12-28 17:01
2004.03.09
COM сервер


1-25759
Ross
2004-02-26 16:38
2004.03.09
код ординарной кавычки