Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 22:46   #1
Shu644
Новичок
Джуниор
 
Регистрация: 14.05.2013
Сообщений: 3
По умолчанию "Сложный компонент" не работает onclick

Проблема в следующем, создал компонент наследник TCustomPanel на нем же в конструкторе созданы два компонента Label (очень надо вывод разной информации на две строки). В published открыто событие OnClick.
Когда данный компонент кидается на форму то событие OnClick не происходит на том месте где находятся эти самые лейблы. Подскажите пожалуйста как это можно победить.
Код:
unit AmPanel;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, stdctrls, dialogs;

 type
TAmPanel = class(TCustomPanel)

  private
   FTypAm : TLabel;
    FGosn: Tlabel;
     
        function GetAm : string;
         procedure SetAm(const Value: string);
          function GetGZ : string;
            procedure SetGZ(const Value: string);

            
    { Private declarations }
  protected
    { Protected declarations }
  public
  constructor Create(AOwner:TComponent); override;
      { Public declarations }
  published
    { Published declarations }
  
        Property OnMouseDown;
         Property OnClick;
         property Color;
          property NameAm : string read GetAm write SetAm;
           property NameGz : string read GetGz write SetGz;
            property caption;
            
  end;

procedure Register;

implementation

 constructor TAMPanel.Create(AOwner:TComponent);
    begin
     inherited Create(AOwner);
  FTypAm:=Tlabel.Create(self);
  FTypAm.Parent:=Self;
   FTypAm.Left:=8;
  FTypAm.Top:=1;
  FTypAm.Width:=73;
   FTypAm.Height:=13;
 

    Fgosn:=Tlabel.Create(self);
  Fgosn.Parent:=self;
   Fgosn.Left:=16;
 Fgosn.Top:=16;
  Fgosn.Width:=60;
   Fgosn.Height:=13;
  
     end;

 function TAmPanel.GetAm:string;
begin
  Result:=FTypAm.Caption;
end;

procedure TAmPanel.SetAm(const Value:string);
begin
  FTypAm.Caption:=Value;
end;

   function TAmPanel.GetGz:string;
begin
  Result:=FGosn.Caption;
end;

procedure TAmPanel.SetGz(const Value:string);
begin
  Fgosn.Caption:=Value;
end;


procedure Register;
begin
  RegisterComponents('Standard', [TAmPanel]);
end;

end.

Последний раз редактировалось Stilet; 14.05.2013 в 23:47.
Shu644 вне форума Ответить с цитированием
Старый 15.05.2013, 10:07   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

вар 1. быстрый но надо помнить про OnClick:=MyLabelClick при добавлении новых Label!
Код:
ftypam:=TLabel.Create;
ftypam.onclick:=self.MylabelClick;

procedure TAmPanel.MyLabelClick(sender: TObject);
begin
  self.Click;
end;
вар 2. ничего не надо помнить при правильном конструкторе все будет настроено само собой
Код:
ftypam:=TPanelLabel.Create(???);

TPanelLabel =class(TLabel)
private
  FMyPanel: TPanel;
protected 
  procedure Click; override;
end;

procedure TPanelLabel.Click;
begin
 // inherited;
 FMyPanel.click; 
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.05.2013, 11:08   #3
Shu644
Новичок
Джуниор
 
Регистрация: 14.05.2013
Сообщений: 3
По умолчанию

Спасибо!! Первый вариант работает, со вторым не совсем разобрался.
Shu644 вне форума Ответить с цитированием
Старый 15.05.2013, 11:53   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Могу предложить попробовать банальное
Код:
protected
  procedure SetOnclick(Value: TNotifyEvent);
  function GetOnclick(): TNotifyEvent;
published
  property OnClick: TNotifyEvent read GetOnClick write SetOnClick;
...
procedure TAmPanel.SetOnClick(Value: TNotifyEvent);
begin
  inherited OnClick := Value;
  Fgosn.OnClick := Value;
  FTypAm.OnClick := Value;
end;
function TAmPanel.GetOnClick(): TNotifyEvent;
begin
  Result := inherited OnClick;  
end;
Проверял, вроде работает, хоть и в какой-то мере костыльное решение

УПД. упс, сорри, давно уж вкладку с темой открыл, не подумал обновить до постинга

Последний раз редактировалось phomm; 15.05.2013 в 11:56.
phomm вне форума Ответить с цитированием
Старый 16.05.2013, 11:35   #5
Shu644
Новичок
Джуниор
 
Регистрация: 14.05.2013
Сообщений: 3
По умолчанию

Всем спасибо за помощь!
Shu644 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает сравнение "Фамилии" с "ФИО" Xakand_2009 БД в Delphi 4 11.07.2012 23:55
МасОС не работает ,хоть и Видит,Интернет и "сломалась" "Сеть" =/ ApxuKILLER Операционные системы общие вопросы 2 05.05.2011 08:22
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Почему не работает Case txt Like "текст1", "текст2" Oooleg Microsoft Office Excel 2 15.07.2009 10:08