Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozedur in Typendeklaration (https://www.delphipraxis.net/11343-prozedur-typendeklaration.html)

Christian Seehase 4. Nov 2003 20:27

Re: Prozedur in Typendeklaration
 
Moin Niels,

ich auch, und das sieht dann so aus:

Delphi-Quellcode:
procedure New(var node: dNode);
begin
  // Was auch immer damit passieren soll
end;

procedure TForm1.Button1Click(Sender: TObject);

var
  pWork : pNode;
  dWork : dNode;

begin
  pWork.new := @new;
  dWork    := @dWork;
  pWork.new(dWork);
end;
Klappt auch, obwohl ich die Wahl von new als Prozedurenamen ansonsten als unglücklich erachte, da es eine Prozedur gleichen Namens ja schon gibt.
BTW:
Den Recordtypen mit p beginnen zu lassen, und den zugehörigen Pointer mit d hat mich offengestanden ein klein wenig irritiert. Eigentlich beginnen Pointer mit p (besser P).

Niels 4. Nov 2003 20:44

Re: Prozedur in Typendeklaration
 
Danke. Ich guck erstmal wie weit ich jetzt komm :)

Wegen der Typenbezeichnung:
ich hatte immer:

type
dpnode = ^dnode
dnode = record...

aber dpnode war zu lang und intern ist das ja sowieso egal.

neolithos 4. Nov 2003 20:51

Re: Prozedur in Typendeklaration
 
Delphi-Quellcode:
unit Unit2;
interface

type
  PVListNode = ^TVListNode;
  TVListNode = record
    pNext : PVListNode;
    fData : record end;
  end;

  TVList = class
  private
    pFirst : PVListNode;
    iDataSize : Integer;
  protected
    function GetLast : PVListNode;
  public
    constructor Create(aiDataSize : Integer);
    destructor Destroy; override; // fehlt noch

    procedure AddItem(const fData);
    procedure DeleteAll;
  end;

implementation


{ TVList }

procedure TVList.AddItem(const fData);
var pNew : PVListNode;
begin
  GetMem(pNew, SizeOf(TVListNode) * iDataSize);
  pNew^.pNext := nil;
  Move(fData, pNew^.fData, iDataSize); // Daten in Buffer

  if pFirst = nil then
     pFirst := pNew
  else
     GetLast^.pNext := pNew;
end;

constructor TVList.Create(aiDataSize : Integer);
begin
  inherited Create;
  pFirst := nil;
  iDataSize := aiDataSize;
end;

destructor TVList.Destroy;
begin
  DeleteAll;
  inherited;
end;

function TVList.GetLast: PVListNode;
begin
  if pFirst = nil then
     Result := nil
  else
     begin
       Result := pFirst;
       while Result^.pNext <> nil do
         Result := Result^.pNext;
     end;
end;

end.
So, sieht das ding komplett aus.

Anmerk: wie haben via ICQ getextet.

Niels 4. Nov 2003 21:05

Re: Prozedur in Typendeklaration
 
Danke für deine Hilfe (auch wenn ichs über ICQ schon gesagt hab) :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz