![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
![]()
Есть чужая форма с несколькими TEdit
E := Findwindow(nil, 'Заказ запчастей'); h:=FindWindowEx(E,0,'TEdit',nil); sendmessage(h,wm_settext,0,lparam(l pctstr('текст который нужно'))); Это заполняет не тот эдит который нужно. Вариант E := Findwindow(nil, 'Заказ запчастей'); if Е<>0 then begin elements[1]:=getwindow(E,GW_CHILD); for i:=2 to 6 do begin elements[i]:=getwindow(elements[i-1],gw_hwndnext); end; end; заполняет не TEdit a TElEdit Как заполнить то что мне нужно? |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
![]()
Разобрался
Вот решение E := Findwindow(nil, 'Заказ запчастей'); h:=FindWindowEx(E,0,'TEdit',nil); h:=GetNextWindow(h,GW_HWNDNEXT); и так далее до нужного хендла |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
![]()
Findwindow находит окно. хэндл не нуль.
h:=FindWindowEx(E,0,'TEdit',nil); это находит хэндл первого TEdit h:=GetNextWindow(h,GW_HWNDNEXT); это находит хэндл следующего TEdit И так далее. Возник другой вопрос но по той же теме С помощью этих команд не могу найти хендл кнопки 'TSpeedButton' имя 'btAdd' надпись 'Добавить' Где-то нашшел код который показывает хендл и класс ЛЮБОЙ кнопки виндоса, но эту кнопку он не находит. Вот код procedure ShowHwndAndClassName(CrPos: TPoint); var hand,hand2:THandle; clas:array[0..255] of char; hWnd: THandle; aName: array [0..255] of Char; begin clas:=''; hWnd := WindowFromPoint(CrPos); Form1.Label1.Caption := 'Handle : ' + IntToStr(hWnd); GetClassNameA(hwnd,clas,250); Form1.label2.Caption:='clas:'+clas; GetWindowText(hWnd, aName, 256); hand:=FindWindow('clas','aName'); hand2:=FindWindowEx(hand,0,clas,aNa me); Form1.Edit1.text:=inttostr(hand2); end; procedure TForm1.Timer1Timer(Sender: TObject); var rPos: TPoint; begin if Boolean(GetCursorPos(rPos)) then ShowHwndAndClassName(rPos); end; Кнопка.Flat:=True; Я тут подумал можно ли ПРОГРАМНО кликнуть мышкой по этой кнопке (без перемещения курсора в свернутом окне) Если да то как? |
![]() |
![]() |
#5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Я просто щаз не помню кто и какое сообщение обрабатывает как клик по этому контролу, но как минимум можно Mouse_Event попробовать.
I'm learning to live...
|
|
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
![]()
Хендл окна на котором кнопка я знаю. КАК переместить уазатель мыши на эту кнопу (координаты топ и лефт известны ТОЧНО) только програмно, без видимоо перемещения? И будет ли это работать если прога свернута?
Дайте плз пример использования Mouse_Event |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 09.05.2008
Сообщений: 40
|
![]()
Отправь SendMessage (PostMessage) с параметром keydown на хэндл и не надо тебе перемещать мышь. Во всяком случае я так делал - точнее формулировка в хэлпах.
P.S. Или принудительно установи фокус на кнопке с хэндлом Последний раз редактировалось Stilet; 11.06.2008 в 14:04. |
![]() |
![]() |
#8 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
I'm learning to live...
|
||
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
![]()
Я же говорю что не могу найти хэндл кнопки. Щас ссылку гляну что выше дали
|
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
![]()
С ужасом для себя выяснил что компонент TspeedButton не имеет Handle . Так же как и все компоненты наследники TGraphicControl, в частности, TLabel, TShape, TImage, TBevel и т.д.
вот статья http://www.delphikingdom.com/asp/ans...IDAnswer=62488 Получилось нажать на кнопку "мышкой" вот так procedure TForm1.Button2Click(Sender: TObject); var wnd:HWND; r:TRect; prev_pos:TPoint; begin wnd:=Findwindow(nil, 'Заказ запчастей');; // получаем хэндл окна с кнопкой GetWindowRect(wnd,r); // получаем координаты окна. GetCursorPos(prev_pos); // запоминаем положение курсора memo1.Clear; memo1.Lines.Append('X='+inttostr(r. Left)); memo1.Lines.Append('Y='+inttostr(r. Top)); SetCursorPos(r.left+633+20+10,r.top +280+20+10); // устанавливаем курсор над кнопкой Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, r.Left+663, r.Top+300, 0, 0); Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, r.Left+6+3, r.Top+300, 0, 0); SetCursorPos(prev_pos.x,prev_pos.y) ; // возвращаем курсор end; Но это работает если форма программы НЕ свернута и находится В РАМКАХ рабочей зоны экрана. Как сделать клик на кнопке таким же (или другим) способом в СВЕРНУТОМ окне ????? |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
CheckListBox Програмное выделение строки | Yuran | Общие вопросы Delphi | 3 | 01.08.2008 15:44 |
заполнение CDS файла | TaTT DoGG | БД в Delphi | 0 | 25.04.2008 11:05 |
заполнение с idhttp | Pedro | Работа с сетью в Delphi | 2 | 27.08.2007 19:59 |
Програмное открытие файла | Scorpeon | Общие вопросы Delphi | 1 | 04.05.2007 18:01 |