One way to get around this would be to add your own descendant of
TListBox and add an Objects property that works as you would expect
(ie. use that instead of items.objects). Here's a quick sample I
knocked together:

>>
unit MyListBox;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, RTLConsts;

type
  TMyListBox = class(TListBox)
  private
    function GetObject(AIndex: Integer): TObject;
    procedure SetObject(AIndex: Integer; const AValue: TObject);
    { Private declarations }
  protected
    { Protected declarations }
  public
    property Objects[AIndex: Integer]: TObject read GetObject write SetObject;
  published
    { Published declarations }
  end;

procedure Register;

implementation

type
  TIPRStrings = class(TStrings);

function TMyListBox.GetObject(AIndex: Integer): TObject;
begin
  Result := TObject(GetItemData(AIndex));
  if GetLastError <> 0 then
    TIPRStrings(Items).Error(SListIndexError, AIndex);
end;

procedure TMyListBox.SetObject(AIndex: Integer; const AValue: TObject);
begin
  Items.Objects[AIndex] := AValue;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TMyListBox]);
end;

end.
<<

Alternatively, you could just use the relevant code yourself on your
own listbox where you need to

type
  TIPRCustomListBox = class(TListBox);

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  ListBox1.Items.AddObject('foo', TObject(-1));
  i := Integer(TIPRCustomListBox(ListBox1).GetItemData(0));
  if GetLastError <> 0 then // an error occurred, raise an exception or whatever
  else ShowMessage(IntToStr(i));
end;

Cheers,
Karl
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi@delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: 
unsubscribe

Reply via email to