Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TSringGrid, Обработка событий 
V
    Опции темы
CHERRY
Дата 16.7.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Прохожий
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.6.2002
Где: Одесса

Репутация: нет
Всего: -2



На StringGrid создаются 3 кнопки.
Как одной процедурой обработать 3 события.
Код

unit TestStringGrid;

interface

uses
  SysUtils, Classes, Controls, Grids,Dialogs,DesignIntf,Buttons;

Type
THeaderClickEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer) of object;

type
  TTestStringGrid = class(TStringGrid)
  private
    { Private declarations }
    sb:Array[1..3] of TBitBtn;
    fHeader:THeaderClickEvent;
  protected
    { Protected declarations }
   procedure HeaderClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
   property  OnHeaderClick:THeaderClickEvent read fHeader write fHeader;
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('CherryLib', [TTestStringGrid]);
end;

constructor TTestStringGrid.create(aowner:Tcomponent);
Var i:Integer;
begin
inherited create(aowner);
  //создаем кнопки в заголовке
  For i:=1 To 3 Do
  Begin
   sb[i]:=TBitBtn.Create(Self);
   sb[i].Parent:=Self;
   sb[i].Height:=RowHeights[0];
   //sb[i].Font.Style:=[fsBold];
   sb[i].Glyph.LoadFromResourceName(HInstance,'DN');
   sb[i].OnMouseDown:=HeaderClick;
  End;
  //sb[1].OnMouseDown:=BtnClick1;
  //sb[2].OnMouseDown:=BtnClick2;
  //sb[3].OnMouseDown:=BtnClick3;

  sb[1].Left:=0;
  sb[1].Width:=ColWidths[0]+ColWidths[1]+ColWidths[2];
  sb[1].Caption:='Имя';
  sb[2].Left:=sb[1].Width;
  sb[2].Width:=ColWidths[3];
  sb[2].Caption:='Размер';
  sb[3].Left:=sb[1].Width+sb[2].Width;
  sb[3].Width:=ColWidths[4];
  sb[3].Caption:='Модификация';
  //окончане создания кнопок

end;

procedure TTestStringGrid.HeaderClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
Var i:Integer; name:String;
Begin
  if Sender is TComponent then
  Begin
   name:=(Sender as TComponent).Name;
   For i:=1 To 3 Do
    if (Sender as TComponent).Name = 'im'+IntToStr(i) then
    Begin
    showmessage('HeaderClick'+IntToStr(i));
    End;
  End;

 IF  assigned(fHeader) Then  fHeader(Self,Button,Shift,X,Y)
End;

end.


Внутри компонента (Sender as TComponent).Name='';
Если создать событие в тестовой программе, то (Sender as TComponent).Name возвращает TestStringGrid1.
Кнопки как бы растворяются в компоненте.
Событие OnClick от кнопок вообще не генерится.

--------------------
Трясу надежды ветвь, но где желанный плод?
PM MAIL WWW   Вверх
kami
Дата 16.7.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(CHERRY @  16.7.2009,  16:10 Найти цитируемый пост)
Внутри компонента (Sender as TComponent).Name='';

Само собой.
Где присваивание типа
Код

sb[i].Name:='im'+IntToStr(i);

?
PM MAIL WWW   Вверх
CHERRY
Дата 16.7.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Прохожий
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.6.2002
Где: Одесса

Репутация: нет
Всего: -2



Спасибо! Прозрел! smile 
--------------------
Трясу надежды ветвь, но где желанный плод?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.