Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 1659
∙ повысить рейтинг »
lamed
Статус: Практикант
Рейтинг: 1175
∙ повысить рейтинг »
Jimhucksly
Статус: 5-й класс
Рейтинг: 670
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1477
Дата выхода:08.01.2010, 02:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:583 / 224
Вопросов / ответов:1 / 3

Вопрос № 175781: Уважаемые эксперты, во первых хочется пожелать вам Нового года, а во вторых задать вам такой вопрос: Как узнать hendle всех компонентов на форме моего приложения и записать их в массив? Ещё раз приятного Нового ГОДА!!!...



Вопрос № 175781:

Уважаемые эксперты, во первых хочется пожелать вам Нового года, а во вторых задать вам такой вопрос:
Как узнать hendle всех компонентов на форме моего приложения и записать их в массив?
Ещё раз приятного Нового ГОДА!!!

Отправлен: 03.01.2010, 01:31
Вопрос задал: Хохлов Артём Анатольевич, Посетитель
Всего ответов: 3
Страница вопроса »


Отвечает Anton A., 3-й класс :
Здравствуйте, Хохлов Артём Анатольевич.

Код в приложении. Для перебора компонентов используем свойство Components класса TForm. Стоит заметить, что, например, TLabel не имеет Handle. Поэтому делается проверка на принадлежность компонента к классу TWinControl, что означает наличие у компонента Handle.

Запись в массив не составит труда - достаточно объявить его типом HWND.

Приложение:

Ответ отправил: Anton A., 3-й класс
Ответ отправлен: 03.01.2010, 02:03

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258327 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает 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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Колесников Иван Владимирович, 5-й класс :
    Здравствуйте, Хохлов Артём Анатольевич!
    Спасибо за поздравления!
    Не hendle, а handle.
    Код в приложении. Записывает в массив a handle всех компонентов. Только следует учесть, что handle имеют только компоненты потомки TWinControl. А в массив должны поместиться все дескрипторы (handle) компонентов. Это следует учесть при определении размерности массива. В приведённом ниже фрагменте i и j - целочисленные переменные счётчики. From - Форма. На выходе в j будет количество элеменов помещённых в массив.

    Приложение:

    Ответ отправил: Колесников Иван Владимирович, 5-й класс
    Ответ отправлен: 03.01.2010, 12:49

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258331 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.13 от 28.12.2009

    В избранное