AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo mag TStringList nicht?

Offene Frage von "xSkaschY"
Ein Thema von xSkaschY · begonnen am 8. Jul 2008 · letzter Beitrag vom 9. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#1

Memo mag TStringList nicht?

  Alt 8. Jul 2008, 17:54
Hallo,

ich versuch gerade ein Memo mit Daten aus einer TStringList zu füttern, jedoch verweigert dat Memo die Annahme mit eifrigen nicht anzeigen.

Warum ich eine Memo mit einer TStringList füllen möchte?

Ich muss die Daten vorher aufbereiten und das ist für mich der "bequemste" weg.


So nun zum Quellcode:

Die Funktion die mir die Daten bereitstellt:

Delphi-Quellcode:
function TConfiguration.getData: TStringList;
var
        i: Integer;
        sBuffer: String;
        aMotdItems: TArray;
        slTemp: TStringList;
begin
        sBuffer := '';
        slTemp := TStringList.Create;
        try
                for i := 0 to slConfig.Count - 1 do begin
                        sBuffer := sBuffer + slConfig[i];
                end;

                sBuffer := Copy(sBuffer, (Pos('{', sBuffer)+1));
                sBuffer := Copy(sBuffer, 0, (Pos('}', sBuffer)-1));


                aMotdItems := explode('"', sBuffer, 0);

                // ich brauch den alten Buffer nicht mehr, also weg damit.
                sBuffer := '';

                for i := 0 to Length(aMotdItems) - 1 do begin
                        if (Trim(aMotdItems[i]) <> ',') and (Trim(aMotdItems[i]) <> '') then begin

                                // Daten in die Stringlist packen.
                                slTemp.Add(Trim(aMotdItems[i]));
                        end;
                end;
        finally
                // Array verarbeitet, also länge auf 0
                SetLength(aMotdItems, 0);

                // hier gebe hier die ganze StringList als "return" Value an.
                Result := slTemp;

                // Tschüss Stringlist, war schön mit dir zu arbeiten.
                slTemp.Free;
        end;
end;

Und so probiere ich die TStringList in das Memo zu bekommen:

memoConfiguration.Lines := oConfiguration.getData;
Warum zum Teufel mag der des nicht?

Die Stringlist ist mit 5 Werten gefüllt. (Können aber mal mehr oder mal weniger sein.)


LG Toby
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

Re: Memo mag TStringList nicht?

  Alt 8. Jul 2008, 17:57
Delphi-Quellcode:
memo.Lines.Clear;
memo.lines.AddStrings(myStringList);
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
8. Jul 2008, 17:58
Dieses Thema wurde von "Phoenix" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.
Und TMemo ist ein Control... und TStringList gehört auch zur VCL.. also eher die andere Sparte.
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Memo mag TStringList nicht?

  Alt 8. Jul 2008, 17:59
Lines vom Memo sind vom Typ TStrings und nicht vom Typ TStringlist.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Memo mag TStringList nicht?

  Alt 8. Jul 2008, 17:59
Ich würde das anders machen:procedure TConfiguration.getData(const sList: TStrings); Als sList kannst Du dann direkt Memo.Lines angeben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Memo mag TStringList nicht?

  Alt 8. Jul 2008, 18:04
Danke DeddyH,

so werd ich das auch machen da

Delphi-Quellcode:
// hier gebe hier die ganze StringList als "return" Value an.
Result := slTemp;

// Tschüss Stringlist, war schön mit dir zu arbeiten.
slTemp.Free;
slTemp.Free zerstört irgendwie die Rückgabe.


Edit: Jup Funktioniert so bestens! Danke!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

Re: Memo mag TStringList nicht?

  Alt 8. Jul 2008, 18:06
Klar, Du müsstest die Stringliste dann außerhalb der Funktion wieder freigeben. Das ist sehr unschön und wird gerne mal vergessen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Memo mag TStringList nicht?

  Alt 8. Jul 2008, 18:11
Joa das wirklich sehr unschön, die von dir vorgeschlagene Variante ist recht gut, wusste nicht das man des auch so übergeben kann.

Das erspart einem eine Menge Arbeit!
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Memo mag TStringList nicht?

  Alt 9. Jul 2008, 12:40
Zitat von DeddyH:
Ich würde das anders machen:procedure TConfiguration.getData(const sList: TStrings); Als sList kannst Du dann direkt Memo.Lines angeben.
Das ist der Beste Weg.
Irgendwelche Objekte in Funktionen erzeugen und als Returnwert zurückgeben ist immer fehleranfällig.
Am Besten solche Objekte als var-Parameter oder besser noch out-Parameter übergeben lassen.
Dann muss / kann sich die aufrufende Procedure um das Erstellen und Zerstören kümmern.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Memo mag TStringList nicht?

  Alt 9. Jul 2008, 12:47
Moin!

Zitat von RavenIV:
Irgendwelche Objekte in Funktionen erzeugen und als Returnwert zurückgeben ist immer fehleranfällig.
Und falsch, da man niemals die Grundregel erfüllen kann, Objekte auf der gleichen Ebene freizugeben wo sie erzeugt werden.

Zitat von RavenIV:
Am Besten solche Objekte als var-Parameter oder besser noch out-Parameter übergeben lassen.
Wenn die aufrufende Funktion die Instanz erstellt ist genau beides eine riesige Fehlerquelle. Mit dem VAR erlaubst du dem aufgerufenen explizit die Instanz zu verändern - also eine ganz andere zurück zu geben als im übergeben wurde. Von daher ist hier const deutlich besser geeignet.

Zitat von RavenIV:
Dann muss / kann sich die aufrufende Procedure um das Erstellen und Zerstören kümmern.
Und mit dem kann/muss ist es wieder nicht eindeutig, wer sich nun kümmern muss. Und die aufrufende Procedure kann sich bei out definitiv nicht darum kümmern, damit versaubeutelst du schon die aussen erstellte Instanz, da diese niemals reingereicht wird. Bitte informier dich über den Unterschied von out und var!

Gruss
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz