Hoi,
Ik wil graag weten of je een afteredit event aan een eigen procedure kan koppelen.
Hoi,
Ik wil graag weten of je een afteredit event aan een eigen procedure kan koppelen.
Ja
MijnDataSet.AfterEdit := <mijn procedure >;
Last edited by GolezTrol; 17-Oct-19 at 13:24.
Delphi is great. Lazarus is more powerfull
In feite doe je dat al als je een event handler koppelt in design time. Je dubbelklikt het event, waarna de IDE een procedure voor je maakt, én deze via de dfm koppelt aan dat event. In runtime kan het dus ook, zoals jkuiper laat zien. Maar de procedure moet wel de juiste signature hebben, d.w.z. dezelfde parameters als het event-type. In het geval van een AfterEdit event is dat een TDataSetNotifyEvent:
Delphi Code:
TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;
Dus je procedure moet ook een TDataSet accepteren.
Je kan natuurlijk ook m.b.v. de IDE een event handler koppelen, en van daaruit weer een andere procedure aanroepen, waarmee je dus een stuk vrijer bent om die te declararen hoe en waar je wilt.
1+1=b
Bedankt voor de info.
Hoe koppel je de TDataSetNotifyEvent aan je eigen procedure? Dat is mij niet helemaal duidelijk.
Je moet dus een procedure maken die matcht met de signature: procedure(DataSet: TDataSet) of object;
Die signature betekent het volgende:
- Het moet een procedure zijn (geen function).
- Hij moet een TDataset accepteren als normale parameter (geen var, out, const).
- Hij moet onderdeel zijn van een object, ofwel een method in een class (inclusief form of data module), en geen losse procedure ergens in een unit.
Die procedure kan er dus bijvoorbeeld zo uitzien:
Delphi Code:
procedure TMijnForm.MijnAfterEditProc(DataSet: TDataSet); begin ShowMessage('Klaaaar!'); end;
Daarna kan je 'm simpelweg toekennen door de procedure aan de eventproperty to te kennen. Je gebruikt daarbij een instance van het object waar hij in zit, zoals MijnForm1, en de naam van de procedure zonder haakjes of parameters:
Delphi Code:
MijnDataModule1.DieEneDataSet.AfterEdit := MijnForm1.MijnAfterEditProc;
MijnDataModule1 of MijnForm1 mag je natuurlijk weglaten als je dit doet vanuit een non-static method in de betreffende datamodule of form.
1+1=b
Dank. Ga het uitwerken.
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks