Delphi-PRAXiS
Seite 3 von 3     123   

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)

Sidorion 24. Aug 2007 13:12

Re: Stringlisten in mehreren Prozeduren nutzen
 
Darauf hinweisen, dass einne globale Instanz gesichert werden muss, damit man sie nicht verwendet, bevor sie angelegt (.create) wurde, denn das führt zu Zugriffsverletzungen. Ausserdem sollte sowas geregelt zurückgeabut werden (Ja nach Beenden der Applikation wird der Speicher eh wieder frei, aber bei sowas kanns auf die Reihenfolge ankommen).

s-off 24. Aug 2007 13:38

Re: Stringlisten in mehreren Prozeduren nutzen
 
Ja,

das ist allgemein bekannt, dass man kein Spanferkel essen kann, bevor es geboren wurde.
Nur mit Deinem Code-Beispiel und den dazu gehörigen Erläuterungen komme ich ehrlich gesagt nicht ganz klar.

*Ratter-ratter*

Ah, ok - jetzt verstehe ich. Du greifst auf Deine Stringliste nicht direkt zu, sondern über eine Funktion, die dafür sorgt, dass die Stringliste erzeugt wird, sofern noch nicht geschehen.
Da ich in der Regel keine globalen Objekte nutze, war mir der Grund für Dein Konstrukt nicht auf Anhieb klar; sorry.

Edit:
Rechtschreibfehler eingebaut.

Sidorion 24. Aug 2007 16:27

Re: Stringlisten in mehreren Prozeduren nutzen
 
Das mit der Stringliste ist ja nur ein Trivialbeispiel.
Manchmal benötigt man solche Konstrukte, für z.B.: eine Factory, die einem Instanzen von registrierten Klassen liefert. Ist dann praktisch, wenn solche Klassen für Kundenanpassungen überschrieben werden müssen. Dann reicht es der Factory zu sagen, wenn Klasse X angefordert wird, gib eine Instanz von abgeleiteter Klasse Y zurück. Erspart viel Schreibarbeit und man kann sichergehen, dass überall die Klasse ersetzt wird. Im Projekt meiner Firma werden z.B.: die Dialoge über eine Art Scriptsyntax erstellt. Da steht halt im Script einfach der Klassenname drin.

WIng2005 26. Aug 2007 12:38

Re: Stringlisten in mehreren Prozeduren nutzen
 
Sorry, dass ich derzeit ein winig passiv war (war ein anstrengendes WE)....

@s-off:bisher habe ich es genau so gemacht, wie du im 2. Beispiel gezeigt hast. (...also ausserhalb jeglicher Klassendeklaration deklariert....). Die weiteren aufgeführten Anmerkungen, die hier angesprochen wurden, sind für mich nicht wirklich nachvollziehbar (vielleicht hätter der Titel mit "Noob braucht Hilfe..." beginnen sollen.)
Der eigentliche Grund für die Stringlisten ist, dass ich über mehrere Proceduren hinweg Informationen sammeln (Format: "Text ; Text; Text") kann, welche dann einfach in eine CSV geschrieben werden.
Diese dienen dann als "Protokoll" einer Berechnung.
Da die Infos aber in mehreren Prozeduren und Funktionen entstehen, muß ich global auf die gleiche Stringliste zugreifen können... Das ist schon alles. Schöner wäre natürlich (habe ich so aber noch nicht gesehen), wenn ich die CSV direkt beschreiben könnte. Bisher habe ich eine korrekte Spaltentrennung nur via Stringlisten hinbekommen.


MFG und danke für die zahlreichen Hinweise
Steffen

WIng2005 27. Aug 2007 10:13

Re: Stringlisten in mehreren Prozeduren nutzen
 
Das Problem hat sich geklärt. Bin alles nochmal durchgegangen und habe festgestellt, dass das erste
Schreiben in die Liste VOR dem eigentlichen Erzeugen stattfand. Dumm!

Naja, habe es entsprechend geändert...


MFG
Steffen

grenzgaenger 27. Aug 2007 22:45

Re: Stringlisten in mehreren Prozeduren nutzen
 
sag mal, warum machste es nicht so, wie in der prozeduralen progammierung...

Delphi-Quellcode:
procedure main;
var
 sl: tstringlist;
begin
 sl := tstringlist.create;
 try
  sub(sl);
 finally
  sl.free;
 end;
end;

procedure sub(const sl: tstrinlist);
begin
// mach irgendwas mit sl...
end;

WIng2005 28. Aug 2007 09:38

Re: Stringlisten in mehreren Prozeduren nutzen
 
Im Endeffekt mache ich es ja so, nur dass ich die SL nicht jedesmal übergebe, sondern (auch aus Gründen der vielen
Änderungen, die ich sonst vornehmen müßte) deklariere sie global.

MFG
Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Seite 3 von 3     123   

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