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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 22:09   #1
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию Процедура компонента

Я создал свой компонент. Предком является TPanel. К примеру я кидаю его на форму, и создаю для него процедуру OnClick. Как я могу вызвать эту процедуру из самого компонента?
Kib вне форума Ответить с цитированием
Старый 10.08.2010, 01:01   #2
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Panel1Click(nil);
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 10.08.2010, 01:20   #3
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

А через Self возможно?
Kib вне форума Ответить с цитированием
Старый 10.08.2010, 10:53   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

procedure TMyPanel.doclick;
begin
.....
if assigne(self.fonclick) then // проверим есть обработчик
self.FonClick(self); //и если есть вызовем обработчик

end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.08.2010, 15:16   #5
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

Что то не получается. Побовал еще добавить
Код:
  private
    FOnClick : TNotifyEvent;
  protected
    property OnClick : TNotifyEvent read FOnClick write FOnClick;
Вот весь код компонента:
Код:
unit StyleList;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
  TStyleList = class(TPanel)
  procedure Relist;
  private
    ItemList: TStrings;
    Bitmap1, Bitmap2: TBitmap;
    ItemHeightVar: integer;
    Color2var: TColor;
    FOnClick : TNotifyEvent;
    procedure SetItems2(Value: TStrings);
    procedure SetItemHeight(Value: integer);
    procedure SetColor2(Value: TColor);
    procedure SetBitmap1(Value: TBitmap);
    procedure SetBitmap2(Value: TBitmap);
    { Private declarations }
  protected
    { Protected declarations }
    procedure OnItemClick(Sender: TObject);
    property OnClick : TNotifyEvent read FOnClick write FOnClick;  
  public
    { Public declarations }
    ItemIndex: integer;
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property Items:TStrings read ItemList write SetItems2;
    property Picture1:TBitmap read Bitmap1 write SetBitmap1;
    property Picture2:TBitmap read Bitmap2 write SetBitmap2;
    property ItemHeight:Integer read ItemHeightVar write SetItemHeight;
    property Color2:TColor read Color2var write SetColor2;
  end;

var
  Btn1, Btn2: array of TImage;
  BtnLabel: array of TLabel;
  j: integer;


procedure Register;

implementation


procedure TStyleList.Relist;
var lst:integer;
begin
  for lst:=0 to ItemList.count-1 do begin
    SetLength(Btn1, Length(Btn1) + 1);
    Btn1[lst]:=TImage.Create(Self);
    Btn1[lst].Parent := Self;
    Btn1[lst].Width:=Self.Width;
    Btn1[lst].Height:=ItemHeightVar;
    Btn1[lst].Left:=0;
    Btn1[lst].Top:=lst*ItemHeightVar;
    Btn1[lst].Picture.Bitmap.Assign(Bitmap1);
    Btn1[lst].Stretch:=true;
    //--------------
    SetLength(Btn2, Length(Btn2) + 1);
    Btn2[lst]:=TImage.Create(Self);
    Btn2[lst].Parent := Self;
    Btn2[lst].Width:=Self.Width;
    Btn2[lst].Height:=ItemHeightVar;
    Btn2[lst].Left:=0;
    Btn2[lst].Top:=lst*ItemHeightVar;
    Btn2[lst].Picture.Bitmap.Assign(Bitmap2);
    Btn2[lst].Stretch:=true;
    Btn2[lst].Visible:=False;
    //--------------
    SetLength(BtnLabel, Length(BtnLabel) + 1);
    BtnLabel[lst]:=TLabel.Create(Self);
    BtnLabel[lst].Parent := Self;
    BtnLabel[lst].Autosize:=False;
    BtnLabel[lst].Alignment:=taCenter;
    BtnLabel[lst].Width:=Self.Width;
    //BtnLabel[lst].Height:=ItemHeightVar;
    BtnLabel[lst].Left:=0;
    BtnLabel[lst].Top:=(lst*ItemHeightVar)+round((ItemHeightVar-BtnLabel[lst].Height)/2);
    BtnLabel[lst].Transparent:=true;
    BtnLabel[lst].Caption:=ItemList[lst];
    BtnLabel[lst].Tag:=lst;
    BtnLabel[lst].Font:=Self.Font;
    BtnLabel[lst].OnClick:=OnItemClick;
  end;
end;

procedure TStyleList.OnItemClick(Sender: TObject);
begin
   for j:=0 to Length(Btn1)-1 do Btn1[j].visible:=True;
   for j:=0 to Length(Btn2)-1 do Btn2[j].visible:=False;
   for j:=0 to Length(BtnLabel)-1 do BtnLabel[j].Font.Color:=Self.Font.Color;
   BtnLabel[(Sender as TLabel).tag].Font.Color:=Color2var;
   Btn1[(Sender as TLabel).tag].visible:=False;
   Btn2[(Sender as TLabel).tag].visible:=true;
   ItemIndex:=(Sender as TLabel).tag;
   if assigne(self.fonclick) then self.FonClick(self);
end;

procedure TStyleList.SetColor2(Value: TColor);
begin
  Color2var:=Value;
end;

procedure TStyleList.SetItemHeight(Value: integer);
begin
  ItemHeightVar:=Value;
end;

procedure TStyleList.SetItems2(Value: TStrings);
var i: integer;
begin
  if Value <> ItemList then
  begin
    ItemList.Clear;
    for i:=0 to Value.count do if not (Value[i]='') then ItemList.Add(Value[i]);
  end;
end;

procedure TStyleList.SetBitmap1(Value: TBitmap);
begin
   Bitmap1.Assign(Value);
end;

procedure TStyleList.SetBitmap2(Value: TBitmap);
begin
   Bitmap2.Assign(Value);
end;

constructor TStyleList.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 ItemList := TStringList.Create;
 Bitmap1:=TBitmap.Create;
 Bitmap2:=TBitmap.Create;
end;

procedure Register;
begin
  RegisterComponents('ActiveX', [TStyleList]);
end;


end.
Kib вне форума Ответить с цитированием
Старый 10.08.2010, 15:40   #6
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

А что ты собственно пытаешься cделать?

Цитата:
if assigne(self.fonclick) then self.FonClick(self);
if assigned(self.fonclick) - это первое )
Короче, ты уж прости, но весь этот код - полный бред. Без обид. Ты скажи что ты хочешь ?

Последний раз редактировалось r9m; 10.08.2010 в 15:52.
r9m вне форума Ответить с цитированием
Старый 10.08.2010, 15:54   #7
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

У меня в компоненте есть несколько image с процедурой
Код:
procedure TStyleList.OnItemClick(Sender: TObject);
. мне нужно чтобы при клике по image'м происходило две процедуры: их собственный(TStyleList.OnItemClick) и процедура клика по Self.
Kib вне форума Ответить с цитированием
Старый 10.08.2010, 17:25   #8
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

так у timage есть ведь свой OnClick. Или ты не про это. Ты по какой книге работаешь?
r9m вне форума Ответить с цитированием
Старый 10.08.2010, 19:57   #9
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

Вот именно. И мне нужно чтобы когда пользователь кликнул по timage'у сработал onClick Self'а. Работаю по книге "Фаронов Искусство создания компонентов Delphi", но там такого нет вроде.

Последний раз редактировалось Kib; 10.08.2010 в 20:39.
Kib вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура romka90 Microsoft Office Access 3 17.05.2010 00:44
Процедура Stradivarius Паскаль, Turbo Pascal, PascalABC.NET 2 09.04.2010 10:36
Динамическое создание компонента из компонента)) Impuls1989 Компоненты Delphi 8 22.10.2009 00:08
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17