Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизФорма в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c