Einzelnen Beitrag anzeigen

aMuTeX

Registriert seit: 8. Mai 2003
Ort: Luzern
54 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Wie kann ich Reihenfolge von Komponenten im DFM ändern?

  Alt 16. Jul 2004, 12:18
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?
  Mit Zitat antworten Zitat