Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задание размеров нового компонента / 20 сообщений из 20, страница 1 из 1
19.05.2021, 11:11
    #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
19.05.2021, 11:21
    #40071262
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание размеров нового компонента
19.05.2021 11:11, ao2020 пишет:
> новый компонент - кнопку в рамочке, где рамочка - компонент TShape.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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