![]() |
Problem mit Combobox.Items.AddObject() .AddItem()
Hallo Zusammen,
ich habe ein merkwürdiges Verhalten der Objekte meiner Combobox.Items.
Code:
Ich kann mir das Verhalten von "string(myCmb.Items.Objects[n]" nicht erklären.
procedure FillCmb;
var myCmb: TComboBox; begin myCmb := TComboBox.Create(nil); myCmb.AddItem('Anfrage', (TObject('AF'))); // string(myCmb.Items.Objects[0]) = 'AF' myCmb.AddItem('Angebot', (TObject('AB'))); // string(myCmb.Items.Objects[0]) = 'AF' // string(myCmb.Items.Objects[1]) = 'AB' myCmb.AddItem('Auftrag', (TObject('AG'))); // string(myCmb.Items.Objects[0]) = 'AG' // string(myCmb.Items.Objects[1]) = 'AF' // string(myCmb.Items.Objects[2]) = 'AG' myCmb.AddItem('Lieferschein', (TObject('LS'))); // string(myCmb.Items.Objects[0]) = 'LS' // string(myCmb.Items.Objects[1]) = 'AF' // string(myCmb.Items.Objects[2]) = 'AF' // string(myCmb.Items.Objects[3]) = 'AF' myCmb.AddItem('Rechnung', (TObject('RS'))); // string(myCmb.Items.Objects[0]) = 'RS' // string(myCmb.Items.Objects[1]) = 'LS' // string(myCmb.Items.Objects[2]) = 'RS' // string(myCmb.Items.Objects[3]) = 'LS' // string(myCmb.Items.Objects[4]) = 'RS' end; Natürlich ist das erstmal nur ein Beispiel. Der richtige Code sieht in etwa so aus:
Code:
procedure TBelegerfassungF.FillCmbBelegart;
var qBelegart: TMSQuery; begin try qBelegart := TMSQuery.Create(Self); qBelegart.Connection := DM1.MSConnection1; qBelegart.SQL.Add('SELECT Kennzeichen, Bezeichnung'); qBelegart.SQL.Add('FROM ' + DM1.cBelegarten); qBelegart.SQL.Add('WHERE BelegArt = 1000 AND IstInitialbeleg = -1'); qBelegart.SQL.Add('ORDER BY AnzeigeIndex'); qBelegart.Open; cmbBelegart.Items.Clear; while not qBelegart.Eof do begin cmbBelegart.Items.AddObject(qBelegart.FieldByName('Bezeichnung').AsString, TObject((qBelegart.FieldByName('Kennzeichen').AsString))); qBelegart.Next end; finally FreeAndNil(qBelegart); end; end; |
AW: Problem mit Combobox.Items.AddObject() .AddItem()
Strings sind referenzgezählt und eine nach Objekt gecasteter Schrott ist das nicht.
Also fliegen die Strings kurze Zeit späte wieder aus dem Speicher, aber deine "Zeiger" zeigen immernoch auf die nicht mehr vorhandenen Strings. :roll: * Strings "ordentlich" kopieren und nicht die Referenzzählung schrotten * oder mit PChars arbeiten (StrNew StrDispose) * oder richtige Daten-Objekte benutzen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz