Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
1-1117180990
pavel_guzhanov
2005-05-27 12:03
2005.06.14
создание и уничтожение компонентов в Run-Time


1-1117225715
Димастый
2005-05-28 00:28
2005.06.14
Иконка своего компонента


8-1109614208
Tirex
2005-02-28 21:10
2005.06.14
png с альфа каналом на кнопке toolbar а


14-1116945369
DiamondShark
2005-05-24 18:36
2005.06.14
Лучше день потерять, потом за пять минут долететь?


8-1108917860
nes
2005-02-20 19:44
2005.06.14
Увеличение картинки и её детализация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский