GARANTIR DESCONTO

Fórum Problemas com criacao de componentes... #258680

16/11/2004

0

Olá galera..
Estou tentando criar um componentes pela primeira vez para facilitar algumas funcoes que sempre utilizo.
estou tentand criar um componente derivado do TStringGrid que execute alguns comandos nos eventos. Naum quero criar evento propriedades.. soh quero executar alguns comandos por exemplo no OnSelectCell, ou no On KeyPress do StringGrid..
No codigo que montei o evento KeyPress esta funcionando belezinha!!!
Agora preciso executar comandos tb no OnGetEditMask. Qdo coloco a funcao no secao PROTECTED. me retorna a seguinte mensagem de [b:de46cfb4b2]erro [/b:de46cfb4b2]:
[color=red:de46cfb4b2]Declaration of ´GetEditMask´ differs from previuos declaration.[/color:de46cfb4b2]

O que to fazendo de errado????
Segue o codigo abaixo
Valew galera
Abracos
Gustavo

unit StringGridAcesso;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids,Mask;

type
  TCellsType = (ctNone, ctInteger, ctNumeric, ctDate, ctString);
  TStringGridColItens = record
    ColType   : TCellsType;
    MaxLen    : Integer;
    MaskEdit  : String;
    CanSelect : Boolean;
  end;
  TStringGridColDetail = array [0..9999] of TStringGridColItens;

  TStringGridAcesso = class(TStringGrid)
  private
    { Private declarations }
  protected
    { Protected declarations }
    procedure KeyPress(var Key: Char); override;
******* O ERRO ESTA AQUI ******************
    procedure GetEditMask(ACol, ARow: Longint; var Value: String);  ******* O ERRO ESTA AQUI ******************
override;
  public
    { Public declarations }
    ColDetails: TStringGridColDetail;
    constructor Create (AOwner : TComponent); Override;
    destructor Destroy; override;
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents(´Novos´, [TStringGridAcesso]);
end;

constructor TStringGridAcesso.Create(AOwner: TComponent);
var FCont:integer;
begin
  inherited;
  for FCont:=0 to 9999 do
    begin
    ColDetails[FCont].CanSelect := True;
    ColDetails[FCont].ColType   := ctNone;
    ColDetails[FCont].MaskEdit  := ´´;
    ColDetails[FCont].MaxLen    := 0;
    end;
end;

destructor TStringGridAcesso.Destroy;
begin
  inherited;
end;


procedure TStringGridAcesso.GetEditMask(ACol, ARow: Longint; var Value: String);
begin
  {mask cell se for do tipo Tdate}
  case ColDetails[Col].ColType of
    ctDate : Value := ´!99/99/0000;1; ´;
  end;

end;

procedure TStringGridAcesso.KeyPress(var Key: Char);
begin
  {Filtrar digitacao de acordo com o tipo do campo}
  case ColDetails[Col].ColType of
    ctDate,ctInteger : if (key in [´0´..´9´,8,13]) then Key := Key
                        else Key := 0;
    ctNumeric        : if (key in [´0´..´9´,´,´,8,13]) then Key := Key
                        else Key := 0;
    ctNone,ctString  : Key := Key;
  end;

  {limitar digitacao dos campos}
  if not (key in [8, 13]) then
    if (ColDetails[Col].MaxLen > 0) and
       (Length(Cells[Col,Row]) > ColDetails[Col].MaxLen) then
       key := 0;

  inherited;
end;

end.



Gustavo M

Gustavo M

Responder

Posts

17/11/2004

Massuda

O problema é que a classe TStringGrid já possui uma [b:354281ba9c]função[/b:354281ba9c] de nome GetEditMask, declarada como
TStringGrid = class(...

    function GetEditText(ACol, ARow: Longint): string; override;
    ...

Mude sua procedure GetEditText para uma função conforme a declaração acima.


Responder

Gostei + 0

17/11/2004

Paulo_amorim

Olá

O problema ocorre pois o evento OnGetEditMask eh do tipo TGetEditEvent...

type TGetEditEvent = procedure (Sender: TObject; ACol, ARow: Longint; var Value: String) of object;

No caso, vc se esqueceu do parâmetro
Sender: TObject



Espero que ajude
Até+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar