Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать, имеет ли класс или компонент какое-либо св-во [D5]


Страницы:   1 2

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 формы


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо