Delphi setfocus не работает

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

Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию 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;

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

5 ответов

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.

Источник

Не работает setfocus на Labelededit

Я сейчас в своей курсовой работе наткнулся на проблем. Хотел сделать переход по строкам labelededit на интер, но при нажатии на него он прожимает кнопку которая размещена на форме. Подскажите как пофиксить это.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Почему не работает функция SetFocus?
Здравствуйте. У меня есть вопрос. Почему не работает функция SetFocus? Заранее спасибо за ответ.

Не работает SetFocus после MessageBox
Пишу на C++ Builder 2010. Проблема в том, что после вызова функции MessageBox, курсор должен.

Нелогично работает SetFocus для TextBox в приложенном примере
Всем доброго времени суток. На форме есть три TextBox-а: в первых 2-х вводятся числа, а в 3-м.

Читайте также:  Как настроить нфс самсунг м31

Решение

У меня Делфи7, всё работает с кодом из #1, если выполняется совет в #2.

Добавлено через 1 минуту
А кстати почему не KeyDown?

PopupMenu и LabeledEdit
Доброго времени суток ребзи. Задался вопросом, как сделать следующую вещь. Имеется несколько.

Ошибка с LabeledEdit
Когда нажимаю на кнопку,то в labelededit должна отобразиться информация,но выдает ошибку. Когда.

Размещение надписи в LabeledEdit
Как сделать чтобы размещение надписи в LabeledEdit находилось справа от поля ввода. в Builder .

компонент LabeledEdit и Excell
Всем привет! Вообщем вопрос следующий. Хочу сделать в Delphi программулину по работе. Смысл.

Источник

Delphi setfocus не работает

Эх, Виктор, кто же помнит темы столетней давности . так что специально для Вас (цените) её пришлось всё-таки найти и процитировать ту часть, где говорится о различных результатах при использовании свойств .Value и .Text об’екта MSForms.TextBox :

Представим, что у нас имеется UserForm, на котором находится TextBox1 и CommandButton1

Теперь введите число 9 и нажмите на кнопку … и Вашему удивлению не будет предела. Однако этого бага можно легко избежать, если использовать что-то типа :

Важно На самом деле, конечно можно избежать этой ошибки и при этом не использовать дополнительную переменную, для этого достаточно заменить свойство .Text на свойство .Value, но учитывая, что большинство людей используют именно свойство .Text этот пример достаточно актуален.

P.S. Вот они математики, научили их на наши головы, что от перемены мест слагаемых сумма не менятся, и теперь им что pashulka что pahsulka всё едино .

Виктор, А Вы удалите четвёртое текстовое поле и повторите тест, а если серьёзно, то в качестве временного решения могу предложить следующее :

Уважаемый Виктор, В случае с несколькими текстовыми полями Вы также можете использовать общую процедуру обработки, например :

Читайте также:  Как отремонтировать отбойный молоток пневматический

Вы правильно поняли мой замысел(идею), а если я правильно понял Ваш вопрос, то для того, чтобы выполнять разные действия для разных текстовых полей, можно воспользоваться управляющими инструкциями, например, Select Case (см.ниже) или прописать свои инструкции непосредственно в теле каждого события.

А что касается моего первоначального варианта, то его кастрация с Вашей стороны должна привести к тому, что все инструкции будут выполняться дважды, т.е. если попытаться провести некую аналогию с событиями рабочего листа, то Вы хотите использовать :

я же предлагаю следующее (Intersect оставим в покое дабы не акцентировать внимание на ненужных, в данном примере, деталях) :

Источник

Delphi setfocus не работает

Application.Restore
Application.BringToFront
SetFocus
SetForegroundWindow(. )
SetActiveWindow(. )
SendMessage(. WM_SETFOCUS. )

Всё выше перечисленное не помогает!

← →
Song ( 2002-06-06 08:41 ) [1]

Пошлите WM_SETFOCUS не на Application а на MainForm

← →
Solver ( 2002-06-06 14:40 ) [2]

Я и не посылаю на Application, посылаю на по HWND главной формы — не работает!

