Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringlisten in mehreren Prozeduren nutzen (https://www.delphipraxis.net/98227-stringlisten-mehreren-prozeduren-nutzen.html)

s-off 23. Aug 2007 15:52

Re: Stringlisten in mehreren Prozeduren nutzen
 
Zitat:

Zitat von mkinzler
Er fragt ab, ob die Variable ein Objekt referenziert

'Assigned' kann aber keine ungültigen oder nicht initialisieren Zeiger 'aufspüren' - somit liesse sich ein Laufzeitfehler bei nicht vorhandenem Objekt so nicht verhindern.

mkinzler 23. Aug 2007 15:54

Re: Stringlisten in mehreren Prozeduren nutzen
 
Es prüft nur auf Nil. wenn das Objekt bereits zerstört ist, liefert .Assigned natürlich true. deshalb ist es ja sinnvoll FreeAndNil zu verwenden

s-off 23. Aug 2007 15:58

Re: Stringlisten in mehreren Prozeduren nutzen
 
Ja, das ist mir schon klar.

Aber Du stimmst mir doch sicherlich zu, dass das Assigned an dieser Stelle überflüssig ist, da ein einfaches FreeAndNil(sl) ausreichen würde, oder?

Bin gerade etwas verwirrt.

RavenIV 23. Aug 2007 15:59

Re: Stringlisten in mehreren Prozeduren nutzen
 
Kommt wieder zurück zum eigentlichen Thema...

mkinzler 23. Aug 2007 16:00

Re: Stringlisten in mehreren Prozeduren nutzen
 
Doppelt hält halt besser :)

s-off 23. Aug 2007 16:02

Re: Stringlisten in mehreren Prozeduren nutzen
 
Zitat:

Zitat von RavenIV
Kommt wieder zurück zum eigentlichen Thema...

Sorry für den Schwenk Richtung OT :?

Aber ich glaube, dass wir nicht weiterkommen, solange WIng2005 nicht mal die Senftube öffnet.

WIng2005 23. Aug 2007 20:42

Re: Stringlisten in mehreren Prozeduren nutzen
 
So nun ich mal wieder....
Ich kann leider erst am Montag testen, was ihr so schreibt (Delphi habe ich leider nur an der Arbeit und ab heute
ist Wochenende :-D ).
Die Stringlist ist einfach im public-Teil der Unit deklariert. In der Prozedur, in welcher die Liste als
solche erzeugt wird, kann ich uneingeschränkt schreiben (A). Jedoch bricht die Anwendung ab, sobald ich in B versuche
selbiges zu tun. Das ist mein ganzes Problem....

MFG
Steffen

s-off 24. Aug 2007 07:05

Re: Stringlisten in mehreren Prozeduren nutzen
 
Zitat:

Zitat von WIng2005
Die Stringlist ist einfach im public-Teil der Unit deklariert.

Eine Unit ist nichts anderes als eine Datei und hat somit keinen Public-Teil in dem Sinne. Du wolltest hier sicherlich etwas schreiben wie
Zitat:

Die Stringlist ist einfach im public-Teil der Klasse deklariert.
Oder meinst Du, dass Du die Strginliste global, also ausserhalb jeglicher Klassendeklaration deklariert hast? Das sähe dann in etwa so aus:

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Windows,
   Messages,
   SysUtils,
   Variants,
   Classes,
   Graphics,
   Controls,
   Forms,
   Dialogs;

Type
   TForm1 = Class(TForm)
   private
      { Private-Deklarationen } //<--hier private (in der Klasse TForm1)
   public
      { Public-Deklarationen } //<--hier public (in der Klasse TForm1)
   End;

Var
   Form1: TForm1;
   sl: TStringlist; //<-- hier global

Implementation

{$R *.dfm}

End.
Wir sind nun leider nicht schlauer, als wir es vor Deiner Antwort waren :wink:

Sidorion 24. Aug 2007 09:03

Re: Stringlisten in mehreren Prozeduren nutzen
 
Nur mal nebenbei: Globale Objekte sollte man über ein Singleton absichern, sprich: eine Funktion zum Zugriff deklarieren. Im Initialzation-Abschnitt wird der Zeiger auf Nil gesetzt, im finalization das Objekt zerstört und in der Funktion erstelle, falls es noch nicht erstellt wurde, also z.B. so:
Delphi-Quellcode:
Unit Foo;

Interface

Function MyStringList: TStringList;

Implementation
Var
  oMyList: TStringList;

Function MyStringList: TStringList;
Begin
  If Not Saaigned(oMyList)
  Then oMyList:=TStringList.Create;
  Result:=oMyList;
End;

...

Initialization
oMyList:=Nil;

Finalization
FreeAndNil(oMyList);

End.
Dann ist auch gewährleistet, dass diese Liste auch erstellt wird bei Benutzung. So wird allerdings die vorzeitige Zerstörung nicht verhindert, da muss man dann noch aufpassen. Solange man nur über die Funktion zugreift und den Destruktor nicht ruft, passiert nix.

s-off 24. Aug 2007 09:06

Re: Stringlisten in mehreren Prozeduren nutzen
 
Zitat:

Zitat von Sidorion
Nur mal nebenbei:[...]

Was möchtest Du jetzt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Seite 2 von 3     12 3      

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