Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
madshe
20 / 0 / 1
Регистрация: 14.09.2010
Сообщений: 22
#1

Создание динамического класса - Delphi

20.09.2010, 18:16. Просмотров 2588. Ответов 4
Метки нет (Все метки)

Здравствуйте, не могу разобраться,
нужно чтобы в приложении на форме Form1 динамически создавалась панель, с расположенными на ней компонентами Label, количество создаваемых панелей до 4-х.
Я решила создать класс в отдельном модуле, класс на основе компонента TPanel и добавить к нему компонент TLabel в качестве полей (не знаю вообще можно ли так делать, но компилятор не ругается)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
type
  TPlayerPanel = class(TPanel)
  private
    FPlayer: TLabel;
  public
    constructor Create (AOwner: TComponent); override;
  published
    property Player: TLabel read FPlayer write FPlayer;
  end;
 
implementation
 
 
{ TPlayerPanel }
 
constructor TPlayerPanel.Create(AOwner: TComponent);
begin
  inherited;
  Width := 200;
  Height := 220;
  BevelInner := bvLowered;
  BevelOuter := bvRaised;
  BorderWidth := 1;
  ParentFont := true;
  Top := 25;
  Left := 25;
  FPlayer := TLabel.Create(AOwner);
  FPlayer.Alignment := taCenter;
  FPlayer.AutoSize := false;
  FPlayer.Caption := 'Name';
  FPlayer.Height := 31;
  FPlayer.Width := 185;
  FPlayer.Top := 32;
  FPlayer.Left := 8;
  FPlayer.ParentFont := true;
  FPlayer.Font.Style := [fsBold];
 
end;
на самой форме панель создаю так

Delphi
1
2
3
4
5
procedure TForm1.Button1Click(Sender: TObject);
begin
  panel := TPlayerPanel.Create(Form1);
  panel.Parent := Form1;
end;
при этом создается панель, но Label на ней отсутсвует или его не видно, хотя он где-то существует, т.к. считывать его значения я могу.
Помогите пожалуйста разобраться, что я делаю не так или может чего-то упустила, а может вообще класс стоило создать типа TObject, а панель добавить в него как поле или сделать все еще каким-то другим способом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2010, 18:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создание динамического класса (Delphi):

Создание динамического списка - Delphi
Я в Дельфи уже почти всё изучил, остались только динамические списки. Я их толком понять не могу вообще, не прёт логика у меня. Вставляю...

Создание динамического TImage - Delphi
procedure TForm1.FormCreate(Sender: TObject); var enemy:TImage; x,y:Integer; begin Randomize; ...

Создание динамического StringGrid - Delphi
Привет. Снова нужна ваша помощь. Для создания массива чисел - StringGrid заполненный в ручную - необходимо чтобы количество строк и...

Создание и сохранение динамического интерфейса - Delphi
Ребят, подскажите, пожалуйста, как можно создавать элементы интерфейса непосредственно из программы, а не из среды разработки (Delphi 7)....

Создание трехмерного динамического массива - Delphi
Создать трехмерный динамический массив, типа string, количество страниц =9. Каждая страница размерностью 65*65

Создание второго динамического label - Delphi
Привет всем, можно ли как-то сделать, чтобы при создании второго динамического label, чтобы он не ложился сверху на первого, ранее...

4
Vas-e-na
355 / 414 / 41
Регистрация: 21.06.2010
Сообщений: 1,362
20.09.2010, 18:52 #2
madshe, зачем столько мазахизма? чем вас стандартный класс панели не устраивает???
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
begin
  panel:=TPanel.Create(self);
  panel.Parent:=self;
  {здесь настроите параметры панели}
  label:=TLabel.Create(panel);
  label.Parent:=panel;
  {здесь настроите параметры лабейла}
