Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
7-68095
kravchuk
2003-05-13 14:53
2003.07.21
Device sleep


3-67712
sndanil
2003-06-27 12:38
2003.07.21
IBX X.07


14-68018
EugeneK
2003-07-03 23:59
2003.07.21
Как отсылать сообщения в WinAmp


1-67802
Rel_
2003-07-09 13:17
2003.07.21
HexToBin


3-67711
Caesar
2003-06-27 13:23
2003.07.21
DBGrid




   Наверх