AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Verständnisproblem Stringlist mit Object
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisproblem Stringlist mit Object

Ein Thema von TomDooley · begonnen am 7. Sep 2004 · letzter Beitrag vom 13. Sep 2004
Antwort Antwort
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#1

Verständnisproblem Stringlist mit Object

  Alt 7. Sep 2004, 10:26
Hallo

Ich habe irgendwie ein Verständnisproblem mit Stringlisten und Verknüpften Objekten. Ich habe folgenden Methoden (die auch funktionieren):

Delphi-Quellcode:
procedure a;
var
  TempStrList : TStringlist;
  TempStr : ^String;
begin
  i := 0;
  for i to 10 do begin
    new(TempStr);
    TempStr^ := IniFile.ReadString(TempStrList.Strings[i],....);
    ComboboxXY.ItemsAddObject(TempStrList.Strings[i],TObject(TempStr));
  end;
  TempStrList.Free;
end;


procedure b;
var
  Tmp : ^String;
begin
  Tmp := Pointer(ComboboxXY.Items.Objects[ComboboxXY.ItemIndex]);
  Edit1.Text := Tmp^;
end;
Ich haben nun probiert anstatt Zeigern direkt die Instanzen zu übergeben (Strings). Jedoch bekomme ich dann in der procedure b einen Fehler... (vermutlich weil ich die Stringliste in a freigegeben habe, oder?) Müsste ich also einfach eine globale Stringlist definieren?

Oder ist die Lösung mit Zeigern besser? Doch da müsste ich am Ende des Programms noch den Speicher freigeben....:
Delphi-Quellcode:
OnDestroy-Ereignis:
...
for i:=0 to ComboboxXY.Items.Count-1 do
  Dispose(Pointer(ComboboxXY.Items.Objects[i]))
Ich seh da irgendwie nicht wirklich durch...

es dankt und grüsst

Tom
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: Verständnisproblem Stringlist mit Object

  Alt 7. Sep 2004, 10:47
Bei Procedure a fehlt ein end. Wo soll das sein?

Außerdem halte ich nicht viel davon mit Zeigern zu programmieren - das war früher mal notwendig, ist aber eine große Fehlerquelle und heutzutage in Delphi nicht mehr nötig! Wer das macht hat bei Fehlern selbst schuld.

Niemals würde ich einen Zeiger der auf einen String zeigt auf ein TObject casten - das geht nicht gut (wie du ja siehst)!!!
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#3

Re: Verständnisproblem Stringlist mit Object

  Alt 9. Sep 2004, 10:21
hmm... dann sollte ich also eine globale Stringlist definieren??
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Verständnisproblem Stringlist mit Object

  Alt 9. Sep 2004, 11:01
Hallo TomDooley,
ich nicht was Du mit TStringList erreichen möchtest. Meiner Ansicht nach brauchst Du
TStringList nicht. Ich habe mal ein bißchen Source zusammengestellt.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type

  PString = ^String; // Deklaration eines Zeiger auf einen String wg der Übersicht

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure ClearStrings;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  iCnt : Integer;
  aStr : PString;
begin
  ClearStrings;
  ListBox1.Clear;
  For iCnt:=0 to 9 do
    begin
    New(aStr);
    aStr^:='TestString '+IntToStr(iCnt+1);
    ListBox1.Items.AddObject('TestString '+IntToStr(iCnt+1),TObject(aStr));
    end; // For iCnt:=0 to 9 do
end;

procedure TForm1.ClearStrings;
var
  iCnt : Integer;
begin
  For iCnt:=0 to ListBox1.Items.Count-1 do
    If Assigned(ListBox1.Items.Objects[iCnt]) then
      Dispose(PString(ListBox1.Items.Objects[iCnt]));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Label1.Caption:=PString(ListBox1.Items.Objects[ListBox1.ItemIndex])^ ;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClearStrings;
end;

end.
Damit das klappt was Du vorhast brauchst Du schon einen Zeiger.
Ich vermute mal Du möchtest neben dem String in der ComboBox in der Objects Eigenschaft einen Wert speichern. Das ist auch kein Problem.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#5

Re: Verständnisproblem Stringlist mit Object

  Alt 9. Sep 2004, 11:28
Hallo

Danke für die Erklärung... Wenn ich das richtig verstanden habe, bist Du genau gleich vorgegangen wie ich, ausser dass Du die Stringlist ausgelassen hast (dann wär' das Problem gelöst).

Ich glaube aber, dass ich eine Stringlist brauche (vermutlich habe ich aber das Problem etwas zu wenig beschrieben):

Delphi-Quellcode:
aStr^:='TestString '+IntToStr(iCnt+1);
ListBox1.Items.AddObject('TestString '+IntToStr(iCnt+1),TObject(aStr));
ist nicht genau dass, was ich in meinem Prog. mache:

Delphi-Quellcode:
TempStr^ := IniFile.ReadString(TempStrList.Strings[i],....);
ComboboxXY.ItemsAddObject(TempStrList.Strings[i],TObject(TempStr));
TempStr^ wird nicht mit TempStrList.Strings[i] befüllt sondern mit dem entsprechenden Eintrag im Ini-File.
Code:
Beispiel INI-File:

[Section1]      //dieser Eintrag kommt in die Stringlist
Eintrag=127      //127 wird in TempStr^ abgelegt
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Verständnisproblem Stringlist mit Object

  Alt 9. Sep 2004, 11:35
Du musst die TStringList auch vorher mit TStringList.Create erzeugen und mit
den Sectionnamen füllen.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#7

Re: Verständnisproblem Stringlist mit Object

  Alt 9. Sep 2004, 11:45
Genau. Gleich zu Beginn mach ich folgendes:

IniFile.ReadSections(TempStrList);
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Verständnisproblem Stringlist mit Object

  Alt 9. Sep 2004, 18:38
Zitat von TomDooley:
Genau. Gleich zu Beginn mach ich folgendes:

IniFile.ReadSections(TempStrList);
Das steht aber nicht in Deinem Codeschnippsel
I come from outer space to save the human race
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#9

Re: Verständnisproblem Stringlist mit Object

  Alt 13. Sep 2004, 08:50
Du hast Recht. Sorry! Hab' ich nicht gesehen...
  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 13:50 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