Форум: "Основная";
Текущий архив: 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