Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с 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]

Покажи код


Наверх

Титульная страница Поиск, карта сайта Написать письмо