AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)
Thema durchsuchen
Ansicht
Themen-Optionen

Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

Ein Thema von Drosera · begonnen am 19. Feb 2013 · letzter Beitrag vom 19. Feb 2013
Antwort Antwort
Drosera

Registriert seit: 1. Jan 2013
Ort: Lich
15 Beiträge
 
Delphi 7 Personal
 
#1

Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 15:43
Moin erstmal und hier eine laaange Beschreibung des Probs!

Problem: Ich erstelle in einer Unit A eine Komponente TStrings und möchte sie in einer Unit B verwenden.

Das Problem egal ob ich TStrings oder eine TStringList übergebe, es kommt

[Fehler] verzeichnisHandlingUnit.pas(47): Inkompatible Typen: 'TStrings' und 'procedure, untyped pointer or untyped parameter'

(Zwischenfrage kann ich eine TStrings.create instantiieren oder muß ich über ein z.B. TStringList.create arbeiten, um auf eine Liste zugreifen zu können?)

Hintergrund ist der, daß ich eine Sektion aus einem INI-File auslesen will (wird als StringList zurückgegeben) und eben diese in einer anderen Unit weiterverarbeiten will.

Hier mal der Code:
Empfangende Unit:
Delphi-Quellcode:
procedure TsqdForm.createMusicTabs();
 var
    anzahlItems : integer;
    tabListe : TStrings;
 begin
   // (leseAbschnittsKeys('musik'));
   tabListe := TStringList.Create;
      tabListe.AddStrings(verzeichnisHandlingUnit.leseAbschnittsKeys('musik'));
 end;
Sendende Unit:
Delphi-Quellcode:
function leseAbschnittsKeys(abschnittsName : string):TStrings;
var
    namensListe : TStringList;
    aktDir : String;
begin
    aktDir := GetCurrentDir()+'\';
     iniFile := TIniFile.Create( aktDir + 'sqdplayer.ini' );
    try
      namensListe := TStringList.Create;
       namensListe.Clear;
        leseAbschnittsKeys := iniFile.ReadSections(namensListe);
      finally
        namensListe.Clear;
    end;
end;
(nur nebenbei: Der Abschnittsname musik existiert und hat Daten)

Kann mir jmd. auf die Sprünge helfen??
Thomas
Der Morgen graut... mir auch

Geändert von Drosera (19. Feb 2013 um 16:12 Uhr) Grund: Code zugefügt/Layout geändert
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 16:00
Also, TStrings ist selbst direkt nicht nutzbar. Sie dient als Basisklasse für andere Klasse, wie z. B. TStringList. Trotz dem kannst du aber TStrigs für die Übergabe nutzten, aber auch nur dafür, d. h. versuche nicht eine Liste draus zu machen wie bei TStringList.

Beispiel:

Unit2
Delphi-Quellcode:
interface

  procedure MyList(List: TStrings);

implementation

procedure MyList(List: TStrings);
begin
  List.Clear;
  List.AddStrings(Screen.Fonts);
end;
Unit1
Delphi-Quellcode:
uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyList(ListBox1.Items);
end;
Das klappt.

Unit1
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    MyList(sl);
    ShowMessage(sl.Text);
  finally
    sl.Free;
  end;
end;
Das klappt auch.

Was machst du also anders?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 16:08
Bitte packe deinen Delphicode in die diese Tags
Code:
[DELPHI][/DELPHI]
.

Einfach auf Bearbeiten klicken, dann vor den Code den Anfang-Tag setzen und nach dem Code den End-Tag setzen. Dann guckt sich das auch jeder an.
  Mit Zitat antworten Zitat
Drosera

Registriert seit: 1. Jan 2013
Ort: Lich
15 Beiträge
 
Delphi 7 Personal
 
#4

@Popow

  Alt 19. Feb 2013, 16:13
Danke für die Info, hab' mich schon gefragt wie das geht (den Code optisch absetzten)
Thomas
Der Morgen graut... mir auch
  Mit Zitat antworten Zitat
Drosera

Registriert seit: 1. Jan 2013
Ort: Lich
15 Beiträge
 
Delphi 7 Personal
 
#5

@Popow (nochmal...)

  Alt 19. Feb 2013, 16:38
Danke Dir vielmals!

Da hast Du mir auf die Sprünge geholfen.
Thomas
Der Morgen graut... mir auch

