Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
8-1202531881
dreamse
2008-02-09 07:38
2010.01.24
Вопрос про достижение графического эффекта.


1-1233591166
Wadimka
2009-02-02 19:12
2010.01.24
Как защитить свою прогу? вернее, через сервер


2-1251710046
Zalm
2009-08-31 13:14
2010.01.24
TIdCmdTCPServer


4-1227466318
demon
2008-11-23 21:51
2010.01.24
Положение рабочей части окна на экране


11-1210657161
MM_ASH
2008-05-13 09:39
2010.01.24
VMT




   Наверх