[Lazarus] TTabControl has problem with storing/retreving objects
Donald R. Ziesig
donald at ziesig.org
Mon Jan 23 18:52:09 CET 2012
Hi All!
I have an app that uses a TTabControl to select the display of one of
many objects. The code is really trivial in the real app, but I have
further simplified it to the bare essentials:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls,
ComCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
TabControl1: TTabControl;
procedure Button1Click(Sender: TObject);
procedure TabControl1Change(Sender: TObject);
private
{ private declarations }
N : Integer;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(N);
TabControl1.Tabs.AddObject(IntToStr(N),TObject(N));
end;
procedure TForm1.TabControl1Change(Sender: TObject);
var
I : Integer;
begin
I := TabControl1.TabIndex;
Label1.Caption := IntToStr(Integer(TabControl1.Tabs.Objects[I]));
end;
end.
Pressing Button1 adds consecutively-numbered tabs starting at 1.
Selecting a tab SHOULD set Label1's caption to the number on the tab
(and DOES when used with Delphi). It actually outputs non-consecutive
numbers in the 37,000,000 range. I get similar results using Windows,
OSX and Debian.
In the real app, I use an object with a name, but when I select a tab,
it goes somewhere in the address space (not sure where in the context of
the app) and returns a string of un-printable characters as the name
(and other random values for the remaining contents of the object).
As I said above, the exact same code in Delphi (2006 and 2007) works as
expected, but obviously is limited to Windows.
I tried similar operations with a TListBox and the object was returned
correctly so I don't think the problem is with TStrings or its descendents.
Any help would be appreciated.
Don Ziesig
P.S. I have tried to find the LCL code and debug the library myself but
I must be missing something in my searches. Some pointers in that area
would also be appreciated.
More information about the Lazarus
mailing list