С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Система
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 72
1

Компонент наследник TButton не работает совсем!

18.11.2016, 01:13. Просмотров 387. Ответов 10
Метки нет (Все метки)

Здравствуйте коллеги!

Столкнулся с одной проблемой, которую не могу победить долгое время.

Начну наверное с того что у меня Delphi 10.1 Berlin

Я создал компонент на основе TButton, но он не работает.
В компоненте мне надо создать компонент TImage и Label
Когда всё собираю и кладу компонент на форму, то отображается в дизайнере как надо, но при запуске кнопка выглядет как Panel кой то и не реагирует как Button(на наведение и нажатие мыши). Но компонент Image и Label присутствуют.
Компоненты Image и Label не перекрывают полностью кнопку, да и без них вообще пробывал. Комонент который наследуется от TButton перестаёт реагировать как кнопка и как будто превращается в TPanel
У меня Windows 10(но думаю с этим не связано)

Кто подскажет, в чём может быть дело, а то бьюсь долго, но видимо что то не так делаю. Обычный TBitBtn не подойдёт, да и разобраться хочется в чём дело.

При наведении на Image и при нажатии думаю тоже проблемы будут, но я думаю решу, тут главное вообще разобраться куда свойства кнопки утекают. Спасибо!

Код прилагаю.


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
uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons;
 
type
  TCBSButton = class(TButton)
  private
    { Private declarations }
    Image: TImage;
    Text: TLabel;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    constructor Create(AOwner: TComponent); override;
  end;
 
procedure Register;
 
implementation
 
 
constructor TCBSButton.Create(AOwner: TComponent);
begin
  { Вызовем конструктор из "предка" }
  inherited create(Aowner);
  Image := TImage.Create(AOwner);
  Image.Parent:=self;
  Image.Align := alLeft;
  Image.Width := Image.Height;
  Text := TLabel.Create(AOwner);
  Text.Parent :=self;
  Text.Layout := tlCenter;
  Text.Caption := 'Тест 4';
  Text.Align  := alRight;
  Text.Margins.Left := 4;
  Text.AlignWithMargins := true;
end;
 
procedure Register;
begin
  RegisterComponents('CBS', [TCBSButton]);
end;
 
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2016, 01:13
Ответы с готовыми решениями:

По нажатию на компонент TButton, на форме должен рисоваться рисунок
. По нажатию на компонент TButton, на форме должен рисоваться рисунок

Компонент TButton: Изменение размера шрифта кнопки при нажатии
Необходимо разработать компоненты, основанные на модификации стандартных...

Нужен компонент - наследник TDrawGrid с подержкой многострочного ввода
Нужен компонент - наследник TDrawGrid с подержкой многосторочного ввода (что-то...

При добавлении компонента к примеру кнопки. В коде Button1: TButton; выдает ошибку что TButton не известно.
Прошу у вас помощи. Rad Studio XE 3 выдает глупую ошибку. При добавлении...

Компонент TMainMenu работает не корректно
Как исправить эту проблему?

10
Пытливый
1381 / 692 / 249
Регистрация: 29.05.2013
Сообщений: 3,120
18.11.2016, 01:55 2
А чем вам не угодили стандартные TBitBtn и TSpeedButton?

Добавлено через 2 минуты
А не реагируют они потому-что вы перекрываете всю активную зону кнопки картинкой и меткой. События нажатия и перемещения мыши благополучно перехватываются этими компонентами и до кнопки просто не доходят.
0
Система
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 72
18.11.2016, 02:16  [ТС] 3
Мне надо что бы картинка чётко была с лева, затем с права будет Label(точнее alClient) а затем с лева ещё в нутри кнопки кнопка. Вот такое вот нужно.
А как сделать что бы при наведении мыши на Label который к в кнопке, что бы срабатывала реакция кнопки (при наведении меняется цвет) и при нажатии на фактически на Label срабатывала кнопка?

Добавлено через 5 минут
Вроде разобрался...
У меня
Image: TImage;
Text: TLabel;
Стояли объявлены были в Private, переместил, вроде заработало.
Остался вопрос как сделать что бы Image и Label были частью кнопки, а не "загараживали" её
0
Puporev
Модератор
55483 / 42582 / 29431
Регистрация: 18.05.2008
Сообщений: 100,738
18.11.2016, 08:20 4
Цитата Сообщение от Система Посмотреть сообщение
то бы Image и Label были частью кнопки
parent:=кнопка
0
Система
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 72
18.11.2016, 11:23  [ТС] 5
Puporev, всё верно и в коде это есть. Сказав что они должны быть частью я имел в виду что когда мишку наводят на кнопку, а точнее на ту часть где Label или Image кнопка должна реагировать, как на нажатие, так и просто на наведение, а пока там как будто перекрытая зона. Но сама Image и Label уже находятся в кнопке и в коде видно что Parent указан.
0
Пытливый
1381 / 692 / 249
Регистрация: 29.05.2013
Сообщений: 3,120
18.11.2016, 13:37 6
Перенаправить обработчик на кнопку не сложно, просто добавьте в код конструктора:
Delphi
1
2
  Image.OnClick := Self.OnClick;
  Text.OnClick := Self.OnClick;
А вот какое сообщение послать кнопке, для визуального эффекта наведения мыши тут я не в курсе. По логике надо курить исходники TCustomButton и искать там ответ.
0
DenNik
Непрофессионал
2014 / 1498 / 308
Регистрация: 26.07.2011
Сообщений: 8,134
18.11.2016, 13:50 7
Цитата Сообщение от Система Посмотреть сообщение
а затем с лева ещё в нутри кнопки кнопка
ужас, летящий на крыльях чего-то там...
0
Система
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 72
18.11.2016, 14:10  [ТС] 8
Вот такая вот белеберда, но именно так надо... Задумка автора такая! )
0
DenNik
Непрофессионал
2014 / 1498 / 308
Регистрация: 26.07.2011
Сообщений: 8,134
18.11.2016, 14:14 9
менять этот бред на нормальную идею
0
Puporev
Модератор
55483 / 42582 / 29431
Регистрация: 18.05.2008
Сообщений: 100,738
18.11.2016, 14:15 10
Цитата Сообщение от Система Посмотреть сообщение
Задумка автора такая! )
А автор кто?
0
Пытливый
1381 / 692 / 249
Регистрация: 29.05.2013
Сообщений: 3,120
18.11.2016, 18:28 11
Ну вообще-то автор описывает реально существующий компонент. Кстати вполне жизнеспособный.
0
18.11.2016, 18:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2016, 18:28

Компонент skinmanager delphi XE не работает в проекте
такая проблема: я скачал Alpha controls, кидаю на форму компонент skinmanager,...

Об'єкт TButton
Помогите пожалуйста сделать ЗАДАНИЕ: Создайте новый проект. Дайте форме...

Компонента от TButton
Создана новая компонента (от TButton), которая при нажатии издает звук. Ставлю...


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

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

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