![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Неактивная форма как Виртуальная клавиатура Windows [WinXP]
v1keeee © (2009-02-14 01:01:00)Уважаемые! Есть проблемка: пишу для себя программку - тулбар для работы с текстовыми данными, необходимо чтобы форма не получала фокус ввода так, как это делает "Виртуальная клавиатура" Windows. Т.е чтобы при нажатии кнопки на форме активным остовалось окно приграммы с которой работаю. Нашел решение проблемы так (привожу пример с окном "Блокнота"):
procedure TForm1.Button1Click(Sender: TObject);
begin
//делаю активным окно "блокнота"
SetForeGroundWindow(findwindow(nil,'Безымянный - Блокнот'));
//посылаю ему сообщение о нажатии клавишы "Enter"
postmessage(findwindowEX(findwindow('Notepad','Безымянный - Блокнот'),findwindow('edit',nil),'Edit',nil),WM_KEYUP,13,0);
end;
в таком виде все работает, НОвизуально видно что сперва активным становится окно моей формы, а потом уже "Блокнота".
Делал по другому:
//по событию таймера с интервалом 25 мсек.
//постоянно держу активным окошко "Блокнота"
SetForeGroundWindow(findwindow(nil,'Безымянный - Блокнот'));
и все равно эффект такой же как в первом примере :(.
Хотелось бы реализовать как в "Виртуальной клавиатуре" Windows
Кто что думает по этому поводу?
v1keeee (2009-02-14 10:34:00) [1]А мне и не нужен фокус ввода кроме кнопок на форме ничего нет :).
Чесно скажу вчера сидел на 20 страницах гугля пересмотрел каждую ссылку по запросам: "Неактивное окно в Delphi" и "форма не получает фокус ввода как виртуальная клавиатура Widows" так ничего толкового и ненарыл :( а про стили окна как то даже и не подумал (ибо не знал). Поэтому еще раз благодарю :).
Игорь (2009-02-14 10:22:00) [2]
> v1keeee (14.02.09 10:06) [4]
Надеюсь ты понимаешь что с этим возникнет много проблемм, например компоненты на форме не будут получать фокус ввода клавиатуры, scrollbar бары не будут реагировать и т.д.
v1keeee (2009-02-14 10:06:00) [3]Уважаемый Игорь огромное спасибо за совет! вот второй способ применил и это именно то что мне нада! :)
Игорь (2009-02-14 09:35:00) [4]У меня у формы BorderStyle = bsNone и заголовок окна рисую сам, а так то же надо что то с этим делать
Игорь (2009-02-14 09:33:00) [5]Я вообще делаю так
var
Draging: Boolean;
X0, Y0: integer;
FormCreate
SetWindowLong(Handle, GWL_EXSTYLE, WS_DISABLED);
FormMouseDown
Draging := True;
X0 := X;
Y0 := Y;
FormMouseMove
if Draging = True then
begin
Left := Left + X - X0;
Top := Top + Y - Y0;
end;
FormMouseUp
Draging := False;
Ну и FormResize ручками тоже делаю
Eraser (2009-02-14 01:48:00) [6]> [0] v1keeee (14.02.09 01:01)
нужно добавить окну стиль WS_EX_NOACTIVATE.
удобнее всего это сделать в CreateParams после Inherited примерно так
Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;