powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание своего компонента из двух
18 сообщений из 18, страница 1 из 1
Создание своего компонента из двух
    #40012113
vlv74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени суток
я только начинаю разбираться в написании собственных компонентов
с простыми вроде разобрался
а вот с более сложными никак

стоит задача сделать новый компонент на базе TProgressBar
необходимо поместить на нём Label

когда делаю это в простом коде, всё работает
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.FormCreate(Sender: TObject);
begin
   Label1.Parent:= ProgressBar1;
   Label1.Align:=alClient;
   Label1.Alignment:=taCenter;
   Label1.Layout:=tlCenter;
   Label1.Caption:='';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 ProgressBar1.Max:=trunc(Random(1000));
 ProgressBar1.Position:=trunc(Random(ProgressBar1.Max));
 Label1.Caption:='Test - '+inttostr(ProgressBar1.Position)+' ('+inttostr(ProgressBar1.Max)+')'
end;


А когда пытаюсь сделать компонент
что то идёт не так
Код: pascal
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.
unit MyProgress;
interface
uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls,Vcl.ComCtrls;
type
  TMyProgress = class(TProgressBar)
  private
    FLab : TLabel;
  protected
  public
   FLabText : string;
 published
   constructor Create(AOwner:TComponent); override;
   property LabText: string  read FLabText write FLabText;
  end;
procedure Register;
implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyProgress]);
end;

constructor TMyProgress.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  FLab:=TLabel.Create(Self);
  FLab.Parent:=Self; // тут что то не так
  FLab.Align:=alClient;
  FLab.Layout:=tlCenter;
  FLab.Alignment:=taCenter;
  FLab.Caption:=LabText;
end;

end.
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012143
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlv74,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
constructor TMyProgress.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csAcceptsControls];   
  FLab:=TLabel.Create(Self);
  FLab.Parent:=Self; // тут что то не так
  FLab.Align:=alClient;
  FLab.Layout:=tlCenter;
  FLab.Alignment:=taCenter;
  FLab.Caption:=LabText;
end;
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012157
vlv74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
Спасибо

и следующий вопрос.
какая процедура отвечает за перерисовку компонента при изменении значения

получившийся компонент как ProgressBar работает,
но надо при этом ещё и Label обновлять
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012160
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открой исходники и посмотри.
обычно перерисовку выполняет Paint.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012181
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создайте своё свойство Position и в его сеттере присваивайте старому Position и Label нужное значение.
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012188
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TProgressBar - это системный контрол Винды. Delphi предоставляет над ним обёртку. Она очень ограниченная. Проще нарисовать собственный ProgressBar.
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012204
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А субклассировать и перехватить WM_PAINT?
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012206
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27.10.2020 14:23, alekcvp пишет:
> А субклассировать и перехватить WM_PAINT?

о хоспадЕ!
ну нахрена это в СВОЁМ компоненте?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012224
vlv74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас у меня такой код
Код: pascal
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.
unit MyProgress;
interface
uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls,Vcl.ComCtrls;

  var  Lab : TLabel;
type
  TMyProgress = class(TProgressBar)
  private
  protected
  public
   FLab : TLabel;
  published
   constructor Create(AOwner:TComponent); override;
   property Lab: TLabel  read FLab write FLab;
  end;
procedure Register;
implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyProgress]);
end;

constructor TMyProgress.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csAcceptsControls];
  FLab:=TLabel.Create(Self);
  FLab.Parent:=Self;
  FLab.Align:=alClient;
  FLab.Layout:=tlCenter;
  FLab.Alignment:=taCenter;
end;

end.


ProgressBar - работает
Label - перерисовывает

проблема в том что,
при создании проекта
в редакторе всё работает, при изменении свойств Label всё работает
а когда запускаю проект Caption меняется, а вот другие свойства (цвет и размер шрифта нет)
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012229
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавь в конструктор:
FLab.ParentFont := False;

а если не поможет, делай ей Invalidate в рантайме
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012236
vlv74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
не помогло

и ещё вот:
так выглядит в редакторе по умолчанию


но если попытаться нажать сюда


то в выпадающем списке только Label1 (он есть на основной форме)
если его выбрать то вернуться уже нельзя
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012242
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27.10.2020 15:10, vlv74 пишет:
> то в выпадающем списке только Label1 (он есть на основной форме)
> если его выбрать то вернуться уже нельзя

ты своей лэйбе не дал имени.
сделай это в конструкторе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012249
vlv74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
когда програмно меняю, всё ок
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.FormCreate(Sender: TObject);
begin
   Label1.Parent:= ProgressBar1;
   Label1.Align:=alClient;
   Label1.Alignment:=taCenter;
   Label1.Layout:=tlCenter;
   Label1.Caption:='';

   MyProgress1.Lab.Font.Color:=clRed;
end;


когда в редакторе то не меняет

подскажи в какую сторону копать
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012254
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, рано вам в пионЭры (С)
читай Рэя Конопку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012383
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlv74
а когда запускаю проект Caption меняется, а вот другие свойства (цвет и размер шрифта нет)

SetSubComponent
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012385
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ваш компонент. Что конкретно не работает ?
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012513
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну вы что, все пьяные?

Автор, вместо
vlv74
Код: pascal
1.
   property LabText: string  read FLabText write FLabText;

Писать
Код: pascal
1.
   property LabText: string  read GetLabText write SetLabText;


Методы реализовать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function TMyProgress.GetLabText: string;
begin
  Result := FLab.Caption;
end;

procedure TMyProgress.SetLabText(const AVal: string);
begin
  FLab.Caption := AVal;
end;

Поле FLabText и строку
vlv74
Код: pascal
1.
  FLab.Caption:=LabText;

выкинуть
...
Рейтинг: 0 / 0
Создание своего компонента из двух
    #40012746
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Да ну вы что, все пьяные?

Тут 22221463 нет никакого LabText. Так что кто пьян под вопросом.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание своего компонента из двух
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]