Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Добраться через Handle формы до какого-либо CONTROLа

Delphi , Программа и Интерфейс , Приложения чужие

Добраться через Handle формы до какого-либо CONTROLа

Оформил: DeeCo

Пример: как, имея HANDLE окна, добавить запись в EditBox, находящемуся в этом окне?

Ответ
function ChangeWndFirstEditText(Wnd: HWND; const Text: string):
  boolean;
var
  EditWnd: HWND;
begin
  Result := False;
  EditWnd := FindWindowEx(Wnd, 0,
    'EDIT', nil);
  if EditWnd = 0 then
    exit; // edit not found
  Result := SendMessage(EditWnd, WM_SETTEXT, 0, Integer(PChar(Text))) <> 0;
end;
// Из конференции Expert_FAQ

What a great question!

Код, который вы предоставили, является на примере Delphi и демонстрирует использование функции FindWindowEx для поиска редактируемого контрола (контрола типа 'EDIT') в окне, указанном его handle (Wnd). После обнаружения использует функцию SendMessage для установки текста этого редактируемого контрола.

Вот разбивка кода:

  1. Процедура ChangeWndFirstEditText принимает два параметра: Wnd, который является handle окна, содержащего редактируемый контроль, и Text, который является новым текстом для установки в редактируемый контроль.
  2. Процедура инициализирует локальную переменную EditWnd для хранения handle найденного редактируемого контрола.
  3. Она вызывает функцию FindWindowEx с следующими аргументами:
    • Wnd: handle окна, переданный в качестве аргумента.
    • 0: пустой handle, указывающий на то, что мы начинаем с верхнего уровня окна.
    • 'EDIT': имя класса редактируемого контрола, который мы ищем.
    • nil: null-указатель, указывающий на то, что у нас нет конкретного экземпляра редактируемого контрола для поиска.
  4. Если функция FindWindowEx находит редактируемый контроль с указанным именем класса, она возвращает его handle в EditWnd. В противном случае она устанавливает EditWnd в 0 и выходит из процедуры.
  5. Если был найден редактируемый контроль, процедура использует функцию SendMessage для отправки сообщения WM_SETTEXT редактируемому контролу, передавая новый текст (Text) как параметр. Проверка < 0 обеспечивает то, что сообщение было успешно отправлено.

Вот альтернативное решение с использованием встроенной функции Delphi Control:

procedure ChangeWndFirstEditText(Wnd: HWND; const Text: string);
var
  EditCtrl: TEdit;
begin
  EditCtrl := Control(Wnd, nil, TEdit);
  if Assigned(EditCtrl) then
    EditCtrl.Text := Text;
end;

В этом варианте мы используем функцию Control для поиска редактируемого контрола (TEdit) в окне с handle Wnd. Если найден, мы можем напрямую присвоить новый текст его свойству Text.

Добраться до любого управления (CONTROL) через Handle формы путем поиска нужного окна с помощью функции FindWindowEx и последующего отправки сообщения WM_SETTEXT для изменения текста в этом окне.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: Приложения чужие ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-20 01:33:32/0.00711989402771/2