← →
Song ( 2002-06-06 14:43 ) [3]

Дык чужому приложению что ли ?

← →
esVer ( 2002-06-06 14:50 ) [4]

Если не ошибаюсь, WM_KILLFOCUS посылается окну ДО того, как оно потеряет фокус. Т.е. как бы предупреждение, а потому и не работает.

2esVer Так я тоже так думал. Но если с определённым интервалом посылать, не обрабатывая WM_KILLFOCUS — тоже нет эффекта!

← →
Song ( 2002-06-06 14:56 ) [6]

Фокус может иметь форма или любой объект на ней. Так понятней ?
Вы думаете HWND имеет только Application ?

← →
Solver ( 2002-06-06 14:59 ) [7]

2Song PostMessage(Form1.Handle,WM_SETFOCUS,0,0) — не работает, так понятней?

← →
Song ( 2002-06-06 15:06 ) [8]

← →
Solver ( 2002-06-06 15:17 ) [9]

тоже, я же писал!

А код ваш поглядеть можно ?

← →
Solver ( 2002-06-06 15:26 ) [11]

Читайте также:  Soundmax магнитола как настроить часы

type
TForm1 = class(TForm)
private
Procedure DetKillFocus(var MSG : TMessage ) ; message WM_KillFocus ;

procedure TForm1.DetKillFocus(var MSG: TMessage);
begin
SetForegroundWindow(Form1.Handle) ;
// Application.Restore ;
// Application.BringToFront ;
PostMessage(Handle,Wm_SetFocus,0,0) ;
end;

← →
Игорь Шевченко ( 2002-06-06 15:30 ) [12]

← →
Solver ( 2002-06-06 15:34 ) [13]

Я даже в вершину очереди «вставлял» сообщение.
2Игорь Шевченко Не работает.

← →
Игорь Шевченко ( 2002-06-06 15:44 ) [14]

procedure TForm2.WMKillFocus(var Message: TWMKillFocus);
begin
Message.Result := 0;
SetActiveWindow(Handle);
end;

Ноль реакции для главного окна.

← →
Игорь Шевченко ( 2002-06-06 16:18 ) [16]

А для главного окна надо не WM_KILLFOCUS, а WM_ACTIVATEAPP

Источник

Сделать активным компонент

Доброго времени суток.
Сделать активным компонент на форме понятно как. Есть другая ситуация.
На форме положен
pcProg: TPageControl;
На его страницы выкладывается фрейм TfrUn = class(TFrame) с набором TEdit
TfrUn = class(TFrame)
edX1: TEdit;
edX2: TEdit;
.

Делаю активным конкретный TEdit:
TfrUn(pcProg.ActivePage.Controls[0]).edX1.SetFocus; Проблем не возникает.

Проблема:
Программа ищет Sub: string; в эдитах, эдит в котором совпадение надо сделать активным.
Имя нужного эдита заношу в NamComp := ‘edX1’
Вариант: TfrUn(pcProg.ActivePage.Controls[0]).FindComponent(NamComp).SetFocus; не работает. Ошибка.
Вариант: TfrUn(pcProg.ActivePage.Controls[0]).(FindComponent(NamComp) as TEdit).SetFocus; тоже ошибка.
Или может есть другой способ активировать нужный компонент?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Сделать окно под мышкой активным
Есть список wnd, при наведении мышки на окно из этого списка, оно должно стать активным. Делаю.

Можно ли в компоненте DBMemo текст ссылки сделать активным?
Можно ли в компоненте DBMemo текст ссылки сделать активным? Хотелось бы ,чтобы при клике по тексту.

Сделать так, чтобы при нажатии на button Edit становился активным
Хочу сделать так чтобы при нажатии на button Edit становился активным. Edit1.Enabled:=True(Missing.

Калькулятор: после нажатия на кнопку знака действия сделать edit ‘активным’
Добрый вечер.Я в делфи новичок.Создал простенький калькулятор на 4 действия(+-/*).Я ввожу первой.

Источник

Оцените статью