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

Вниз

Обработка событий   Найти похожие ветки 

 
guest0   (2003-07-07 07:14) [0]

Мастера ! Разъясните, пожалуйста, ситуацию.
В главной форме приложения mainForm в RunTime создается форма Form1.
В этой форме созданы объекты TAction, имеющие свои значения ShortCut.
Однако, после активизации формы Form1 события ShortCut игнорируются.
Почему эти события, возникающие на форме mainForm, не передаются в Form1 ?


 
Юрий Зотов ©   (2003-07-07 07:33) [1]

Уточните, как именно создается Form1.


 
guest0   (2003-07-07 07:54) [2]

Form1 создаается с помощью конструктора
create([владелец = mainForm], [parent = wincontrol формы mainForm])
у меня parent is mainForm.TabSheet.


 
Calm ©   (2003-07-07 09:13) [3]

Oх, о зачем инициализировать у свежесозданной формы своейство Parent?


 
guest0   (2003-07-07 09:24) [4]

Ну, вот такой я.
После активизации главной mainForm мне нужно в TabSheet активизировать RunTime-форму Form1. Содержание этой формы зависит от неких условий, поэтому ее нельзя активизировать сразу. В этой форме Form1 назначены свои ShortCut. Но они игнорируются во время работы. Можно, конечно, написать реакцию в mainForm на такие же события формы Form1 и вызывать Form1.Action, но тогда при изменении ShortCut в Form1.Action нужно менять и код в mainForm. Как бы сделать так, чтобы передать событие сразу в Form1 ?


 
Calm ©   (2003-07-07 09:56) [5]


Чего-то я не допонял :( Наверное, еще не проснулся :))
Это как понять "в TabSheet активизировать RunTime-форму Form1"?



 
guest0   (2003-07-07 10:03) [6]

2 Calm
Это я неточно объяснил.
Корявая фраза "в TabSheet активизировать RunTime-форму Form1" означает лишь, что mainForm.TabSheet является wincontrol для Form1. После создания Form1 расположена на mainForm.TabSheet (align = alClient).


 
guest0   (2003-07-07 13:29) [7]

Да, форма Form1 имеет спец. конструктор (наряду со стандартным).
Вот его код: (TFormTree это Form1)
constructor TFormTree.Create(AOwner: TComponent; AParent: TWinControl);
begin
FAsChild := True;
FWinParent := aParent;
inherited Create(AOwner);
end;

Поле FAsChild здесь несущественно, а аргумент AParent имеет тип TTabSheet. По коду ожидается, что я могу активизировать некую функциональность Form1 с помощью ShortCut (из Form1.Action).
Form1 принимает ввод с клавиатуры, за исключением своих ShortCut, - что мне и непонятно.


 
Юрий Зотов ©   (2003-07-08 00:39) [8]

Так я и думал...

Обработка ShortCut ведется на уровне Application. А Вы создаете Form1 так, что Application про нее ничего не знает - вот ничего и не обрабатывается.

Попробуйте назначить Application ее владельцем, может, и прокатит. А еще лучше - все же пересмотрите построение программы, потому что с таким подходом, как у Вас сейчас есть шанс наловиться багов.


 
guest0   (2003-07-08 06:34) [9]

2 Юрий Зотов.
Хорошо. Что-то прояснилось (как в голову ударило).
Попытаюсь защититься по поводу "все же пересмотрите построение программы, потому что с таким подходом, как у Вас сейчас есть шанс наловиться багов."
Form1 у меня - это некий универсальный визуализатор данных (MSSQL2000) с возможностью редактирования. На клиенте стартует одна стандартная форма, и, в зависимости от разных условий предлагаются к редактированию различные данные и с различным интерфейсом (в буквальном смысле внешнего вида).
Конкретно, Form1 - модуль, предназначенный именно для вставки в какой-либо TWinControl. Этим достигается некая универсальность со всеми недостатками.
Юрий Зотов, поделитись, пожалуйста, Вашими профессиональными сомнениями по поводу такого построения приложения (меня, кстати, тоже не устраивает то, что получается).


 
Юрий Зотов ©   (2003-07-08 11:45) [10]

Вместо форм используйте фреймы (см. TFrame). В среде Delphi cоздайте несколько фреймов с нужными наборами компонентов. Визуально это выглядит так же, как и проектирование формы. И в run-time, в зависимости от условий помещайте на TabSheet нужный фрейм, вот и все. Все фреймы можно отнаследовать от общего предка, в который выносится общий для них код.



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

Текущий архив: 2003.07.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
1-67840
AndrewVolkov
2003-07-07 18:09
2003.07.21
И снова PopupMenu ;-((


14-68056
_Alex_
2003-07-03 21:03
2003.07.21
Delphi 7 и TServerSocket


1-67819
Mishenka
2003-07-09 19:23
2003.07.21
Проблемы с DateTimePicker...


14-68037
NikotiN
2003-07-04 20:48
2003.07.21
к мастерам


4-68119
QUE
2003-05-18 16:06
2003.07.21
TTS_BALLOON - как с ним работать