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

Вниз

новый компонент: тип не видно в обект инспекторе   Найти похожие ветки 

 
TransparentGhost   (2004-03-24 11:19) [0]

Добрый день!
Создал новый компонент


 TADSheet = class(TScrollBox)
 private
    FPaintBox:TPaintBox;
 protected
 public
    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;
 published
 end;

Constructor TADSheet.Create(AOwner: TComponent);
Begin
 Inherited Create(AOwner);
 Width:=250;
 Height:=150;
 If GetClass("TPaintBox")=Nil then
    RegisterClass(TPaintBox);
 FPaintBox:=TPaintBox.Create(AOwner);
 FPaintBox.Parent:=Self;
 FPaintBox.Top:=0;
 FPaintBox.Left:=0;
 FPaintBox.Width:=Width;
 FPaintBox.Height:=Height;
End;


FPaintBox создаётся, но почему-то без имени и тип не видно в обект инспекторе.
Что я делаю не так?


 
Zergling ©   (2004-03-24 11:41) [1]

published
property PaintBox: TPaintBox read FPaintBox write FPaintBox;
end;


 
TransparentGhost   (2004-03-24 11:56) [2]

Когда нажимаю на созданный PaintBox, в обект инспекторе в самом верху в Combo, где выбираются компоненты расположенные на форме - пусто, и PaintBox.Name="";
Нажимаю на Button1 - показывает Button1: TButton
а если на етот PaintBox - там "";


 
Zergling ©   (2004-03-24 12:14) [3]

Sorry ща допишу. Немного не так. Давно компонентами не занимался


 
Zergling ©   (2004-03-24 12:24) [4]

Что то типа этого

private
   FPaintBox:TPaintBox;
   procedure SetControl(const Value: TPaintBox);

published
  property PaintBox: TPaintBox read FPaintBox write SetControl;

procedure TImpuls.SetControl(const Value: TPaintBox);
begin
 if FPaintBox <> Value then
 begin
   if FPaintBox <> nil then Impulsing.RemoveFreeNotification(FPaintBox);
   FPaintBox := Value;
   if FPaintBox <> nil then Impulsing.FreeNotification(FPaintBox);
 end;
end


 
Zergling ©   (2004-03-24 12:35) [5]

Ой! Одну строку еще добавить

if FPaintBox <> Value then
begin
  if FPaintBox <> nil then Impulsing.RemoveFreeNotification(FPaintBox);
  FPaintBox := Value;
  if FPaintBox <> nil then Impulsing.FreeNotification(FPaintBox);
Changed(False);
end;


 
TransparentGhost   (2004-03-24 12:47) [6]

Impulsing - что за зверь такой?


 
Zergling ©   (2004-03-24 12:52) [7]

Ню это твой TADSheet будет. Или вобще его вытери


 
TransparentGhost   (2004-03-24 13:04) [8]

Хмм...заменил TPaintBox на TImage, теперь TImage вообще нельзя выбрать, выбирается TADSheet. А мне так даже лучше будет :o)

А с предыдущим вариантом я попоззе поразбираюсь.

Zergling, спасибо.


 
Zergling ©   (2004-03-24 13:19) [9]

>> FPaintBox.Top:=0;
>> FPaintBox.Left:=0;
>> FPaintBox.Width:=Width;
>> FPaintBox.Height:=Height;

TPaintBox.Align := alClient; ?

procedure TScrollBox1.SetControl(const Value: TPaintBox);
begin
if FPaintBox <> Value then
begin
  if FPaintBox <> nil then RemoveFreeNotification(FPaintBox);
  FPaintBox := Value;
  if FPaintBox <> nil then FreeNotification(FPaintBox);
end;
end;

>>  теперь TImage вообще нельзя выбрать, выбирается TADSheet.

А везде на TImage сменил?

private
  FPaintBox:TPaintBox;
  procedure SetControl(const Value: TPaintBox);

published
 property PaintBox: TPaintBox read FPaintBox write SetControl;

procedure TADSheet.SetControl(const Value: TPaintBox);
begin
...
end;


 
Юрий Зотов ©   (2004-03-24 13:38) [10]

> Zergling ©   (24.03.04 12:14) [3]

> Немного не так. Давно компонентами не занимался

Простите, не НЕМНОГО, а СОВСЕМ не так. Вы предлагаете код для свойства-ссылки на ВНЕШНИЙ компонент, а из кода в вопросе ясно видно, что компонент ВНУТРЕННИЙ. Это совершенно разные вещи.

> TransparentGhost   (24.03.04 11:19)  

Чтобы внутренний компонент появился в Инспекторе, в published должно быть объявлено соответствующее свойство. Чтобы не происходило утечек памяти, это свойство должно иметь доступ к полю по записи через метод Set, в котором вызывается Assign (возможно, надо будет написать еще и Assign - это зависит от самого внутреннего компонента). Чтобы компонент имел имя, его надо назначить (но в Вашем случае оно совершенно не нужно). И, если Вы хотите редактировать в Инспекторе свойства внутреннего компонента, надо написать редактор для соответствующего свойства, унаследовав этот редактор от TClassPropery.


 
TransparentGhost   (2004-03-25 10:09) [11]


TADSheet = class(TScrollBox)
 private
    FImage:TImage;
 protected
 public
    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;
 published
 end;

Constructor TADSheet.Create(AOwner: TComponent);
Begin
 Inherited Create(AOwner);
 Width:=250;
 Height:=150;

 If GetClass("TImage")=Nil then
    RegisterClass(TImage);
 FImage:=TImage.Create(Self);
 FImage.Parent:=Self;
 FImage.Top:=0;
 FImage.Left:=0;
 FImage.Width:=800;
 FImage.Height:=600;

 FImage.Canvas.Brush.Color:=clWhite; {Тут выдаёт ошибку "The parametr is incorrect. ."}
End;


В чом дело? Почему не доступен Canvas?


 
TransparentGhost   (2004-03-25 10:41) [12]

Когда устанавливаю
FImage.Width:=800;
FImage.Height:=600;
всё нормально,
когда
Width и Height - очень большие тогда и нет доступа к Canvas.



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

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

Наверх




Память: 0.47 MB
Время: 0.037 c
1-1082437216
Learner
2004-04-20 09:00
2004.04.11
stdcall Есть ли принципиальная разница ?


14-1082122032
Igorek
2004-04-16 17:27
2004.04.11
Простенькая задачка на выходные


6-1075632423
Nikolay
2004-02-01 13:47
2004.04.11
Подключение по LAN


8-1076337974
PHENIX physicist
2004-02-09 17:46
2004.04.11
Рисование на форме


14-1081865688
Артем
2004-04-13 18:14
2004.04.11
Inno Setup RUS





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский