![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, имеет ли класс или компонент какое-либо св-во [D5]
Hoper © (2003-01-27 14:36:00)Как узнать, имеет ли класс или компонент какое-либо свойство (конкретнее, имеет ли он свойство Canvas)
Hoper (2003-02-06 11:48:00) [1]2 Ну
значит, если Canvas не published, то он защищённый (Ну (06.02.03 03:35)) в введённой Вами терминологии
Юрий Зотов (2003-02-06 06:01:00) [2]> Cheshit © (03.02.03 15:37)
1. Странно. Это работает? Без выделения памяти под TempList?
2. Зачем вообще нужен список и цикл? Существует GetPropInfo.
Ну (2003-02-06 03:35:00) [3]скажем так. Published - в переводе на русский, означает "опубликованный", может иметь смысл "предъявленный широкой публике" и т.д. и т.п.
"Защищенностью", т.е. запретом видимости данного свойства в тех или иных случаях заведуют директивы private, protected, public.
Hoper (2003-02-06 03:01:00) [4]а чем это противоречит мною сказанному?..
published!=защищённый
Не (2003-02-04 03:50:00) [5]2 hoper (04.02.03 00:50)
> но, как я понял, для Canvas"a в большинстве случаев пример не > подходит ввиду его (Canvas"a) защищённости
На самом деле сей пример не подходит из-за того, на что уже указал Юрий Зотов © (27.01.03 15:10)
>> stone © (27.01.03 14:57)
>Вы где-нибудь видели, чтобы свойство Canvas было published?
hoper (2003-02-04 00:50:00) [6]но, как я понял, для Canvas"a в большинстве случаев пример не подходит ввиду его (Canvas"a) защищённости
Cheshit (2003-02-03 15:37:00) [7]Вот пример: функция проверяет, есть ли у родителя свойство
"Transparent" и его значение
function ValidParent( Sender : TControl ): TWinControl;
var
I, Count: Integer;
PropInfo: PPropInfo;
TempList: PPropList;
PropVal : Variant ;
Res:Boolean;
Ctr:TWinControl;
begin
Ctr:= Sender.Parent;
Result:=Ctr;
if (Ctr is TCustomForm) or (Ctr is TCustomFrame) or (Ctr=nil) then exit;
Count := GetPropList( PTypeInfo(Ctr.ClassInfo) , TempList);
if Count > 0 then
try
for I := 0 to Count - 1 do
begin
PropInfo := TempList^[I];
Res := (PropInfo^.Name = "Transparent");
if Res then
begin
PropVal := GetPropValue( Ctr , "Transparent" , false );
if VarIsNull(PropVal) then
Res := false
else
Res := Boolean(PropVal) ;
if Res then
Break ;
end;
end;
finally
FreeMem(TempList);
end;
if Res then
Result:=ValidParent( Ctr.Parent );
end;
hoper (2003-02-03 03:53:00) [8]2 МХА
будет полезно
thnx
MXA (2003-02-03 02:31:00) [9]тогда может и это пригодится (кажется из фака какого-то):
cut ============================================================
У меня есть маленькое замечание.
Если у объекта нет свойства Canvas (у TDBEdit, вpоде-бы нет), по кpайней меpе в D3 можно использовать класс TControlCanvas. Пpимеpное использование:
var cc: TControlCanvas;
...
cc := TControlCanvas.Create;
cc.Control := youControl;
...
и далее как обычно можно использовать методы Canvas.
cut ============================================================
hoper (2003-02-02 22:51:00) [10]точно - где-то читал
ещё раз спасибо
Романов Р.В. (2003-02-02 19:47:00) [11]Создаем класс потомок у которого свойство Canvas тоже protected. Однако в пределах данного моделя оно доступно для других классов.
hoper (2003-02-02 19:40:00) [12]2 Романов Р.В.
Спасибо, а почему так?
Романов Р.В. (2003-02-02 17:41:00) [13]type
TCustomControl1 = class(TCustomControl)
...
Canvas:=(AOwner as TCustomControl1).Canvas
Hoper (2003-02-02 16:41:00) [14]ладно, кое как я требуемое сделал
возник вопрос:
Canvas:=(AOwner as TCustomControl).Canvas;
не компилируется из-за того, что canvas там protected?
если да, то можно ли с этим бороться?
Hoper (2003-02-01 18:41:00) [15]ну да, неправильно выразился, нужно было "хозяин"
Юрий Зотов (2003-02-01 05:22:00) [16]> Hoper (30.01.03 23:29)
> у компонента есть св-во canvas, но надо указывать тот canvas,
> на котором будет выводится всякая хрень, в большинстве случаев
> это будет canvas формы
Советую посмотреть, как сделан Canvas в TGraphicControl (реализует DC родительского окна) и в TForm (реализует DC собственного окна). Похоже, Вам нужно сделать то же самое.
И совершенно непонятна терминология:
> "чтобы мой компонент при создании иницировал свое свойство
> свойством Canvas предка (если оно, конечно же есть)"
Что имеется в виду под словом "предок"? Если то, что обычно (класс-предок Вашего компонента), то в этой фразе минимум 2 ошибки. Если же нет, то что?
Hoper (2003-02-01 02:35:00) [17]корректно ли будет использовать try-except?
Hoper (2003-01-31 15:34:00) [18]Tux
>Епрст, вы это узнаете на этапе компиляции, мне так кажется.
что вы имеете ввиду?
Tux (2003-01-31 00:00:00) [19]Епрст, вы это узнаете на этапе компиляции, мне так кажется.
Hoper (2003-01-30 23:29:00) [20]у компонента есть св-во canvas, но надо указывать тот canvas, на котором будет выводится всякая хрень, в большинстве случаев это будет canvas формы