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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.06.2008, 15:30   #1
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию Не работает програмное заполнение TEdit

Есть чужая форма с несколькими 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

Как заполнить то что мне нужно?
Yuran вне форума
Старый 10.06.2008, 16:04   #2
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Разобрался
Вот решение


E := Findwindow(nil, 'Заказ запчастей');
h:=FindWindowEx(E,0,'TEdit',nil);
h:=GetNextWindow(h,GW_HWNDNEXT);
и так далее до нужного хендла
Yuran вне форума
Старый 10.06.2008, 16:14   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Findwindow
Что оно выдает? Если 0 то нет Эдита с такими текстом и классом.
I'm learning to live...
Stilet вне форума
Старый 11.06.2008, 11:32   #4
Yuran
Форумчанин
 
Регистрация: 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;

Я тут подумал можно ли ПРОГРАМНО кликнуть мышкой по этой кнопке (без перемещения курсора в свернутом окне)

Если да то как?
Yuran вне форума
Старый 11.06.2008, 12:51   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно ли ПРОГРАМНО кликнуть мышкой по этой кнопке
Если речь идет о SpeedButton то FindWindow и прочие искалки окон тут не помошники.

Я просто щаз не помню кто и какое сообщение обрабатывает как клик по этому контролу, но как минимум можно Mouse_Event попробовать.
I'm learning to live...
Stilet вне форума
Старый 11.06.2008, 13:13   #6
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Хендл окна на котором кнопка я знаю. КАК переместить уазатель мыши на эту кнопу (координаты топ и лефт известны ТОЧНО) только програмно, без видимоо перемещения? И будет ли это работать если прога свернута?

Дайте плз пример использования Mouse_Event
Yuran вне форума
Старый 11.06.2008, 14:01   #7
slm
Пользователь
 
Регистрация: 09.05.2008
Сообщений: 40
По умолчанию

Отправь SendMessage (PostMessage) с параметром keydown на хэндл и не надо тебе перемещать мышь. Во всяком случае я так делал - точнее формулировка в хэлпах.

P.S. Или принудительно установи фокус на кнопке с хэндлом

Последний раз редактировалось Stilet; 11.06.2008 в 14:04.
slm вне форума
Старый 11.06.2008, 14:08   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Дайте плз пример использования Mouse_Event
Лентяйчикам См. сюдыть: http://programmersforum.ru/showthrea...ht=Mouse_Event
Цитата:
Отправь SendMessage (PostMessage) с параметром keydown на хэндл
Найди у SpeedButton хендл.
I'm learning to live...
Stilet вне форума
Старый 11.06.2008, 14:32   #9
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Цитата:
Сообщение от slm Посмотреть сообщение
Отправь SendMessage (PostMessage) с параметром keydown на хэндл и не надо тебе перемещать мышь. Во всяком случае я так делал - точнее формулировка в хэлпах.

P.S. Или принудительно установи фокус на кнопке с хэндлом
Я же говорю что не могу найти хэндл кнопки. Щас ссылку гляну что выше дали
Yuran вне форума
Старый 11.06.2008, 15:22   #10
Yuran
Форумчанин
 
Регистрация: 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;


Но это работает если форма программы НЕ свернута и находится В РАМКАХ рабочей зоны экрана.
Как сделать клик на кнопке таким же (или другим) способом в СВЕРНУТОМ окне ?????
Yuran вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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