Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Instanzen sind Pointer (https://www.delphipraxis.net/46260-instanzen-sind-pointer.html)

DGL-luke 21. Mai 2005 16:31


Instanzen sind Pointer
 
Kann so etwas funktionieren?

Delphi-Quellcode:
procedure TForm1.ExpandFromListClick(Sender: TObject);
var expanded:TStringList;
    reference,current:TListItem;
    s:string;
begin
expanded:=TStringList.Create;
expanded.Assign(ExpandDirs(LVList.Selected.Caption + LVList.Selected.SubItems[0])); //Expanddirs liefert eine stringlist
for s in expanded do
 begin
 current:=LVList.Items.Insert(LVList.Selected.Index+1); //das hier sollte noch gehen, current wird automatisch zeiger.
 current.Caption:=ExtractFilePath(s);
 current.SubItems.Add(ExtractFileName(s))
 end;
reference:=LVList.Selected;                           //wird auch automatisch zum zeiger
current:= LVList.GetNextItem(reference,sdbelow,[isSelected]); //current wird neu belegt
while not (current = nil) do                                   //schleife
 begin
  expanded.Assign(ExpandDirs(current.Caption+current.SubItems[0]));
  for s in expanded do
   begin
    current:=LVList.Items.Insert(LVList.Selected.Index+1);    //current dient wieder als zeiger auf eingefügtes listitem
    current.Caption:=ExtractFilePath(s);
    current.SubItems.Add(ExtractFileName(s))
   end;
  reference:=current;                                        //altes current wird neue referenz
  current:=LVList.GetNextItem(reference,sdbelow,[isSelected]);//current wird neu belegt
 end;

reference.Free;
current.Free;
end;
Oder muss ich da wirklich mit "echten" Pointern arbeiten und referenzieren/dereferenzieren?

EDIT: ja es geht anstandslos. hab mich jetzt getraut das ganze zu kompilieren :roll: . Hab den titel jetzt umbenannt um dem ganzen wenigstens ein bisschen sinn zu geben.

jbg 21. Mai 2005 18:25

Re: Instanzen sind Pointer
 
Zitat:

while not current= nil do
Das geht aber einfacher.

Phoenix 21. Mai 2005 18:28

Re: Instanzen sind Pointer
 
Zitat:

Zitat von jbg
Zitat:

while not current= nil do
Das geht aber einfacher.

Dann zeig aber auch gleich wie. Ich würde sowas über
Delphi-Quellcode:
while Assigned(current) do
lösen.

DGL-luke 21. Mai 2005 20:44

Re: Instanzen sind Pointer
 
womit ihr mich gleich auf einen klammerungsfehler aufmerksam gemacht habt, es muss natürlich

Delphi-Quellcode:
while not (current=nil) do
heissen.

@jbg: ja und wie geht das einfacher?

@Phoenix: ist ein Funktionsaufruf performanter als zwei boolesche operationen? vor allem angesichts dessen, dass assigned() nicht viel anderes machen wird?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr.

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 by Thomas Breitkreuz