AGB  ·  Datenschutz  ·  Impressum  







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

TStringList als Result

Ein Thema von Generalissimo · begonnen am 8. Jun 2004 · letzter Beitrag vom 8. Jun 2004
Antwort Antwort
Generalissimo

Registriert seit: 28. Aug 2003
187 Beiträge
 
Delphi 6 Enterprise
 
#1

TStringList als Result

  Alt 8. Jun 2004, 00:23
Wie kann ich eine TStringList als Rückgabewert einer Funktion realisieren.
Mein Problem ist, ich will aus einem Dialog in dem eine TStringList gefüllt wird
diese exportieren ins Hauptformular um dort sie weiterverarbeiten zu können.

Jetzt mache ich es so.

Hauptformular:

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FVarList:=TStringList.Create;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FVarList.Free;
end;

procedure TfrmMain.GetVarList;
begin
 With TfrmVarList.Create(nil) do
 begin
  ShowModal;
  FVarList:=GetList;
  Realease
 end;
end;
Dialog:

Delphi-Quellcode:
procedure TfrmVarList.FormCreate(Sender: TObject);
begin
FList:=TStringList.Create;
end;

procedure TfrmVarList.FormDestroy(Sender: TObject);
begin
FList.Free;
end;

function TfrmVarList.GetList:TStringList;
begin
 Result:=FList;
end;
Das will aber nicht. Da gibts immer ne Zugriffsverletzung.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: TStringList als Result

  Alt 8. Jun 2004, 00:29
probier mal:

Delphi-Quellcode:
procedure TfrmMain.GetVarList;
begin
  with TFrmVarList.Create(Self) do
  try
    ShowModal;
    Self.FVarList.Assign(GetList);
  finally
    Release;
  end;
end;
und achte nebenbei mal auf deine Formatierungen und den try finally Block umd Resourcen zu schützen.

Gruß Hagen
  Mit Zitat antworten Zitat
Generalissimo

Registriert seit: 28. Aug 2003
187 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: TStringList als Result

  Alt 8. Jun 2004, 00:42
jetzt ist zwar die fehlermeldung weg, aber dennoch wird nicht der inhalt
der einen liste der anderen zugewiesen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TStringList als Result

  Alt 8. Jun 2004, 02:49
Mach es mit einer Klassen-Methode. (Ist auch der bessere Stil, finde ich.)

Hauptformular:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    if TForm2.GetUserInput(sl) then
      Listbox1.Items.Text := sl.Text;
  finally
    FreeAndNil(sl);
  end;
end;
Eingabeformular:
Delphi-Quellcode:
type
  TForm2 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    class function GetUserInput(out sl: TStringList): Boolean;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

class function TForm2.GetUserInput(out sl: TStringList): Boolean;
begin
  with TForm2.Create(nil) do
  begin
    ShowModal();
    sl.Add(Edit1.Text);
    Result := length(Edit1.Text) <> 0;
    Free();
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  ModalResult := mrOK;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ModalResult := mrCancel;
end;
Klappt wunderbar.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TStringList als Result

  Alt 8. Jun 2004, 05:46
Hi Luckie,

ich würde es persönlich so machen:

Delphi-Quellcode:
class function TForm2.GetUserInput(List: TStrings): Boolean;
begin
  with TForm2.Create(nil) do
  begin
    ShowModal();
    if Assigned(List) then
      List.Add(Edit1.Text);
    Result := length(Edit1.Text) <> 0;
    Free();
  end;
end;
Dann kann man jeden Nachfahren von TStrings einsetzen und auch z.B. ComboBox1.Items als Parameter angeben - also eine vorhandene Liste weiterbenutzen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: TStringList als Result

  Alt 8. Jun 2004, 09:07
Nö, eher so:
Delphi-Quellcode:
class function TForm2.GetUserInput(List: TStrings): Boolean;
begin
  with TForm2.Create(nil) do
  begin
    try
       Result := (ShowModal = mrOK); // Bediener entscheidet mit OK oder Cancel-Button
       if Assigned(List) then
         List.Add(Edit1.Text);
    finally
       Free;
    end;
  end;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: TStringList als Result

  Alt 8. Jun 2004, 09:08
Ja, ja, ja. Es ging mir ja nur um das Prinzip. Btw ist die Prüfung überflüssig. Wie willst du die Methode ohne Übergabe eines korrekten Paramters aufrufen, ohne das der Compiler mekert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:43 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