[lazarus] Trying to port a Delphi graph

Tony Maro tony at maro.net
Sun Mar 30 22:21:31 EST 2003


Well, that's not quite working for me yet, but I've always been weak
with pointers, so I may just be confused.  Here's the appropriate info I
think to make this decision:

Type
TTrapezeInfo = record
    Vals : Array[0..3] of T3DPoint;  //real coords
    Pixs : Array[0..3] of TPoint;  //mapped positions
    LineNo : LongInt;
    DistanceToViewer : Double;
    IsEdge : Boolean;  //True for those forming the walls
    AVG : T3DPoint;    //average of real values
    Color : TColor;
end;
PTrapezeInfo = ^TTrapezeInfo;

Then, a TList called FTrapezes is created and items are added as:
T := New(PTrapezeInfo);
fTrapezes.Add(T);

Then the dispose originally was "Dispose(FTrapezes[i])"
I've also tried "Dispose((FTrapezes[i] as PTrapezeInfo));" which results
in an invalid typecast.  I also tried "Dispose((FTrapezes[i] as
TTrapezeInfo));" just for the heck of it and that fails with invalid
typecast as well.

Finally I did:

Procedure TGraph3D.ClearTrapezes;
var
  i : LongInt;
  P: PTrapezeInfo;
begin
  For i := 0 to FTrapezes.Count-1 do begin
    P := FTrapezes[i];
    Dispose(P);
    FTrapezes[i] := nil;
  end;
  FTrapezes.Pack;
end;

And I THINK this is right... someone yell if not.

On Sun, 2003-03-30 at 15:54, Marc Weustink wrote:
> At 15:44 30-3-2003 -0600, Tony Maro wrote:
> >I'm trying to port a 3D graph unit I found for Delphi.  I've already
> >done much of the conversion (messages and such) but ran into the
> >following routine:
> >
> >Procedure TGraph3D.ClearTrapezes;
> >var i : LongInt;
> >begin
> >   For i := 0 to FTrapezes.Count-1 do begin
> >     Dispose(FTrapezes[i]);
> >     FTrapezes[i] := nil;
> >   end;
> >   FTrapezes.Pack;
> >end;
> >
> >FTrapezes is defined as:
> >
> >FTrapezes : TList;        //casts to PTrapezeInfo
> >
> >But when it hits the "Dispose" line, I get:
> >"Use of NEW or DISPOSE is not possible for untyped pointers"
> >
> >I'm not familiar with the DISPOSE keyword or function.  Can someone help
> >me decipher what is supposed to be happening here?
> 
> Dispose is the opposite of New.
> 
> With New you can allocate dynamic variables like:
> 
> var
>    P: PMyRecord
> begin
>    New(P);
> 
> if you don't need your variable anymore you should use Dispose to fee memory
> In this case Dispose(P);
> 
> FPC in your case complains, since it doesn't know how to dispose a pointer. 
> You can avoid that by casting FTrapezes[i] to the PointerType it contains
> 
> Marc
> 
> 
> _________________________________________________________________
>      To unsubscribe: mail lazarus-request at miraclec.com with
>                 "unsubscribe" as the Subject
>    archives at http://www.lazarus.freepascal.org/mailarchives
-- 
Thanks,

Tony Maro

Need a Linux replacement for Microsoft Money?
Check out CheckBook Tracker!
http://tony.maro.net/






More information about the Lazarus mailing list