Wat werkt er met de oplossing van Frans niet?
Krijg je een foutmelding?
"lijkt niet te werken" is niet echt een probleemomschrijving.
Kun je anders eens een voorbeeld-unit neerzetten waarmee je aan het werken bent.
Dit werkt bijvoorbeeld prima:
Code:
TForm1 = class(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
SQLQuery1: TSQLQuery;
procedure Button1Click(Sender: TObject);
procedure CheckZoeksch(Sender: TObject);
procedure CheckValidat(Sender: TObject);
procedure EigenOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EigenOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ private declarations }
public
{ public declarations }
end;
//...
with TDBEdit.Create(aParent) do
begin
Name := 'edt' + aSQL.FieldByName('VPOSNR').AsString;
DataSource := hDTO;
DataField := aSQL.FieldByName('VLDNAA').AsString;
OnExit := @CheckValidat;
OnEnter := @CheckZoeksch;
OnKeyUP := @EigenOnKeyUp;
OnKeyDown := @EigenOnKeyDown;
Parent := aBox;
Top := aTop;
Width := 190;
Left := 095;
end;
// ....
procedure TForm1.CheckValidat(Sender: TObject);
begin
//
end;
procedure TForm1.CheckZoeksch(Sender: TObject);
begin
//
end;
procedure TForm1.EigenOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
//
end;
procedure TForm1.EigenOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
//
end;
Maar je moet dus wel die procedures EigenOnKeyUp en EigenOnKeyDown in je eigen form (of een dummy Class zoals je is geadviseerd) definiëren.
Maar dat moest bij die CheckZoeksch, CheckValidat ook. Hoe heb je die nu gedefinieerd ???
Tevens heb jij achter "OnEnter := @CheckZoeksch" geen ; staan.
Dit is dus niet echt werkende code.
Het is niet handig om code over te typen bij het plaatsen op een forum want een typefout is snel gemaakt en zou nét het probleem dat je hebt kunnen verbergen.
Een "plain procedure" is een procedure die je dus gewoon zelf maakt en nergens in zet:
Code:
procedure mijnprocedure;
begin
end;
Wat echter voor dit soort dingen nodig is is een procedure die in een class staat:
Code:
type
TForm1 = class(TForm)
procedure CheckZoeksch(Sender: TObject);
procedure CheckValidat(Sender: TObject);
procedure EigenOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EigenOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
// ....
procedure TForm1.CheckZoeksch(Sender: TObject);
begin
end;
Volgens mij heb je die CheckZoeksch en CheckValidat ook niet als "plain procedures" gedefinieerd anders zou Lazarus klagen over:
Code:
unit1.pas(63,15) Error: Incompatible types: got "<address of procedure(TObject);Register>" expected "<procedure variable type of procedure(TObject) of object;Register>"
Dus als je het met die EigenOnKeyDown en EigenOnKeyUp op dezelfde manier doet moet het goed gaan.
Originally Posted by
eugene
- OnExit en OnEnter zijn TNotifyEvents en roepen een procedure aan zonder parameters.
Dat is niet helemaal waar? Jij roept de procedure namelijk nergens zelf aan. Je kent (met die @) alleen maar de functie-ingang toe aan OnExit en OnEnter. Deze worden echter in de programmatuur echt wel met een parameter (n.l. Sender) aangeroepen.
Bookmarks