Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
3-1182679985
Ulugbek
2007-06-24 14:13
2007.10.28
Помогите DBGRID без вертикал скролла


5-1162483418
--= Eagle =--
2006-11-02 19:03
2007.10.28
Предотвратить удаление сабкомпонента в дизайнтайме


11-1174741130
ElectriC
2007-03-24 15:58
2007.10.28
Ошибка KOL


1-1187184113
Игорь_
2007-08-15 17:21
2007.10.28
Закрытие сокета


4-1177575482
capkoh
2007-04-26 12:18
2007.10.28
Повторное открытие диалога





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский