Решил создать компонент с выпадающем списком выбора шрифта и пару свойств. Компонент работаеn отлично, но когда его преобразовываешь в Activex control появляется вот такая ошибка: Control has no parent window. Из-за чего не могу понять. Вот данный код программы.
Код:
unit FontPanel;
interface
uses
SysUtils, Classes, Controls, ExtCtrls, StdCtrls, Forms, Graphics, Spin;
type
TFontPanel = class(TPanel)
private
{ Private declarations }
FontBox: TComboBox;
CheckBold, CheckItal, CheckUL: TCheckBox;
TextColor: TColorBox;
TextSize: TSpinEdit;
ShowHideBtn: TButton;
procedure ShowHide(Sender: TObject);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
function ApplySettings(Obj: TFont): TFont;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('My Components', [TFontPanel]);
end;
{ TFontPanel }
function TFontPanel.ApplySettings(Obj: TFont): TFont;//Функция для применения выбранных настроек
//В качестве входного параметра передаётся шрифт изменяемого объекта. В процессе выполнения функция
//изменяет его в зависимости от выбранных настроек и возвращает в качестве результата.
begin
Obj.Name:= FontBox.Text;//В качестве шрифта устанавливаем тот, который выбран из выпадающего списка
Obj.Style:= [];//Обнуляем значение всех атрибутов шрифта
if CheckBold.Checked then Obj.Style:= Obj.Style + [fsBold];//Если выбран жирный, то добавляем соответствующий атрибут.
if CheckItal.Checked then Obj.Style:= Obj.Style + [fsItalic];//И то же самое для курсива
if CheckUL.Checked then Obj.Style:= Obj.Style + [fsUnderline];//И для подчеркнутого
Obj.Color:= TextColor.Selected;//В качестве цвета присваиваем выбранный из КалорБокса
Obj.Size:= TextSize.Value;//А размером выбираем значение находящееся в SpinEdit
Result:= Obj;//Ну и, наконец, возвращаем изменённый шрифт в качестве результата.
end;
constructor TFontPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent:=(AOwner as TWinControl);
Width:= 177;
Height:=35;
FontBox:= TComboBox.Create(Self);
FontBox.Parent:= Self;
FontBox.Left:= 8;
FontBox.Top:= 8;
FontBox.Items.Assign(Screen.Fonts);
FontBox.Text:= FontBox.Items[0];
CheckBold:= TCheckBox.Create(Self);
CheckBold.Parent:= Self;
CheckBold.Left:= 160;
CheckBold.Top:= 8;
CheckBold.Width:= 73;
CheckBold.Caption:= 'Жирный';
CheckBold.Font.Style:= [fsBold];
CheckItal:= TCheckBox.Create(Self);
CheckItal.Parent:= Self;
CheckItal.Left:= 240;
CheckItal.Top:= 8;
CheckItal.Width:= 65;
CheckItal.Caption:= 'Курсив';
CheckItal.Font.Style:= [fsItalic];
CheckUL:= TCheckBox.Create(Self);
CheckUL.Parent:= Self;
CheckUL.Left:= 312;
CheckUL.Top:= 8;
CheckUL.Width:= 97;
CheckUL.Caption:= 'Подчеркнутый';
CheckUL.Font.Style:= [fsUnderline];
TextColor:= TColorBox.Create(Self);
TextColor.Parent:= Self;
TextColor.Top:= 8;
TextColor.Left:= 408;
TextColor.Width:= 81;
TextSize:= TSpinEdit.Create(Self);
TextSize.Parent:= Self;
TextSize.Top:= 8;
TextSize.Left:= 492;
TextSize.Width:= 49;
TextSize.MaxValue:= 72;
TextSize.MinValue:= 6;
TextSize.Value:= 8;
ShowHideBtn:= TButton.Create(Self);
ShowHideBtn.Parent:= Self;
ShowHideBtn.Left:= 160;
ShowHideBtn.Top:= 8;
ShowHideBtn.Height:= 21;
ShowHideBtn.Width:= 17;
ShowHideBtn.Anchors:= [akTop, akRight];
ShowHideBtn.Caption:= '>';
ShowHideBtn.OnClick:= ShowHide;
end;
procedure TFontPanel.ShowHide(Sender: TObject);
begin
if Width <= 177 then
begin
ShowHideBtn.Caption:= '<';
Width:= 561;
end else
begin
Width:= 177;
ShowHideBtn.Caption:= '>';
end;
end;
end.