end;
0
madshe
20 / 0 / 1
Регистрация: 14.09.2010
Сообщений: 22
20.09.2010, 22:00  [ТС] #3
короче я совсем запуталась уже во всем и в первую очередь в своих мыслях...
..на панели надо 5 компонентов Label, кол-во панелей определяется во время выполнения программы и варьируется от 2-х до 4-х, также в процессе выполнения надо будет изменять некоторые свойства Label, как лучше все это оформить? может динамический массив с нужными компонентами? если делать не отдельным классом, то нужно заводить 6 массивов с компонентами? (извините, если уже совсем чушь несу)
0
Vas-e-na
355 / 414 / 41
Регистрация: 21.06.2010
Сообщений: 1,362
20.09.2010, 22:06 #4
Цитата Сообщение от madshe Посмотреть сообщение
кол-во панелей определяется во время выполнения программы и варьируется от 2-х до 4-х
советую начать с этого, с создания динамического массива, потом начнем накручивать, чтобы лабелы не висели все в одном массиве, переопишем класс панели, допустим TMyPanel и добавим туда(лучше всего в раздел public) статический массив лейблов (я так понял их кол-во однозначно?) и в принципе все готово, но дабы упростить жизнь и не заниматься мазохизмом, можно переопределить конструктор нашего класса и дописать туда создание наших лейблов.
Вот в принципе и всё, начинайте как я сказал и делайте именно в том порядке как написано, за счет этого на каждом шагу сможете проверить работоспособность...
1
madshe
20 / 0 / 1
Регистрация: 14.09.2010
Сообщений: 22
20.09.2010, 23:45  [ТС] #5
вот как-то так получилось

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
type
  TPlayerPanel = class (TPanel)
 
  private
 
  public
    Labels: array [1..5] of TLabel;
  published
    constructor Create(AOwner: TComponent); override;
  end;
 
  TPanels = array of TPlayerPanel;
  procedure PanelsCreate (Form: TForm; Count: byte);
var
  Panel: TPanels;
 
implementation
 
procedure PanelsCreate (Form: TForm; Count: byte);
var i: byte;
begin
  SetLength(Panel, Count);
  for i:=0 to Count-1 do
    begin
      Panel[i] := TPlayerPanel.Create(Form);
      with Panel[i] do
        begin
          Parent := Form;
          Width := 200;
          Height := 220;
          BevelInner := bvLowered;
          BevelOuter := bvRaised;
          BorderWidth := 1;
          ParentFont := true;
          case i of
            0: begin
                Top := 25;
                Left := 25;
            end;
            1: begin
                Top := 25;
                Left := 810;
            end;
            2: begin
                Top := 400;
                Left := 25;
            end;
            3: begin
                Top := 400;
                Left := 810;
            end;
           end;
        end;
    end;
end;
 
{ TPlayerPanel }
 
constructor TPlayerPanel.Create(AOwner: TComponent);
var i: byte;
begin
  inherited;
  for i:=1 to 5 do
    begin
      Labels[i] := TLabel.Create(self);
      Labels[i].Parent := self;
      {параметры лэйбла}
    end;
end;
и вроде даже работает, но пока еще не до конца доделала)
Спасибо большое Васене за помощь
0
20.09.2010, 23:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2010, 23:45
Привет! Вот еще темы с ответами:

Создание класса с унаследованными методами класса-предка - Delphi
Подскажите, как создать класс с унаследованными методами класса-предка?

Создание динамического массива,элементы которого TEdit - Delphi
Доброго времени суток,пользователи данного форума.Мне нужна ваша помощь в написании данной программы.Я не слишком умен в Delphi...Только...

Создание, уничтожение и очистка памяти от динамического массива - Delphi
Здравствуйте. Создаю динамический массив, задаю размерность через SetLength(). Очищаю через присвоение каждому элементу массива значения...

Создание динамического стека с удалением значений равных последнему - Delphi
Ребят, кто-нибудь может помочь переделать программу, она рабочая ...просто нужно вывод стека реализовать не в Label, а каком-нибудь другом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru