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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2011, 00:35   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание Написание компонента, наследование (TPanel)

Здравствуйте


Пишу свой компонент.
У меня вот какой вопрос.

Основным классом является TPanel. После чего пишу еще два класса TImage, TButton.

Мне нужно чтобы TImage, TButton отображались на TPanel.
Пробовал в конструкторе TButton в Parent присваивать TPanel ничего не получилось. Как это можно реализовать?

Глупо задан вопрос, просто с написанием компонентов столкнулся впервые.

Заранее очень благодарен.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 16.02.2011, 00:39   #2
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

http://www.programmersforum.ru/showp...53&postcount=2
asmodey1 вне форума Ответить с цитированием
Старый 16.02.2011, 01:38   #3
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Код:
unit sArtPanel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sMemo, sPanel, sLabel, sEdit, sSpinEdit, ExtCtrls, sCheckBox,
  sSkinProvider, sSkinManager;
 
var
  ArtImage: TImage;
  ArtComboBox: TComboBox;
  ArtCheckBox: TsCheckBox;  

type
  TsArtPanel = class(TPanel)
  private
    { Private declarations }
    FArtLines: TStringList;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property ArtLines: TStringList read FArtLines write FArtLines;
    constructor Create(AOwner: TComponent); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('NewPage', [TsArtPanel]);
end;

{ TsArtPanel }

constructor TsArtPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  TPanel(Self).Parent := TForm(AOwner);
  FArtLines := TStringList.Create;

  ArtImage := TImage.Create(AOwner);
  ArtImage.Parent := TsArtPanel(Self); 
end;

end.
нам нужны похожие компоненты
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 17.02.2011, 23:07   #4
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

ArtGrek - Спасибо, работает. Но проблема в том что когда кидаешь компонент на фору, и пытаешься скомпилить проект, оно кричит на скрол, возможно все таки нужно создать класс TScrollBar а не просто переменную???

Делаю вот так:
Код:
unit skGantt;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Graphics, StdCtrls;

type
  TskGantt = class(TPanel)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    constructor Create(AOwner: TComponent); override;
    property Width default 200;
    property Height default 100;
    { Published declarations }
  end;

var
 skScrollBar: TScrollBar;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('SK', [TskGantt]);
end;

{ TskGantt }

constructor TskGantt.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width:=200;
  Height:=100;

  skScrollBar:=TScrollBar.Create(AOwner);
  skScrollBar.Parent:=TskGantt(Self);
  skScrollBar.Width:=200;
  skScrollBar.Left:=0;
  skScrollBar.Top:=0;
end;

end.
Кидаю компонент на форму, результат при компиляции проекта -
Ошибка.jpg
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности

Последний раз редактировалось Stilet; 20.02.2011 в 13:06.
SoftKoc вне форума Ответить с цитированием
Старый 18.02.2011, 01:38   #5
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Причина ошибки то простая. Владельцем скроллбара должен быть наш компонент, а не какой-то другой объект.
Код:
 skScrollBar:=TScrollBar.Create(Self);
И все дела.
Прик вне форума Ответить с цитированием
Старый 18.02.2011, 02:15   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Self: TsArtPanel;
в моем случае, поетому полностью согласен с Прик
и зделаю я мои Image своиством
Код:
...
type
  TsArtPanel = class(TPanel)
  private
    { Private declarations }
    FArtLines: TStringLis
    FArtImage: TImage;
...
  published
    { Published declarations }
    property ArtLines: TStringList read FArtLines write FArtLines;
    property ArtImage: TImage read FArtImage write FArtImage;
    constructor Create(AOwner: TComponent); override;
...
constructor TsArtPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  TPanel(Self).Parent := TForm(AOwner);
  FArtLines := TStringList.Create;

  ArtImage := TImage.Create(Self);
  ArtImage.Parent := TsArtPanel(Self);
...
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 20.02.2011, 02:28   #7
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Огромное спасибо, все работает =-)))

Почему я не могу в своем классе создать динамический массив компонентов:
Код:
type
  TskPanel = class(TPanel)
   skScrollBar: TScrollBar;
   skCanvas: TImage;
   skTimeBar: array of TShape;
  private
Говорит:
[Error] skPanel.pas(12): Published field 'skTimeBar' not a class nor interface type
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности

Последний раз редактировалось Stilet; 20.02.2011 в 13:07.
SoftKoc вне форума Ответить с цитированием
Старый 20.02.2011, 12:36   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Изданная область 'skTimeBar' не класс, ни тип интерфейса
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 20.02.2011, 12:50   #9
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
Изданная область 'skTimeBar' не класс, ни тип интерфейса
Нужно писать для этого отдельный класс?
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 21.02.2011, 23:22   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
skTimeBar: array of TShape;
а как вы его потом создаете?
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с TPanel.... casio23 Общие вопросы Delphi 9 29.12.2010 19:24
Написание компонента (С++ Builder) vallyforge Помощь студентам 0 03.11.2010 20:56
TListView и TPanel goblinyara Компоненты Delphi 3 09.01.2009 23:53
TPanel Valera Помощь студентам 10 07.08.2008 11:15