powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задание размеров нового компонента
20 сообщений из 20, страница 1 из 1
Задание размеров нового компонента
    #40071261
ao2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Подскажите пожалуйста как сделать размер вложенного компонента равным размеру базового. Хочу сделать новый компонент - кнопку в рамочке, где рамочка - компонент TShape. Спасибо.
Код: 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.
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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
unit ButtonPlus;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

var shape:TShape   ;

type
  TButtonPlus = class(TButton)
  private
    { Private declarations }
  protected
    { Protected declarations }
    procedure WMLBUTTONDOWN(var Msg: TWMLBUTTONDOWN); message WM_LBUTTONDOWN;
    procedure WMLBUTTONUP(var Msg: TWMLBUTTONUP); message WM_LBUTTONUP;
  public
    { Public declarations }
    //procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override;
  published
    { Published declarations }
    constructor Create(aowner:Tcomponent);override;    //!
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('My components', [TButtonPlus]);
end;

constructor TButtonPlus.Create(aowner:Tcomponent);
begin
  inherited create(Aowner);
  //выбрать свойства по умолчанию
  //AutoSize:=false;
  Font.Style:=[fsBold];
  Font.Height:=16;
  Font.Size:=12;
  self.Width:=100;
  self.Height:=60;
  //нарисовать рамку вокруг
  shape:=TShape.Create(self);
  shape.Parent := self;
  shape.Enabled:=false;
  shape.Brush.Color:=clAqua;
  shape.Top := Top;
  shape.Left := Left;
  AdjustSize;
end;

//procedure TButtonPlus.SetBounds(aLeft, aTop, aWidth, aHeight: integer);
//begin
//  {Продолжаем, и позволяем SetBounds() сделать свое дело...}
//  inherited SetBounds(aLeft, aTop, aWidth, aHeight);
//
//  shape.Width:=Width;
//  shape.Height:=Height;
//end;

procedure TButtonPlus.WMLBUTTONDOWN(var Msg: TWMLBUTTONDOWN);
begin
  //изменить цвет рамки
  shape.Brush.Color:=clRed;
  inherited;
end;

procedure TButtonPlus.WMLBUTTONUP(var Msg: TWMLBUTTONUP);
begin
  //изменить цвет рамки
  shape.Brush.Color:=clAqua;

  inherited;
end;

end.
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071262
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.05.2021 11:11, ao2020 пишет:
> новый компонент - кнопку в рамочке, где рамочка - компонент TShape.

ты не с той стороны копать начал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071270
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать новый компонент - кнопку в рамочке, где рамочка - компонент TShape. Спасибо
То есть рамочка вокруг кнопки ?
Но TButton нельзя положить на TShape, потому что TShape = class(TGraphicControl)
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071293
ao2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рамочка или прямоугольник внутри кнопки. Как присвоить shape размеры самой кнопки?
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071294
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetRect.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071295
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.05.2021 12:52, ao2020 пишет:
> Рамочка или прямоугольник внутри кнопки. Как присвоить shape размеры самой кнопки?

а как не получилось то?
покажи, в чем засада.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071312
ao2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Засада в том что если я в конструкторе напишу
Код: pascal
1.
2.
  shape.Width:=Width;
  shape.Height:=Height;

прямоугольник не перекрывает кнопку как по логике должно быть; сейчас просто прямоугольник в углу кнопки (голубой, а на момент нажатия красный). Посмотрю про SetRect.
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071314
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто Parent у шейпа?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071332
ao2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Create: shape.Parent := Self;
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071337
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.05.2021 14:29, ao2020 пишет:
> В Create: shape.Parent := Self;

ну так и перекрывай метод Paint баттона.
в нем сперва вызывай inherited Paint,
а затем рисуй рамку.
и кстати, для такой хрени шейп не нужен вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071349
ao2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автордля такой хрени шейп не нужен вообще.Ладно, не нужен. Я суть уловить хотел, сам принцип.
Я нашёл здесь что для этого нужно ещё перекрывать методы Resize, AdjustSize. Что к чему ещё не разобрал.
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071373
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

ну так и перекрывай метод Paint баттона.

У батона нет метода Paint. Батон - это обёртка Windows контрола
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071375
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.05.2021 15:27, DimaBr пишет:
> У батона нет метода Paint. Батон - это обёртка Windows контрола

батон батону рознь
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071380
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrБатон - это обёртка Windows контрола

Это по идее не должно мешать ему сабклассить оконную функцию и обрабатывать WM_PAINT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071441
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Мимопроходящий

ну так и перекрывай метод Paint баттона.

У батона нет метода Paint. Батон - это обёртка Windows контрола

CNDrawItem() зато у него есть. Только тогда придётся всю кнопку самому рисовать.
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071451
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inherited вызывать бесполезно?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071465
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

inherited вызывать бесполезно?

По-умолчанию её рисует винда, чтобы работал CNDrawItem - кнопке надо стиль сделать BS_OWNERDRAW, а он с другими стилями не совместим. Т.е. нет там никакого inherited.
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071501
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ao2020
Засада в том что если я в конструкторе напишу

Засада в том, что если ты напишешь что-либо в конструкторе, то это отработает в конструкторе. А тебе нужно, чтобы они ходили друг с другом как резиновые. И учитывая общий уровень задачи и решений, если хочешь идти в этом направлении, я бы советовал тебе сделать компонент - wincontrol, хоть ту же панель, на нём создавать свой shape и на него же пихать кнопку, то и другое с alClient.
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071502
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С его уровнем лучше сразу гуглить "Delphi control resize runtime".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Задание размеров нового компонента
    #40071519
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

19.05.2021 15:27, DimaBr пишет:
> У батона нет метода Paint. Батон - это обёртка Windows контрола

батон батону рознь

У автора вполне определённый батон
Код: pascal
1.
TButtonPlus = class(TButton)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задание размеров нового компонента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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