Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Как получить имя этого компонента?   Найти похожие ветки 

 
ffo_2   (2007-04-26 18:58) [0]

Есть чужое окно (окно другой программы, запускаемой по команде из моей программы).
В этом чужом окне (тоже, кстати, когдато кем то сделанном в Delphi) один из многих
компонентов имеет тип TEdit (это знаю точно). Мне надо получить имя этого компонента.

С помощью GetClassName(ChidHWND, Klass, 80); я получил класс этого окна

С помощью GetWindowText(ChidHWND, Caption, 80);я получаю текст в окне этого компонента

А как мне получить имя этого Edit-а? т.е. как получить свойство Name компонента TEdit,
находящегося на чужой форме.

Вот как я нахожу класс и текст:

function ffoEnumChildProc(ChidHWND: hWnd; List: TStrings): Bool; stdcall;
var
Klass : array [0..80] of char;
Caption : array [0..80] of char;
ss:String;
begin

//перебрать все компоненты и записать их типы и текст (в их окнах) в Мемо
Result := True;
GetClassName(ChidHWND, Klass, 80);
Id := GetDlgCtrlId(ChidHWND);
GetWindowText(ChidHWND, Caption, 80);
Form5.Memo1.Lines.Add(Format("Класс: %s,     Текст: %s", [Klass, Caption]));

end;

procedure TForm5.Button1Click(Sender: TObject);
begin
 Form5.Memo1.Lines.Clear;
 EnumChildWindows( Wnd1,@ffoEnumChildProc,1);
end;


 
Leonid Troyanovsky ©   (2007-04-26 19:15) [1]


> ffo_2   (26.04.07 18:58)  

> А как мне получить имя этого Edit-а? т.е. как получить свойство
> Name компонента TEdit,

Что в имени тебе его?

--
Regards, LVT.


 
ffo_2   (2007-04-26 23:39) [2]

Куча компонентов на этой чужой форме.
Мне надо среди них выбрать все Едиты  (получить их хэндлы) и потом
по мере необходимости посылать в окна этих Едитов SetWindowText и считывать из них SetWindowText.

Я могу класс их определить (GetClassName), но у них там у всех класс TEdit.
Я могу текст из них считывать (GetWindowText), но у некоторых текст в окне одинаковый. Собственно проблема - то и состоит в том, что текст в онах у некоторых из них одинаковый. Ну вот к примеру я у десяти Едитов успешно определяю хендлы т.к. текст в их окнах разный, а у 11 и 12 определить не могу так как у них в окнах цифры восемь (у обоих). Короче вот кусок кода в котором надо определить Хендлы 11 и 12 Едитов. Решение гдето близко, да череп уже варить отказывается...



var
 EditHandle1,
 EditHandle2,
 EditHandle3,
 EditHandle4,
 EditHandle5,
 EditHandle6,
 EditHandle7,
 EditHandle8,
 EditHandle9,
 EditHandle10,
 EditHandle11,
 EditHandle12  : Longint;

...

function ffoEnumChildProc(ChidHWND: hWnd; List: TStrings): Bool; stdcall;
var
Klass : array [0..80] of char;
Caption : array [0..80] of char;
ss:String;
begin

//перебрать все компоненты и записать их типы и текст (в их окнах) в Мемо
Result := True;
GetClassName(ChidHWND, Klass, 80);
Id := GetDlgCtrlId(ChidHWND);
GetWindowText(ChidHWND, Caption, 80);

//Определяем Хэндлы дочерних окон
           if(StrComp("TEdit",Klass) = 0 )and ((StrComp("8",Caption)  = 0)) then EditHandle1 := ChidHWND        //lx
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("5",Caption)  = 0)) then EditHandle2 := ChidHWND        //lz
//  else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("  ",Caption) = 0))   then EditHandle3 := ChidHWND      // нет такого
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("3",Caption)  = 0)) then EditHandle4 := ChidHWND        //Ez
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("6",Caption)  = 0)) then EditHandle5 := ChidHWND        //Ex
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("10",Caption) = 0)) then EditHandle6 := ChidHWND        //Ez_г
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("18",Caption) = 0)) then EditHandle7 := ChidHWND        //Ex_г
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("0",Caption)  = 0)) then EditHandle8 := ChidHWND        //LzT
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("50",Caption) = 0)) then EditHandle9 := ChidHWND        //LxT
   else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("12",Caption) = 0)) then EditHandle10 := ChidHWND       //Nц

//Вот тут геморой, так как в окнах у этих двух Едитов вписано 200
//поэтому я не могу выцепить их Хэндлы

 else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("200",Caption)= 0)) then EditHandle11 := ChidHWND      //Цx ???
//  else    if(StrComp("TEdit", Klass) = 0)and ((StrComp("200",Caption)= 0)) then EditHandle12 := ChidHWND       //Цz ???

Form5.Memo1.Lines.Add(Format("Класс: %s,     Текст: %s", [Klass, Caption]));

end;

procedure TForm5.Button1Click(Sender: TObject);
begin
Form5.Memo1.Lines.Clear;
EnumChildWindows( Wnd1,@ffoEnumChildProc,1);
end;



 
имя   (2007-04-27 00:02) [3]

Удалено модератором


 
Rouse_ ©   (2007-04-27 00:03) [4]

И раздвинулись перед Моисеем и паствой его воды, и сказал Моисей - аххренеть....
GetWindowText применяется к хэндлу - что ты хочешь еще найти, если хэндл тебе уже известен?


 
Leonid Troyanovsky ©   (2007-04-27 01:12) [5]


> ffo_2   (26.04.07 23:39) [2]

> Куча компонентов на этой чужой форме.

Для идентификации edit может пригодится его z-order и/или
положение в окне парента.

А имен у него может и не быть, это допустимо.
Да, и не GetWindowText, а WM_GETTEXT.

--
Regards, LVT.


 
Германн ©   (2007-04-27 02:01) [6]


> ffo_2   (26.04.07 18:58)

Суть вопроса уловил. Суть задачи, которую надо решить - нет.
Читай http://ln.com.ua/~openxs/articles/smart-questions-ru.html

Кстати. McSimm, может пора перестать издеваться над усопшим Р.Шэкли, давая уже много лет неработающую ссылку на его рассказ?



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1191823092
Kolan
2007-10-08 09:58
2007.10.28
Как запретить перерисовываться TScrollBox у?


2-1191315966
webpauk
2007-10-02 13:06
2007.10.28
Положение компонента


2-1191498875
xayam
2007-10-04 15:54
2007.10.28
Почему DISTINCT не работает?


1-1187332690
andreoman
2007-08-17 10:38
2007.10.28
При отображении MessageDlg сворачивается окно (TForm)


2-1191916590
John_13
2007-10-09 11:56
2007.10.28
Проблема в DBGrid