Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TComboBox: Items.IndexOfObject funktioniert nicht (https://www.delphipraxis.net/26838-tcombobox-items-indexofobject-funktioniert-nicht.html)

OdermattThomas 30. Jul 2004 08:30


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:
  coList.Items.Clear;
  coList.Items.AddObject( 'Item1', Pointer(23) );
  Caption := IntToStr( coList.Items.IndexOfObject( Pointer(23) ) );
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 ist ein TComboBox-Control.

vielen dank für euren input.

bttb930 30. Jul 2004 08:38

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.

OdermattThomas 30. Jul 2004 08:49

Re: TComboBox: Items.IndexOfObject funktioniert nicht
 
interessanterweise funktioniert folgender code immer noch perfekt (in delphi 6):

Code:
  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;
ich vermute irgend eine umstellung in controls.pas:
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;

Christian Seehase 30. Jul 2004 18:15

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