![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с mdi окнами. [D7]
Tria © (2004-11-24 10:37:00)Выглядит следующим образом. Есть mdi-приложение. В нем открыто mdi child окно (1) с деревом свойств. На форме (1) есть action с shortcut на клавиши Delete. При двойном щелчке на этом дереве (или выбора пункта меню) открывается еще одно child окно (2). Так вот, при открытии этого окна (2) возникают проблемы:
1. При редактировании текста в TEdit клавиша Del не функционирует, событие нажатия этой клавиши не доходит до объекта (OnKeyDown не срабатывает).
2. При открытии окна (2) по двойному щелчку на дереве в окне (1) второй щелчек мышки передается в окно (2) и срабатывает соответствующее событие. При этом открытие окна (2) происходит в событии OnDblClick дерева окна (1).
Может кто подскажет, как с этим бороться?
tria (2004-11-24 14:37:00) [1]Неужели нет ни одной идеи?
Никто не сталкивался с такими проблемами?
tria (2004-11-24 11:25:00) [2]Если окно (2) открывать модально, то все проблемы исчезают. (вылазят другие, связанные с тем, что код не рассчитан на работу с модальными окнами).
tria (2004-11-24 11:23:00) [3]Код в окне (1) по открытию окна (2). Вызывается по action с shortcut Enter и по OnDblClick дерева окна (1).
//строки,определяют какое окно открывать
....
//Нашли, что это окно
Else If p is TPerech Then begin
TfmEditPerechn.CreateEdit(self,pAgr);
end
//В окне (2) процедура CreateEdit(self,pAgr);
constructor TfmEditPerechn.CreateEdit(Owner: TComponent;pn:TAgregateObj);
var capt:string;
begin
If Not Assigned(pn) Then begin
ShowMessage('Передали nil!'); Halt;
end;
Create(Owner);
ThisNew:=False;
If pn is TRegister Then begin
Self.pn:=TRegister.Create;
(Self.pn as TRegister).Assign(Pointer(pn));
end
Else
Case pn.Id of
10..69: begin //перечисления
Self.pn:=TPerech.Create;
(Self.pn as TPerech).Assign(Pointer(pn));
end;
70..159:begin// - справочники
self.pn:=TSprav.Create();
(self.pn as TSprav).Assign(Pointer(pn));
end;
160..255:begin// - документы
self.pn:=TDoc.Create();
(self.pn as TDoc).Assign(Pointer(pn));
end;
end;//Case
capt:=Caption;
ObjToForm(pn);
Caption:=Capt+pn.Name;
btOK.Top:=Height-btOK.Height-27;
btOK.Left:=Width-btOK.Width-10;
OrderTabByTopLeft(Self);
end;
TUser (2004-11-24 10:47:00) [4]Покажи код