Текущий архив: 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