Hi oki
Danke erstmal, aber das ist mit schon klar. Nur bei mir ist das nicht so einfach. Das Page object kennt seinen eigenen PageIndex nicht. Ich kann also nicht einfach einen Wert im
DFM speichern. Vielmehr ist die Reihenfolge beim instanzieren ausschlaggebend für die Position (PageIndex) innerhalb meines PageControls (so wird es jedenfalls auch beim TPagecontrol gemacht). Nur ich habe keinen Einfluss auf diese instazierungs Reihenfolge, ausser eben die im
DFM. Aber wie ändere ich diese?
Grob sieht mein Code etwas so aus:
Delphi-Quellcode:
TMyPage = class(TCustomControl)
private
FPageControl: TMyPageControl;
procedure SetPageControl(const Value: TMyPageControl);
function GetPageIndex: Integer;
procedure SetPageIndex(const Value: Integer);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property TabIndex: Integer read GetTabIndex;
published
property PageIndex: Integer read GetPageIndex write SetPageIndex stored False;
property PageControl: TMyPageControl read FPageControl write SetPageControl;
end;
TMyPageControl = class(TCustomControl)
private
FPages: TList;
FActivePage: TMyPage;
procedure ChangeActivePage(Page: TMyPage);
procedure SetActivePage(Page: TMyPage);
procedure SetActivePageIndex(PageIndex: Integer);
function GetActivePageIndex: integer;
function GetPageCount: Integer;
function GetPage(Index: Integer): TMyPage;
procedure InsertPage(Page: TMyPage );
procedure RemovePage(Page: TMyPage );
function GetTabIndex: Integer;
procedure SetTabIndex(const Value: Integer);
procedure MoveTab(CurIndex, NewIndex: Integer);
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ActivateNextPage;
procedure ActivatePrevPage;
function FindNextPage(CurPage: TMyPage): TMyPage;
property ActivePageIndex: Integer read GetActivePageIndex write SetActivePageIndex;
property PageCount: Integer read GetPageCount;
property Pages[Index: Integer]: TMyPage read GetPage;
published
property ActivePage: TMyPage read FActivePage write SetActivePage;
property TabIndex: Integer read GetTabIndex write SetTabIndex default -1;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnChanging: TTabChangingEvent read FOnChanging write FOnChanging;
end;
Delphi-Quellcode:
function TMyPage.GetPageIndex: Integer;
begin
if FPageControl <> nil then
begin
if FPageControl.FPages <> nil then
Result := FPageControl.FPages.IndexOf(Self)
else
Result := -1;
end else
Result := -1;
end;
procedure TMyPage.SetPageIndex(const Value: Integer);
var
I: Integer;
begin
if FPageControl <> nil then
begin
I := TabIndex;
FPageControl.FPages.Move(PageIndex, Value);
if I >= 0 then FPageControl.MoveTab(I, TabIndex);
end;
end;
Das ist von TPageControl kopiert. Es hilft auch nicht wenn ich das property PageIndex auf stored True setze. Dann wird zwar ein Wert im
DFM gespeichert, aber beim laden wird er ignoriert. Wieso?