Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.099 c
14-1079654911
mfender
2004-03-19 03:08
2004.04.11
VIZA, MasterCard etc.


11-1067029912
mike.dld
2003-10-25 01:11
2004.04.11
2Gandalf


3-1079449884
DataBase
2004-03-16 18:11
2004.04.11
Узнать количество строк в DbGridEh


8-1074332995
*BES*
2004-01-17 12:49
2004.04.11
Управление потоком!!!!


1-1079862390
Grant
2004-03-21 12:46
2004.04.11
Файлы