Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2014, 10:07   #1
TilerDerton
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 34
По умолчанию findwindowex не обнаруживает LabeledEdit (Клавиатура для сенсорной панели)

Доброго времени суток.
Делаю экранную клавиатуру (Компонент не подходит, т.к. нужна юникод-клавиатура, не привязанная к языку системы), столкнулся с интересным моментом:
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   wnd: HWND;
   cn: string;
   
begin
   cn:=activecontrol.Name;
   Memo2.Lines.Clear;
   Memo2.Lines.Add(cn);
   wnd:=findwindowex(form1.Handle, 0, 0, strtoPchar(cn));
   memo2.Lines.Add(inttostr(wnd));
   SendMessage(wnd, WM_CHAR, Ord(1056), 0);
end;
На форме Edit, LabeledEdit. Кнопка корректно возвращает хэндл Edit и печатает в него, когда в фокусе LabeledEdit - возвращает ноль.
Проблема решена очевидной заменой на Edit и Label. Тем не менее, интересно, что я делал не так?

Среда Rad XE2
TilerDerton вне форума Ответить с цитированием
Старый 02.04.2014, 11:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
   wnd:=FindWindowEx(form1.Handle, 0, 'TLabeledEdit',nil);
Так находит первое.
Код:
wnd:=FindWindowEx(form1.Handle, 0, 'TLabeledEdit',PAnsiChar(LabeledEdit1.Text));
wnd:=FindWindowEx(form1.Handle, 0, nil,PAnsiChar(LabeledEdit1.Text));
Так находит с текстом. По имени вообще не находит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.04.2014 в 11:55.
Аватар вне форума Ответить с цитированием
Старый 02.04.2014, 11:36   #3
TilerDerton
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 34
По умолчанию

Я сейчас посмотрел и понял, что сам себе намудрил проблему. В коде первого поста проблема в другом, он вообще находит элемент, только если тот имеет текст такой же, как и его имя.
Для решения поставленной задачи (Печать в активный Edit) достаточно следующего:
Код:
SendMessage(activecontrol.Handle, WM_CHAR, Ord(1081), 0);
TilerDerton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение LabeledEdit не переводится в Integer AHBAR Общие вопросы Delphi 1 18.12.2012 05:50
Проблемы с FindWindowEx Slonnn Помощь студентам 22 08.03.2012 22:32
Object Pascal, LabeledEdit Антон Лысенко Помощь студентам 0 12.03.2011 22:30
Виртуальная клавиатура для браузера, несколько вопросов nnova Общие вопросы Delphi 2 19.12.2008 16:19
не обнаруживает сатовский жесткий Vladislav Компьютерное железо 13 20.07.2008 19:57