Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему не работает функция SetFocus?

9.3K
14 марта 2005 года
mic2004
3 / / 19.01.2005
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:

procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;

Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?
301
15 марта 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by mic2004
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:

procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;

Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?


По-моему SetFocus работает только с дочерними окнами и только твоего приложения. Поиграй с SetWindowPos.

302
15 марта 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by mic2004
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:

procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;

Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?


SetActiveWindow(H) не пробовал?

8.3K
16 марта 2005 года
p01
8 / / 21.10.2004
ИМХО, для связи с чужими приложениями лучше использовать почту. :)

Если я правильно понял вопрос, то это поможет:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y: HWND;
begin
  x:=findwindow('класс','текст');
  y:=findwindowex(x,0,'класс','текст');

  if (x<>0) and (y<>0)
    SendMessage(y,WM_SETFOCUS,0,0)
  else
    Showmessage('cannot lock.');
end;
8.3K
16 марта 2005 года
p01
8 / / 21.10.2004
А если просто нужно показать другое окно, думаю, подойдет Setforegroundwindow(myHWND);
Окно, конечно, может и не показаться, но в таскбаре по-любому даст о себе знать.
9.3K
16 марта 2005 года
mic2004
3 / / 19.01.2005
Windows.SetForegroundWindow(H) передает фокус, только если окно открыто. если свернуто в значек, то можно использовать ShowWindow? она разворачивает окно и передает ему фокус. но только если окно уже открыто, то она не передает ему фокус. В общем разобрался я, всем спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог