Array
(
)

Evento no String Grid

Mascotepc
   - 30 jan 2006

Pessoal estou tentando descobrir qual o evento que controla a saída de uma célula no String Grid através do Mouse, ou seja, quando eu estou em uma célula e clico em outra. Poderia usar o OnMouseDown ou OnMouseUp, mais o meu maior problema é que quero pegar as informações que estão na célula onde estou, não para onde estou movendo.

Exemplo: Estou na Celula(1,1) é vou clicar na Célula(2,1) , na hora que clicar na Célula(2,1) quero chamar uma função que recebe como parametro as informações da Célula(1,1).

OBS: Nem sempre a troca de célula é de uma logo após a outra, ou seja, as vezes posso sair da Celula(1,1) para a Célula (5,2).

Obrigado.


Michael
   - 30 jan 2006

Olá!

Infelizmente a classe TStringGrid não provê nenhum evento que atenda às suas necessidades. Porém, é extremamente simples extender o componente, adicionando um gatilho para a situação desejada. Veja um esboço:

#Código


type
TOnCellExitEvent = procedure(Sender: TObject; ACol, ARow: Integer; var CanExit: Boolean) of object;

TExtStringGrid = class(TStringGrid)
private
FOnCellExit: TOnCellExitEvent;
FLastCol, FLastRow: LongInt;
protected
function SelectCell(ACol, ARow: Longint): Boolean; override;
public
constructor Create(AOwner: TComponent); override;
published
property OnCellExit: TOnCellExitEvent read FOnCellExit write FOnCellExit;
end;

implementation

constructor TExStringGrid.Create(AOwner: TComponent);
begin
inherited;
FLastCol := -1;
FLastRow := -1;
end;

function TExStringGrid.SelectCell(ACol, ARow: LongInt): Boolean;
var
CanExit: Boolean;
begin
if (FLastCol = -1) and (FLastRow = -1) then
begin
FLastCol := ACol;
FLastRow := ARow;
inherited;
end
else
begin
CanExit := True;
if Assigned(FOnCellExit) then
FOnCellExit(Self, FLastCol, FLastRow, CanExit);
if CanExit then
inherited;
end;
end;


O esboço acabou virando a arte final... ;-)

Não testei esse código, portanto não posso garantir que vai funcionar de primeira.

[]´s


Mascotepc
   - 30 jan 2006

Michael, desculpe mais sou meio leigo neste tipo de implementação, onde eu colocaria este código para extender o meu StringGrind ?


Mascotepc
   - 31 jan 2006

Essa extensão do componente eu faria na mesma Unit onde esta meu String Grid ?