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

Вниз

Как прочитать информацию с чужй формы (Заголовок формы известен)   Найти похожие ветки 

 
Tracer   (2003-11-12 12:29) [0]

На чужой форме лежит несколько контролов типа Tedit
и Tlabel как мне прочитать из них информацию в свою программу?


 
Digitman ©   (2003-11-12 12:47) [1]

c TEdit все просто : компонент инкапсулирует работу со стандартным виндовым классом "EDIT", достаточно по имени класса и имени окна класса найти его хэндл и запросить для найденного хэндла текст окна с пом. GetWindowText()

с TLabel все сложнее : нужно внедрять код в "чужой" процесс, ибо TLabel как потомок TGraphicControl не имеет своего окна и отрисовывается оконными процедурами формы, которой этот лейбл принадлежит. Т.е. нужно внедрить код, который, зная адрес объекта-формы в чужом ВАП, обратится к этому объекту-форме через св-во Controls[] для получения инф-ции об интересующем лейбл-объекте .


 
Tracer   (2003-11-12 13:05) [2]

Спасибо.
Можно примерчик для ТEdit?


 
Digitman ©   (2003-11-12 13:14) [3]

var
s: String;

SetString(s, GetWindowTextLength(hEditWnd));
GetWindowText(hEditWnd, PChar(s), Length(s));


 
Tracer   (2003-11-12 16:42) [4]

а как сделать это для всех контролов (TEdit-ов)
те. как получить список всех контролов окна?


 
Digitman ©   (2003-11-12 17:13) [5]

надо знать, кто их parent ... а для каждого parent"а - кто, соответственно, его parent .. и так до окна, не имеющего parent"а (точнее сказать - parent"ом окна верхнего уровня будет дисктоп)

рекурсивно перечисляешь все окна верхнего уровня, для каждого найденного окна - его детей, для каждого найденнного "дитяти" - его "дитятей" ... выход из рекурсивного цикла - при нахождении окна, чей класс и имя совпадают с искомым окном edit"а


 
Tracer   (2003-11-12 17:59) [6]

Оно понятно,
для начала нужно найти окно через FindWindow > вернет handle окна
Затем через FindWindowEx найти нужный эдит > вернет handle эдита
Для этого нужно знать хотя-бы имя искомого контрола.
После этого можно делать с эдитом все, что угодно с помощью
ф-ции SendMessage
например взять текст
SendMessage(EditHandle, WM_GETTEXT, 0, 0)
А как взять handle того едита имя которого я не знаю ?
и даже не точно знаю данные этого контрола? знаю только, что это TEdit?


 
Digitman ©   (2003-11-12 18:13) [7]


> имя которого я не знаю ?


а утилиты на что ? WinSight (Борланд) ? SpyXX (MS) ?

они дадут тебе детальную инф-цию об атрибутах искомого окна и дереве окон, по которому ты должен пробежать программно в поисках искомого окна контрола


 
Tracer   (2003-11-12 18:18) [8]

точно! блин, чужая форма то = const. и имена всех контролов останутся постоянными.
спасибо.


 
Digitman ©   (2003-11-12 18:26) [9]


> чужая форма то = const


ну это еще, положим, бабушка надвое сказала)

не исключена ситуация, что класс окна контрола фиксирован, а имя окна того же контрола может динамически меняться в ходе работы процесса



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
1-49617
Denis1
2004-01-05 09:14
2004.01.16
Нужна макроподстановка! Помогите, PLS.


1-49573
Прямой
2004-01-05 17:14
2004.01.16
Запись в файл


1-49535
Пубертанец
2004-01-06 11:24
2004.01.16
Что такое class function?


1-49602
Toots
2004-01-05 12:48
2004.01.16
файл ресурсов


1-49568
Ser_ega
2004-01-04 16:11
2004.01.16
StringGrid