AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ComboBox : String aus Items.Object auslesen

Ein Thema von teekay · begonnen am 17. Jan 2006 · letzter Beitrag vom 17. Jan 2006
Antwort Antwort
teekay

Registriert seit: 3. Jun 2004
23 Beiträge
 
Delphi 7 Enterprise
 
#1

ComboBox : String aus Items.Object auslesen

  Alt 17. Jan 2006, 17:26
Hallo!

ich brauch mal wieder einen Denkanstoss!

Folgendes Problemchen :
Ich möchte Daten in eine ComboBox laden. Zu jedem Item soll es einen weiteren "Subitem" geben der nicht angezeigt wird. So weit so gut.

(ComboBox Style : csDropDown)

Items adden :
Delphi-Quellcode:
procedure fill_combo;
var
  F : TextFile;
  Zeile : String;
  str_Name, str_Port : String;
  Pos_delimiter : Integer;
begin

  AssignFile(F, ChangeFileExt(Application.ExeName, '.dat'));
  Reset(F);
  while not eof(F) do
    begin
      Readln(F,Zeile);
      Pos_delimiter := Pos(';', Zeile);
      if Pos_delimiter <> 0 then
        begin
          str_Name := AnsiLeftStr(Zeile, Pos_delimiter - 1);
          Delete(Zeile,1, Pos_Delimiter);
          Pos_delimiter := Pos('#', Zeile);
          if Pos_delimiter <> 0 then
            begin
              str_Port := AnsiLeftStr(Zeile, Pos_delimiter - 1);
              with Main_frm.Combo_Port do
                begin
                  Items.AddObject(str_Name, TObject(str_Port));
                end;
            end;
        end;
    end;
  CloseFile(F);
end;
Die Daten der Textdatei sehen folgendermaßen aus:
Zitat:
Name1;11001#
Name2;11002#
Name3;11003#
...
TObject als String aus dem gewählten Eintrag auslesen und weiterverarbeiten
Delphi-Quellcode:
procedure TMain_frm.Button1Click(Sender: TObject);
begin
  if Combo_Port.ItemIndex > -1 then
    Showmessage(String(Combo_Port.Items.Objects[Combo_Port.ItemIndex]));
end;
So, und genau hier ist mein Problem :

Als Ergebnis erhalte ich entweder keine oder nur kryptische werte oder auch mal eine Zugriffsverletzung - ich kann den Fehler einfach nicht nachvollziehen

Interssanterweise funktioniert das Beispiel bei mir einwandfrei :
http://www.delphipraxis.net/internal...=181907#181907

aufgefallen ist mir das beim Ändern der LPersonalnummer in :
LPersonalnummer := '11003' + IntToStr(5); die Daten genauso sinnfrei ausgegeben werden wie bei mir...
wenn ihr eine Idee habt würde mich das sehr freuen

mfG TeeKay
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ComboBox : String aus Items.Object auslesen

  Alt 17. Jan 2006, 18:07
Hallo TK,

wenn du in einer Schleife die lokale Variable str_Port befüllst, wird sich deren Adresse auf dem Heap nicht ändern - also wirst du immer die selbe Adresse als Object in deine ComboBox-Strings laden. Und da durch den typecast später keiner außer dir weiß, dass der Zeiger einen string repräsentieren soll, wird der reference count der string variable ordnungsgemäß dekrementiert und der Speicher beim Verlassen deiner procedure freigegeben. Später dann greifst du ins Nirvana und dann knallt es manchmal. Häng deine Port Adressen lieber so rein:

Delphi-Quellcode:
procedure fill_combo;
//...
                  Items.AddObject(str_Name, TObject(StrToInt(str_Port)));
//...

procedure TMain_Frm.Button1Click(Sender: TObject);
begin
  with Combo_Port do
  if ItemIndex > -1 then
    Showmessage(IntToStr(Integer(Items.Objects[ItemIndex])));
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
teekay

Registriert seit: 3. Jun 2004
23 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: ComboBox : String aus Items.Object auslesen

  Alt 17. Jan 2006, 18:38
Hallo Marabu!

ich danke dir für deine schnelle Hilfe. Es hat wunderbar funktioniert. ich denke mal ich muss mich mit dieser Materie noch intensiver beschäftigen...

thx

TeeKay
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:34 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