Am Mittwoch, den 06.08.2008, 12:15 +0200 schrieb T. Guilleminot: > Hi, > > I'd like to be able to pass/access variable(s ?) to/from the "data" part > of the "g_signal_connect" function, eg : > > ... > Procedure MyActionProcedure (widget : pGtkWidget ; data : gpointer) > cdecl; > begin > ... // Using data content here... > end; > ... > g_signal_connect (G_OBJECT(pMyButton), 'button-release-event', > G_CALLBACK(@MyActionProcedure), MyData); > // Passing information here > -------------------------------------------------------------------^^^^^^ > ... > > However I'm unable to handle it once MyActionProcedure called. > > - Does anyone have a *simple* example to do this ? I can only find C > sample on the web. > - Is "data" able to store single or multiple (and different) variable ? > - If multiple variables possible, can they be of different types > (integer, string...) ?
You can pass inside the data-pointer what you like to, from my memory: type TMyDataRec: record a: integer; b: string; end; TMyDataObj: class procedure DoSomething; end; Procedure MyActionProcedure (widget : pGtkWidget ; data : gpointer) cdecl; begin { you have to know or check the type of data's content and cast it! } with data as TMyDataObj do begin DoSomething; or if (TMyDataRec(data).a = 123) then begin ... At the spot where you are passing the pointer the data has to be set up *before* connecting the callback. var MyData: TMyDataRec; MyData2: TMyDataObj; begin MyData.a := 124; g_signal_connect (G_OBJECT(pMyButton), 'button-release-event', G_CALLBACK(@MyActionProcedure), MyData); MyData2 := TMyDataObj.create; g_signal_connect (G_OBJECT(pMyButton2), { <-- another button } 'button-release-event', G_CALLBACK(@MyActionProcedure), MyData2); { <-- another data item } The only way to change the data item after assigning would be to hold a reference to it and set it on the fly (e.g. for remembering a state or the like). HTH, Marc _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal