Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 11:25   #1
mosxe
Пользователь
 
Регистрация: 22.11.2011
Сообщений: 18
По умолчанию Ошибка Control has no parent window

Решил создать компонент с выпадающем списком выбора шрифта и пару свойств. Компонент работае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.
mosxe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Control '' has no parent window. при создание DateTimePicker bakanaev Общие вопросы Delphi 6 31.03.2013 15:44
Ошибка Cannot focus a disabled or invisible window. sedoq Общие вопросы Delphi 3 01.02.2012 07:45
создание TSplitter на форме в dll, Control has no parent window sprofxx Общие вопросы Delphi 9 04.09.2010 13:37
window.document.write и window.alert() Syltan JavaScript, Ajax 0 26.08.2010 21:32
Alpha Control (ошибка) ZBEP Компоненты Delphi 2 27.04.2009 12:00