Главная страница
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.007 c
15-1258288584
GrayFace
2009-11-15 15:36
2010.01.24
К теме "Убойная статистика"


1-1234095719
dreamse
2009-02-08 15:21
2010.01.24
Подскажите, какое событие возникает


2-1259921265
Alexxx
2009-12-04 13:07
2010.01.24
indy & 503


2-1259714074
Восьмой
2009-12-02 03:34
2010.01.24
Латышский язык


2-1259304661
nevermind
2009-11-27 09:51
2010.01.24
Запуск приложения несколько раз