Geändert von Drosera (19. Feb 2013 um 16:38 Uhr) Grund: verschrieben
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 16:39
[QUOTE=Drosera;1204343]
Delphi-Quellcode:
function leseAbschnittsKeys(abschnittsName : string):TStrings;
var
    namensListe : TStringList;
    aktDir : String;
begin
    aktDir := GetCurrentDir()+'\';
     iniFile := TIniFile.Create( aktDir + 'sqdplayer.ini' );
    try
      namensListe := TStringList.Create;
       namensListe.Clear;
        leseAbschnittsKeys := iniFile.ReadSections(namensListe);
      finally // das
        namensListe.Clear; // und das ist doch nicht Dein Ernst?
    end;
end;
und wenn es schon eine Funktion sein muß dan vllt. so:
Delphi-Quellcode:
function leseAbschnittsKeys(abschnittsName : string):TStrings;
var
  namensListe : TStringList;
  aktDir : String;
  Myfilename : string;
begin
  aktDir := GetCurrentDir()+'\';
  MyFilename:= aktDir + 'sqdplayer.ini' ;
  namensListe := TStringList.Create;
  if fileexists(Myfilename) then begin
    iniFile := TIniFile.Create(MyFilename);
    iniFile.ReadSections(namensListe);
  end;
  result:=namensliste;
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 16:54
Unabhängig dessen was bereits p80286 geschrieben hat, ich persönlich mag folgende Funktionen nicht:

Delphi-Quellcode:
function leseAbschnittsKeys(...):TStrings;
...
Weder weil da etwas falsch ist (ist nicht), sondern weil man da leicht durcheinander kommen kann. Vor allem als Anfänger. Grund: das Create ist in der Funktion, das Free in der aufrufenden Prozedur. Und als ob wir uns abgesprochen hätten, fehlt die Freigabe auch in deinem Code. Guck dir mal mein Beispiel an, zumindest bis das einigermaßen drauf ist.

Noch paar Tipps.

Delphi-Quellcode:
      namensListe := TStringList.Create;
       namensListe.Clear;
Das Clear kannst du dir sparen. Eine neu erstellte Liste ist ja leer.

Delphi-Quellcode:
      finally
        namensListe.Clear;
Sollte das evtl ein .Free sein?

        leseAbschnittsKeys := iniFile.ReadSections(namensListe); Nicht falsch, aber Result := statt leseAbschnittsKeys := ist evtl. übersichtlicher.

Außerdem glaube ich, dass du hier eher die Adresse der iniFile übergibst. Evtl. AddStrings?

Und wo wir schon bei iniFile sind, die hast du vergessen wieder freizugeben.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 17:09
Ohne genau zu wissen was du genau willst, hier eine ungetestete Alternative, falls ich dein Code korrekt verstanden habe:

Delphi-Quellcode:
procedure TsqdForm.createMusicTabs();
var
  anzahlItems : integer;
  tabListe : TStringList;
begin
   // (leseAbschnittsKeys('musik'));
   tabListe := TStringList.Create;
   try
     leseAbschnittsKeys('musik', tabListe);
     //mach was mit den Daten
   finally
     tabListe.Free;
   end;
end;

procedure leseAbschnittsKeys(abschnittsName: string, namensListe: TStrings);
var
  aktDir : String;
begin
  aktDir := GetCurrentDir() + '\';
  //alternativ: aktDir := ExtractFilePath(ParamStr(0));
  iniFile := TIniFile.Create(aktDir + 'sqdplayer.ini' );
  try
    //soll es ReadSections oder ReadSection sein? Ich gehe vom Fehler aus und somit ReadSection, ohne s
    iniFile.ReadSection(abschnittsName, namensListe);
  finally
    iniFile.Free;
  end;
end;
Wie gesagt, nicht getestet, hier im Editfeld umgeschrieben.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Übergabe von TString-s(-List) aus Unit an eine andere (Anfängerfrage)

  Alt 19. Feb 2013, 17:23
Der Fehler war übrigens hier:
Zitat:
leseAbschnittsKeys := iniFile.ReadSections(namensListe);
ReadSections ist eine Prozedur, man kann sie also keinem TStrings-Objekt zuweisen. Wenn, dann hätte man namensListe zurückgeben müssen, aber das ist wie erwähnt alles andere als empfehlenswert.
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
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 02:55 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