Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание своего компонента из двух / 18 сообщений из 18, страница 1 из 1
27.10.2020, 10:52
    #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
27.10.2020, 12:10
    #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
27.10.2020, 12:43
    #40012157
vlv74
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание своего компонента из двух
Мимопроходящий,
Спасибо

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

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

о хоспадЕ!
ну нахрена это в СВОЁМ компоненте?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.10.2020, 14:49
    #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
27.10.2020, 14:53
    #40012229
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание своего компонента из двух
добавь в конструктор:
FLab.ParentFont := False;

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

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


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


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

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

SetSubComponent
...
Рейтинг: 0 / 0
27.10.2020, 22:22
    #40012385
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание своего компонента из двух
Вот ваш компонент. Что конкретно не работает ?
...
Рейтинг: 0 / 0
28.10.2020, 10:49
    #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
28.10.2020, 17:15
    #40012746
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание своего компонента из двух
_Vasilisk_
Да ну вы что, все пьяные?

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


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