Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 18.11.2016, 02:22   #1
Leximus
Форумчанин
 
Регистрация: 18.09.2010
Сообщений: 85
Репутация: 10
По умолчанию Компонент наследник TButton не работает совсем!

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

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

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

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

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

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

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

Код:

unit CBSButton;

interface

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.

Leximus вне форума   Ответить с цитированием
Старый 18.11.2016, 03:20   #2
Leximus
Форумчанин
 
Регистрация: 18.09.2010
Сообщений: 85
Репутация: 10
По умолчанию

Вроде разобрался...
У меня
Image: TImage;
Text: TLabel;
Стояли объявлены были в Private, переместил, вроде заработало.

Остался вопрос как сделать что бы Image и Label были частью кнопки, а не "загараживали" её.

Что бы при нажатии по кнопке где находится Картинка или Label срабатывала именно кнопка, и соответственно работала реакция на наведение мыши на кнопку в любом месте, так где Image и Label тоже
Leximus вне форума   Ответить с цитированием
Старый 18.11.2016, 10:45   #3
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,299
Репутация: 1909
По умолчанию

что я бы попробовал
1.запрет на получение "внутренними" компонентами получения фокуса.
Код:

image.Enabled:=false;
text.Enabled:=false;

не обещаю что заработает как надо.

2. попробовать "транслировать" сообщения от Image(TImage) и Text (TLabel) в "свою" кнопку.
Код:

Image:=TImage.Create(Self);
...
Image.Onclick:=DoClickMyButton; //при нажатии на мою картинку сделать для меня это

procedure TCSButton.DoClickMyButton(sender: TObject);
begin// ура нажали мою картинку (а может и не только ее, а еще и текст), так что

  self{меня}.Click{нажмем};
end;

3 .это сложнее. (лучше оставить на самый крайний случай)
Рисовать картинку и текст САМОМУ на канве кнопки.
хотя обычно компоненты так и поступают.
отказаться от TLabel и Timage.

4. отказаться от своего компонента и перейти к фреймам. (TFrame)

5.
Цитата:
А у вас Delphi 10. Просто в Delphi 7 и так всё работает.
http://programmersforum.ru/showpost....46&postcount=4
__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 18.11.2016 в 10:58.
evg_m вне форума   Ответить с цитированием
Старый 18.11.2016, 13:27   #4
Leximus
Форумчанин
 
Регистрация: 18.09.2010
Сообщений: 85
Репутация: 10
По умолчанию

1. Данный запрет ничего не даст, сделает объекты только ни активными, но они как прежде будут отображаться.

2. При транслировании таким способом процедура нажатия конечно выполнится, но эффекта нажатии на кнопке не будет, да и не будет эффекта при наведении мышки на курсор.

3. Действительно лучше рисовать самому, и действительно вопрос с остальным сразу пропадёт, но боюсь это не так быстро. Но в дальнейшем так и сделаю.

4. Мне именно нужна кнопка, остальное не подойдёт
Leximus вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает написанная функция через Tbutton pimple2006 Общие вопросы Delphi 6 11.12.2011 00:04
Ряды (не совсем правильно работает) pesik.aravir Помощь студентам 3 02.05.2011 13:06
Не совсем корректно работает программа alexchromets Помощь студентам 2 26.12.2010 20:45
Sharepoint не совсем работает табличное представление. jojahti Софт 0 16.11.2009 13:48
Компонент TButton... slim5 Помощь студентам 7 17.06.2008 17:58




03:11.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru