Форум: "Основная";
Текущий архив: 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.043 c