Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eine StringList in einer Klasse erstellen (https://www.delphipraxis.net/140385-eine-stringlist-einer-klasse-erstellen.html)

AnyKey 17. Sep 2009 08:42


Eine StringList in einer Klasse erstellen
 
Hi,

ich habe eine Klasse geschrieben, in der ich unter anderem eine StringList erzeuge. Die StringList ist dafür gedacht, Text aus einem RichEdit aufzunehmen um ihn bearbeiten zu können (Suche nach bestimmten wörtern, SyntaxHighlighting). Ich habe dafür in der Klasse verschiedene Funktionen geschrieben, eine zum Erstellen der StringList, eine um sie zu bearbeiten und eine um sie wieder frei zu geben. Mein Problem ist nun allerdings, dass der Text aus dem RichEdit zwar wohl in die Stringlist geladen wird, allerdings nicht mehr ausgelesen werden kann, da der Text wieder verworfen wird. (Die StringList ist global initialisiert worden)

Hier noch die Funktionen:

Delphi-Quellcode:
class procedure TStringManipulation.ScrollListCreate(Dateiname: String);
begin
  ScrollList := TStringList.Create;
  ScrollList.LoadFromFile(Dateiname);
end;


class procedure TStringManipulation.ScrollListDestroy;
begin
  FreeAndNil(ScrollList);
end;
Wäre super wenn ihr mir helfen könntet!

-> Edit: Ok, bei der Create Funktion ist es im moment noch so dass ich den Inhalt aus einer Datei bekomme... :)

Gruß
AnyKey

mkinzler 17. Sep 2009 08:49

Re: Eine StringList in einer Klasse erstellen
 
Wo ist die Stringliste deklariert? Als Member?
Warum Klassenmethode?

spaxxn 17. Sep 2009 08:50

Re: Eine StringList in einer Klasse erstellen
 
Kannst du mal die Deklaration der Klasse bereitstellen?

Mir leuchtet das nicht ganz ein, dass du die StringList global deklarierst aber mit einer class function erzeugst...

Klaus01 17. Sep 2009 08:51

Re: Eine StringList in einer Klasse erstellen
 
Guten Morgen,

was spricht dagegen eine weitere Methode zu erstellen
wo du die StringList wieder dem Richedit übergibst?

Ewta so in der Art
Delphi-Quellcode:
TStringManipulation.putContent(lines: TStrings);
begin
  lines.assign(srollist);
end;
(ungetestet)

Aufruf in etwas so:

Delphi-Quellcode:
putContent(DeinRichedit.lines);
Grüße
Klaus

AnyKey 17. Sep 2009 09:22

Re: Eine StringList in einer Klasse erstellen
 
Hi,

danke für eure Antworten!

Also, die Stringlist ist in der Klasse selbst Deklariert. Ich benutze deswegen eine Klasse, um die Funktionen gegebenenfalls später einmal wieder zu verwenden. Mein Problem ist, trotz dass ich die StringList meinem RichEdit wieder übergebe (hab die Funktion vergessen mit anzugeben) bekomme ich nur ein leeres RichEdit angezeigt. Ich benutze außerdem in der Anwendung MDI-Childs.

Vielleicht fällt ja einem von euch was dazu ein.

Gruß
AnyKey

spaxxn 17. Sep 2009 09:24

Re: Eine StringList in einer Klasse erstellen
 
Ist von TStringManipulation ein Objekt instanziert? Also zu dem Zeitpunkt zu dem die Stringlist instanziert werden soll?

AnyKey 17. Sep 2009 09:28

Re: Eine StringList in einer Klasse erstellen
 
TStringManipulationen ist eine Klasse:

Delphi-Quellcode:
type
  TStringManipulation = Class
  public
    class procedure SelectLine(Edit: TRichEdit; Line: Integer; BgrColor: TColor);
    class procedure UnselectLine(Edit: TRichEdit; Line: Integer);
    class procedure SyntaxHighlighting(Edit: TRichEdit; Checked: Bool);
    class procedure Suchen(Edit: TRichEdit; SuchText: String);
    class procedure ScrollListCreate(Dateiname: String);
    class procedure ScrollListDestroy;
    class procedure GetScrollList(Edit: TRichEdit; Datensatz: Integer);
    class procedure SetScrollList(Dateiname: String);
  end;

var
  ScrollList : TStringList;

himitsu 17. Sep 2009 09:36

Re: Eine StringList in einer Klasse erstellen
 
Erstmal, wenn die Variable zur Klasse gehört, dann gehört sie doch eigentlich auch da mit rein

Und wie oft bzw. wann erstellst du diese StringListe?
Ich würde sie nur beim Programmstart erstellen und am Ende freigeben, da es eh nur EINE geben kann und man so keine Speicherlecks oder Schlimmeres erst entstehen lassen kann
Delphi-Quellcode:
type
  TStringManipulation = Class
    class var FScrollList : TStringList;
    class procedure Initialize;
    class procedure Finalize;
  public
    class procedure SelectLine(Edit: TRichEdit; Line: Integer; BgrColor: TColor);
    class procedure UnselectLine(Edit: TRichEdit; Line: Integer);
    class procedure SyntaxHighlighting(Edit: TRichEdit; Checked: Bool);
    class procedure Suchen(Edit: TRichEdit; SuchText: String);
    class procedure ScrollListLoad(Dateiname: String);
    class procedure ScrollListClear;
    class procedure GetScrollList(Edit: TRichEdit; Datensatz: Integer);
    class procedure SetScrollList(Dateiname: String);
  end;

class procedure TStringManipulation.Initialize;
begin
  FScrollList := TStringList.Create;
end;

class procedure TStringManipulation.Finalize;
begin
  FScrollList.Free;
end;

class procedure TStringManipulation.ScrollListLoad(Dateiname: String);
begin
  FScrollList.LoadFromFile(Dateiname);
end;

class procedure TStringManipulation.ScrollListClear;
begin
  FScrollList.Clear;
end;

Initialization
  TStringManipulation.Initialize;

Finalization
  TStringManipulation.Finalize;

End.

spaxxn 17. Sep 2009 09:40

Re: Eine StringList in einer Klasse erstellen
 
Nicht schön, aber selten :)

AnyKey 17. Sep 2009 09:51

Re: Eine StringList in einer Klasse erstellen
 
@ spaxxn: meins is nich schön?? :P

also in meiner Anwendung erstelle ich die StringList ja über meine Funktion, erst dann wenn ich sie Brauche und rufe wenn ich sie nicht mehr brauche die Funktion zum Freigeben auf. Naja aber wenn ihr alle meint das es so nicht die tollste Lösung ist, mach ichs vielleicht doch anders. Meine eigentliche frage is ja auch nur warum ich im RichEdit nichts angezeigt bekomme.

Gruß
AnyKey


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.
Seite 1 von 2  1 2      

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