next up previous contents
Next: Future extensions Up: How to implement a Previous: Drawing on the window   Contents

Passing data between update and plugin function

The last topic we discuss is how to pass computational data from the plugin function to the update function. Two methods are quite inelegant: it is possible to write a file, or to pass data on the stack.

The best solution, however, is to use the my pointer in TStack to create a struct containing data of interest for the update function.

Assume, we want to pass a list of points. First, one should define a data structure to be passed:

type TMyData = record
      xP                 : Array[1..MAX_POINTS] of Real;
      yP                 : Array[1..MAX_POINTS] of Real;
end;

In the plugin method, at the beginning of the computation, we reserve memory for this structure, then we store the pointer in my and initialize it.

  if stk.Progress = 0 then
           begin
           GetMem(Stk.My, SizeOf(TMyData));
           with TMyData(Stk.My^) do
               begin
               for i:=1 to MAX_POINTS do
                      begin
                      xP[i]:=0;
                      yP[i]:=0;
                      end;
               end; {with}
            end;

In the update function, we free the reserved memory at the end of the computation with

if Stk.Progress = 100 then FreeMem(Stk.My, SizeOf(TMyData));

To access the first element of the xP array in both function and update method we typecast the my pointer to the TMyData structure before accessing the field xP:

 TMyData(Stk.My^).xP[1];


next up previous contents
Next: Future extensions Up: How to implement a Previous: Drawing on the window   Contents
Tiziano Mengotti 2004-03-27