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

Вниз

Форма в ScrollBox и OnKeyDown   Найти похожие ветки 

 
P.N.P. ©   (2005-05-26 13:52) [0]

Создаю форму в ScrollBox:

 NewForm:=TNewForm.CreateParented(ScrollBox.Handle);

Форма нормально создается, но событие OnKeyDown у нее напрочь несрабатывает.
Вопрос:
Кто в моем случае занимается обработкой сообщений с клавиатуры?
Можно ли как-то обойтись без хука?


 
Bel ©   (2005-05-26 14:14) [1]

Вообще то CreateParented рекомендуется использовать для не-VCL окон. Лучше использовать
NewForm:=TNewForm.Create(Application);
NewForm.Parent := ScrollBox;


 
P.N.P. ©   (2005-05-26 14:17) [2]

>Bel ©   (26.05.05 14:14) [1]
В этом случае форма не будет находиться внутри ScrollBox.


 
TUser ©   (2005-05-26 14:20) [3]

А зачем ее туда? Для таких вещей придуманы фреймы.


 
Johnmen ©   (2005-05-26 14:25) [4]

>P.N.P. ©   (26.05.05 14:17) [2]
>В этом случае форма не будет находиться внутри ScrollBox.

Будет.
А ты почему решил, что не будет?


 
P.N.P. ©   (2005-05-26 14:28) [5]

>Johnmen ©   (26.05.05 14:25) [4]
>Будет.
Нет.
Изначально я так и пытался - NewForm:=TNewForm.Create(Application)


 
Bel ©   (2005-05-26 14:30) [6]

> Изначально я так и пытался - NewForm:=TNewForm.Create(Application)

А парентом ей установил скроллбокс?


 
P.N.P. ©   (2005-05-26 14:35) [7]

>Bel ©   (26.05.05 14:30) [6]
Да.
Дело в том, что форма изначально невидима,
добавил в OnShow Parent := ScrollBox и форма теперь
все-таки внутри скроллбокса. Однако всеравно, нажатие
клавиш невоспринимает.


 
Bel ©   (2005-05-26 14:37) [8]

> Однако всеравно, нажатие клавиш невоспринимает.

Кто не воспринимает? Форма или контролы на ней? KeyPreview правильно установлено?


 
P.N.P. ©   (2005-05-26 14:40) [9]

>Bel ©   (26.05.05 14:37) [8]
Форма.
KeyPreview:=true;


 
-=XP=- ©   (2005-05-26 14:43) [10]

Единственное объяснение сему факту - наличие заголовка окна. Установите BorderStyle = bsNone - и все заработает.
Причину пока не выяснил.

Поведение такое, будто бы оно, это окно, находится вне контекста Parent окна. И по Tab"у на него не переходит фокус.

При включении заголовка - перестает ловить левый клик мыши.
А все остальное - работает так, как надо. Попробуйте кликнуть правой кнопкой мыши на любом контроле такого (с заголовокм) окна - оно поймает фокус и будет нормально работать. Можно фокус и через SetFocus устанавливать.


 
P.N.P. ©   (2005-05-26 14:57) [11]

>-=XP=- ©   (26.05.05 14:43) [10]
Нет, тут наличие заголовка не играет никакой роли.
(Если не считать того, что заголовок окна в "Неактивном" состоянии)
Клики мышой проходят нормально, да и вобще,
все конролы на форме работают как надо, беспокоит только
обработка нажатий клавиш самой формой.


 
P.N.P. ©   (2005-05-26 15:00) [12]

Хотя не все в порядке -  контекстное меню у того же Edit-а при
правом клике не вылезает :(
Что за беда? Как тогда правильно форму в скролбокс вставить?


 
Bel ©   (2005-05-26 15:10) [13]

Здесь обработкой клавиш занимается форма-родитель. У неё надо устанавливать KeyPreview и обрабатывать клавиши.


 
Bel ©   (2005-05-26 15:11) [14]

> контекстное меню у того же Edit-а при правом клике не вылезает

У меня вылезает.


 
-=XP=- ©   (2005-05-26 15:12) [15]

Все это странно.
Приведите, пожалуйста, код.


 
P.N.P. ©   (2005-05-26 15:23) [16]

Вот, в качестве примера - 2 формы, в *.dpr создается только
Form1, Form2 создается динамически.
На Form1 расположен TScrollBox, Align:=alClient;
На Form2 - только один TEdit.

procedure TForm1.FormCreate(Sender: TObject);
begin
 Form2:=TForm2.Create(Application);
 Form2.Parent:=ScrollBox1;
 Form2.SetBounds(10,10,200,200);
 Form2.Visible:=True;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Form2.Free;
end;


 
Bel ©   (2005-05-26 15:36) [17]

У меня с этим кодом все работает. И меню выскакивает, и KeyDown срабатывает (в Form1).


 
P.N.P. ©   (2005-05-26 15:47) [18]

>Bel ©   (26.05.05 15:36) [17]
Да, на Form1 KeyDown обрабатывается, это радует :)
Но системное попапменю (там где "Выделить все", "Копировать" и т.п.)
в Edit (который на Form2) все же не вылезает.
В принципе вопрос можно снять.


 
Bel ©   (2005-05-26 16:00) [19]

У меня все работает, меню вызывается.
Попробуй сделать все это на чистом проекте. Может быть еще какая фигня мешает.



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

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

Наверх




Память: 0.51 MB
Время: 0.026 c
3-1115751825
Vir
2005-05-10 23:03
2005.06.14
Счет фактура


14-1117126429
Uncle Archi
2005-05-26 20:53
2005.06.14
Глюк в МФ 1.2


3-1115272204
sashuly
2005-05-05 09:50
2005.06.14
поиск в подчиненной таблице


8-1108485618
_PG_
2005-02-15 19:40
2005.06.14
*.avi нужно сделать не доступным


1-1116994888
Denizzz
2005-05-25 08:21
2005.06.14
Строка из текстового файла