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

Вниз

Неактивная форма как Виртуальная клавиатура Windows   Найти похожие ветки 

 
v1keeee   (2009-02-14 01:01) [0]

Уважаемые! Есть проблемка: пишу для себя программку - тулбар для работы с текстовыми данными, необходимо чтобы форма не получала фокус ввода так, как это делает "Виртуальная клавиатура" 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
Кто что думает по этому поводу?


 
Eraser ©   (2009-02-14 01:48) [1]

> [0] v1keeee   (14.02.09 01:01)

нужно добавить окну стиль WS_EX_NOACTIVATE.

удобнее всего это сделать в CreateParams после Inherited примерно так
Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;


 
Игорь ©   (2009-02-14 09:33) [2]

Я вообще делаю так

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 ручками тоже делаю


 
Игорь ©   (2009-02-14 09:35) [3]

У меня у формы BorderStyle = bsNone и заголовок окна рисую сам, а так то же надо что то с этим делать


 
v1keeee   (2009-02-14 10:06) [4]

Уважаемый Игорь огромное спасибо за совет! вот второй способ применил и это именно то что мне нада! :)


 
Игорь ©   (2009-02-14 10:22) [5]


> v1keeee   (14.02.09 10:06) [4]


Надеюсь ты понимаешь что с этим возникнет много проблемм, например компоненты на форме не будут получать фокус ввода клавиатуры, scrollbar бары не будут реагировать и т.д.


 
v1keeee   (2009-02-14 10:34) [6]

А мне и не нужен фокус ввода кроме кнопок на форме ничего нет :).
Чесно скажу вчера сидел на 20 страницах гугля пересмотрел каждую ссылку по запросам: "Неактивное окно в Delphi" и "форма не получает фокус ввода как виртуальная клавиатура Widows" так ничего толкового и ненарыл :( а про стили окна как то даже и не подумал (ибо не знал). Поэтому еще раз благодарю :).



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1259755341
Andjey
2009-12-02 15:02
2010.01.24
Получение хэндла потока


11-1160629902
Grademax
2006-10-12 09:11
2010.01.24
Как програмно остановить USB-Flash?


8-1202666850
WeReWoLf
2008-02-10 21:07
2010.01.24
Что сделать чтобы DELPHI нарисовала график?


2-1260046357
Тимофей123
2009-12-05 23:52
2010.01.24
Обращение к форме по имени класса и идентификатору


2-1259848543
kate158
2009-12-03 16:55
2010.01.24
добавление д-х из excel на пересечении строки и столбца