О событиях
От: Аноним  
Дата: 04.11.05 16:40
Оценка:
Подскажите такую вещь


unit ExGrids;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Grids, Types, Math,
  Dialogs, Controls;


type TExGridCell = class;
     TOnSelectEvent = procedure(Sender: TObject; ACol, ARow: integer) of object;

  TExGridCell = class (TComponent)
  private
    FSelected: boolean;
    FOnSelect: TOnSelectEvent;
    procedure SetSelected(const Value: boolean);
  protected
    procedure DoSelect(ACol,ARow: integer); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    property OnSelect: TOnSelectEvent read FOnSelect write FOnSelect;
    property Selected: boolean read FSelected write SetSelected;
end;

type
  TExGrid = class (TCustomGrid)
  private
    FCells: TList;
    procedure SelectCell(Sender: TObject; ACol, ARow: integer);
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure SelectCell(Sender: TObject; ACol, ARow: integer);
    property Cells[ACol, ARow: Integer]: TExGridCell read GetCells write SetCells;
  end;

implementation

constructor TExGrid.Create(AOwner: TComponent);
var i, Col, Row: integer;
    m: TMethod;
begin
  inherited Create(AOwner);
  FCells:=TList.Create;
  for i:=1 to RowCount*ColCount do
  begin
      FCells.Add(TExGridCell.Create(self));
      Cells[Col,Row].OnSelect:=SelectCell;
  end;
end;

destructor TExGrid.Destroy;
begin
  inherited Destroy;
end;


class procedure TExGrid.SelectCell(Sender: TObject; ACol, ARow: integer);
begin
  ShowMEssage('clicked on '+IntToStr(ACol)+'/'+IntToStr(ARow))  ;
end;


{ TExCell }

constructor TExGridCell.Create(AOwner: TComponent);
begin
  inherited;
  FSelected:=false;
  FText:='';
  FColor:=clWhite;
end;

destructor TExGridCell.Destroy;
begin
  inherited;
end;

procedure TExGridCell.DoSelect(ACol, ARow: integer);
begin
  if Assigned(FOnSelect) then OnSelect(Self) else ShowMessage('Not assigned');
end;

procedure TExGridCell.SetSelected(const Value: boolean);
begin
  FSelected:=Value;
  DoSelect(Col,Row)
end;

end.


Так вот в if Assigned(FOnSelect) then OnSelect(Self) else ShowMessage('Not assigned');
Assigned(FOnSelect) возвращает false

Прочитал статьи которые выложены на сайте по теме событий и аналогичные вопросы, но так и не нашел причину такой вот неисправности в коде, подскажи с примера. заранее благодарен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.