Вопрос № 175781: Уважаемые эксперты, во первых хочется пожелать вам Нового года, а во вторых задать вам такой вопрос: Как узнать hendle всех компонентов на форме моего приложения и записать их в массив? Ещё раз приятного Нового ГОДА!!!...
Вопрос № 175781:
Уважаемые эксперты, во первых хочется пожелать вам Нового года, а во вторых задать вам такой вопрос: Как узнать hendle всех компонентов на форме моего приложения и записать их в массив? Ещё раз приятного Нового ГОДА!!!
Отвечает Anton A., 3-й класс :
Здравствуйте, Хохлов Артём Анатольевич.
Код в приложении. Для перебора компонентов используем свойство Components класса TForm. Стоит заметить, что, например, TLabel не имеет Handle. Поэтому делается проверка на принадлежность компонента к классу TWinControl, что означает наличие у компонента Handle.
Запись в массив не составит труда - достаточно объявить его типом HWND.
Приложение:
Ответ отправил: Anton A., 3-й класс
Ответ отправлен: 03.01.2010, 02:03
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 258327
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Del, 3-й класс :
Здравствуйте, Хохлов Артём Анатольевич.
Про рекурсию слышать доводилось? Про хэндлы компонентов не расскажу, а вот про контролы - запросто. Поможет?
Заводим переменную - массив, в который будем пихать хэндлы. Потом пишем процедуру, которая будет получать хэндлы всех контролов, лежащих на указанном, и вызывать сама себя для каждого из них.
Выглядит примерно так:
var A: array of Integer;
procedure GetControls(P: TWinControl); var X, Y: Integer; begin Y :=
Length(A); SetLength(A, Y+P.ControlCount); for X := 0 to P.ControlCount-1 do begin A[Y+X] := TWinControl(P.Controls[X]).Handle; if TWinControl(P.Controls[X]).ControlCount > 0 then GetControls(TWinControl(P.Controls[X])); end; end;
Как-то вот так. С наступившим 2010 годом.
----- Только массовые расстрелы спасут Родину!
Ответ отправил: Del, 3-й класс
Ответ отправлен: 03.01.2010, 02:12
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 258328
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Колесников Иван Владимирович, 5-й класс :
Здравствуйте, Хохлов Артём Анатольевич! Спасибо за поздравления! Не hendle, а handle. Код в приложении. Записывает в массив a handle всех компонентов. Только следует учесть, что handle имеют только компоненты потомки TWinControl. А в массив должны поместиться все дескрипторы (handle) компонентов. Это следует учесть при определении размерности массива. В приведённом ниже фрагменте i и j - целочисленные переменные счётчики. From - Форма. На выходе в j будет количество элеменов помещённых в массив.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.