![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Про Handle...
Kozhanov © (2002-03-01 11:44:00)Господа, как проверить есть у контрола Handle ?
Я знаю, что можно его проверить на "наследственность"
типа if AControl.InheritsFrom(TWinControl) then... ,
но может есть ещё какой-то способ, API - функция, что ли...
Виктор Щербаков (2002-03-01 16:18:00) [1]Мне кажется, что IDE получает список всех свойств, ковыряя исходник или DCU. Но зачем эту информацию (об именах всех свойств) хранить в runtime? Лишние накладные расходы!
MBo (2002-03-01 14:56:00) [2]Кстати, наличие, скажем, того же property Handle нельзя проверить с помощью GetPropInfo или GetPropList, поскольку оно не published.
А какими средствами можно получить список всех свойств объекта, как умеет сама IDE (например, code completion)
В Toolsapi для IOTAEditActions есть объявление процедуры
CodeCompletion. Интересно, как она работает
Юрий Зотов (2002-03-01 13:36:00) [3]Но нет проблем написать такую функцию:
function HasHandle(AControl: TControl): boolean;
begin
Result := (AControl is TWinControl) and TWinControl(AControl).HandleAllocated
end;
Kozhanov (2002-03-01 12:59:00) [4]> Виктор Щербаков
Согласен. Вы меня убедили.
Про API это я погорячился... Видимо не выспался :)
Всем спасибо. Вопрос снимаю...
Виктор Щербаков (2002-03-01 12:55:00) [5]API ничего не знает о VCL, а значит и о контролах (в смысле TControl).
Следовательно API функции, которой надо передавать ссылку на контрол, быть не может.
Kozhanov (2002-03-01 12:49:00) [6]> Юрий Зотов
Да я понимаю, что если контрол не наследуется от TWinControl
то у него нет Handle"a, но мне хотелось бы определить
есть ли handle, используя какую-нибудь API - функцию (ежели таковая имеется)...Т.е. сделать всё через неё - одной строкой,
типа if HasHandle(AControl) then...
Юрий Зотов (2002-03-01 12:20:00) [7]> А если контрол не наследуется от TWinControl
То хэндла у него нет и быть не может.
Полная проверка такая:
if
(AControl is TWinControl) // Есть свойство Handle
and
TWinControl(AControl).HandleAllocated // Окно уже создано
then...
Kozhanov (2002-03-01 11:50:00) [8]> Виктор Щербаков
А если контрол не наследуется от TWinControl !?
Виктор Щербаков (2002-03-01 11:49:00) [9]TWinControl.HandleAllocated