![]() |
TComboBox: Items.IndexOfObject funktioniert nicht
ich habe eine anwendung von delphi 4 auf delphi 6 migriert und stehe bei banalen sachen wie der folgenden an. vielleicht kann mir jemand weiterhelfen.
Code:
sobald coList.Items.IndexOfObject aufgerufen wird, gibt's eine SListError-Exception. bis anhin konnte ich so gewisse daten (zahlen) an einem item "anhängen" und danach suchen... das ist alles was ich will.
coList.Items.Clear;
coList.Items.AddObject( 'Item1', Pointer(23) ); Caption := IntToStr( coList.Items.IndexOfObject( Pointer(23) ) ); coList ist ein TComboBox-Control. vielen dank für euren input. |
Re: TComboBox: Items.IndexOfObject funktioniert nicht
das ist natürlich ein dirty trick, denn du hängst gar kein objekt (abgeleitet von TObject) an die liste an.
verwende entweder tag für das speichern von zahlen oder kreiere einen typ TInteger mit einem Integer-Value und einem Constructor der diesen Value entgegennimmt und setzt und hänge diese zahl dann mit TInteger.Create(12) anstelle Pointer(12) an. Dazu sollte die Items.OwnsObjects-Eigenschaft (falls es die gibt) auf True gesetzt werden. |
Re: TComboBox: Items.IndexOfObject funktioniert nicht
interessanterweise funktioniert folgender code immer noch perfekt (in delphi 6):
Code:
ich vermute irgend eine umstellung in controls.pas:
s := TStringlist.Create;
s.AddObject( 'Item1', Pointer(1) ); s.AddObject( 'Item1', Pointer(2) ); s.AddObject( 'Item1', Pointer(3) ); Caption := IntToStr( s.IndexOfObject( Pointer(2) )); s.Free;
Code:
function TCustomComboBoxStrings.GetObject(Index: Integer): TObject;
begin Result := TObject(SendMessage(ComboBox.Handle, CB_GETITEMDATA, Index, 0)); if Longint(Result) = CB_ERR then Error(SListIndexError, Index); end; procedure TCustomComboBoxStrings.PutObject(Index: Integer; AObject: TObject); begin SendMessage(ComboBox.Handle, CB_SETITEMDATA, Index, Longint(AObject)); end; |
Re: TComboBox: Items.IndexOfObject funktioniert nicht
Moin Thomas,
der Fehler muss woanders liegen, denn wenn ich Deinen Code vom Eingangsposting in D6 PE ausprobiere funktioniert er wie erwartet, sprich, bringt keinen Fehler. Ich habe für so etwas zwar bislang TObject(...) statt Pointer(...) benutzt (es heisst ja schliesslich AddObject ;-) ), aber für den Test habe ich es auch mit Pointer(...) gemacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 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-2025 by Thomas Breitkreuz