Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

Как узнать, имеет ли класс или компонент какое-либо св-во   Найти похожие ветки 

 
Hoper   (2003-01-27 14:36) [0]

Как узнать, имеет ли класс или компонент какое-либо свойство (конкретнее, имеет ли он свойство Canvas)


 
stone   (2003-01-27 14:57) [1]

GetPropInfo


 
Юрий Зотов   (2003-01-27 15:10) [2]

> stone © (27.01.03 14:57)
Вы где-нибудь видели, чтобы свойство Canvas было published?

> Hoper (27.01.03 14:36)
Для published-свойств - так, как написал Stone. А в общем случае (и для Canvas в том числе) - нельзя. Но можно посмотреть класс (скажем, Canvas есть у всех TGraphicControl), или придумать еще что-то. Вы бы описали задачу подробнее.


 
Hoper   (2003-01-28 13:30) [3]

Мне хотелось бы, чтобы мой компонент при создании иницировал свое свойство свойством Canvas предка (если оно, конечно же есть). Проверка на TGraphicControl не подходит, т.к. не подойдёт для формы (по задумке, это будет требоваться в большинстве случаев).
>stone
за GetPropInfo - спасибо, как-нибудь пригодится.


 
MBo   (2003-01-28 14:06) [4]

>чтобы мой компонент при создании иницировал свое свойство свойством Canvas предка
??????


 
Skier   (2003-01-28 14:11) [5]

>Hoper
Вообще не очень понятно...
А почему бы не создать собственный Canvas ?
Или зачем инициализировать так как в предке если предок
уже это сделал ???


 
Hoper   (2003-01-30 23:29) [6]

у компонента есть св-во canvas, но надо указывать тот canvas, на котором будет выводится всякая хрень, в большинстве случаев это будет canvas формы


 
Tux   (2003-01-31 00:00) [7]

Епрст, вы это узнаете на этапе компиляции, мне так кажется.


 
Hoper   (2003-01-31 15:34) [8]

Tux
>Епрст, вы это узнаете на этапе компиляции, мне так кажется.
что вы имеете ввиду?


 
Hoper   (2003-02-01 02:35) [9]

корректно ли будет использовать try-except?


 
Юрий Зотов   (2003-02-01 05:22) [10]

> Hoper (30.01.03 23:29)
> у компонента есть св-во canvas, но надо указывать тот canvas,
> на котором будет выводится всякая хрень, в большинстве случаев
> это будет canvas формы

Советую посмотреть, как сделан Canvas в TGraphicControl (реализует DC родительского окна) и в TForm (реализует DC собственного окна). Похоже, Вам нужно сделать то же самое.

И совершенно непонятна терминология:
> "чтобы мой компонент при создании иницировал свое свойство
> свойством Canvas предка (если оно, конечно же есть)"

Что имеется в виду под словом "предок"? Если то, что обычно (класс-предок Вашего компонента), то в этой фразе минимум 2 ошибки. Если же нет, то что?


 
Hoper   (2003-02-01 18:41) [11]

ну да, неправильно выразился, нужно было "хозяин"


 
Hoper   (2003-02-02 16:41) [12]

ладно, кое как я требуемое сделал
возник вопрос:
Canvas:=(AOwner as TCustomControl).Canvas;
не компилируется из-за того, что canvas там protected?
если да, то можно ли с этим бороться?


 
Романов Р.В.   (2003-02-02 17:41) [13]

type
TCustomControl1 = class(TCustomControl)

...
Canvas:=(AOwner as TCustomControl1).Canvas


 
hoper   (2003-02-02 19:40) [14]

2 Романов Р.В.
Спасибо, а почему так?


 
Романов Р.В.   (2003-02-02 19:47) [15]

Создаем класс потомок у которого свойство Canvas тоже protected. Однако в пределах данного моделя оно доступно для других классов.


 
hoper   (2003-02-02 22:51) [16]

точно - где-то читал
ещё раз спасибо


 
MXA   (2003-02-03 02:31) [17]

тогда может и это пригодится (кажется из фака какого-то):

cut ============================================================

У меня есть маленькое замечание.
Если у объекта нет свойства Canvas (у TDBEdit, вpоде-бы нет), по кpайней меpе в D3 можно использовать класс TControlCanvas. Пpимеpное использование:
var cc: TControlCanvas;
...
cc := TControlCanvas.Create;
cc.Control := youControl;
...
и далее как обычно можно использовать методы Canvas.

cut ============================================================


 
hoper   (2003-02-03 03:53) [18]

2 МХА
будет полезно
thnx


 
Cheshit   (2003-02-03 15:37) [19]

Вот пример: функция проверяет, есть ли у родителя свойство
"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-04 00:50) [20]

но, как я понял, для Canvas"a в большинстве случаев пример не подходит ввиду его (Canvas"a) защищённости


 
Не   (2003-02-04 03:50) [21]

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-06 03:01) [22]

а чем это противоречит мною сказанному?..
published!=защищённый


 
Ну   (2003-02-06 03:35) [23]

скажем так. Published - в переводе на русский, означает "опубликованный", может иметь смысл "предъявленный широкой публике" и т.д. и т.п.

"Защищенностью", т.е. запретом видимости данного свойства в тех или иных случаях заведуют директивы private, protected, public.


 
Юрий Зотов   (2003-02-06 06:01) [24]

> Cheshit © (03.02.03 15:37)

1. Странно. Это работает? Без выделения памяти под TempList?
2. Зачем вообще нужен список и цикл? Существует GetPropInfo.





 
Hoper   (2003-02-06 11:48) [25]

2 Ну
значит, если Canvas не published, то он защищённый (Ну (06.02.03 03:35)) в введённой Вами терминологии



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.012 c
3-52808
DBGrid
2003-01-29 13:34
2003.02.17
процедура column autosize для DBGrid


14-53264
Nick_N_A
2003-01-29 06:56
2003.02.17
Частотный анализ звука


14-53166
Aristarh
2003-02-02 17:37
2003.02.17
Неправильная кодировка в email


14-53269
Lancelot
2003-02-02 00:08
2003.02.17
Брюс Уиллис


1-52900
Сергей
2003-02-08 12:27
2003.02.17
Флажки на bitmap.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский