AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie kann ich Reihenfolge von Komponenten im DFM ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich Reihenfolge von Komponenten im DFM ändern?

Ein Thema von aMuTeX · begonnen am 15. Jul 2004 · letzter Beitrag vom 16. Jul 2004
Antwort Antwort
aMuTeX

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

Wie kann ich Reihenfolge von Komponenten im DFM ändern?

  Alt 15. Jul 2004, 16:52
Hallo

Ich schreibe gerade eine art PageControl Komponente, aber nicht von TPageControl abgeleitet. Soweit sogut. Mein Problem: Die Reihenfolge der Pages (analog PageIndex beim TPageControl) wird nicht im DFM gespeichert. Wenn ich beim TPageControl den PageIndex einer Page ändere wird im DFM die Reihenfolge der object Einträge der TabSheets geändert:
Delphi-Quellcode:
  object PageControl1: TPageControl
    Left = 504
    Top = 384
    Width = 289
    Height = 193
    ActivePage = TabSheet3
    TabOrder = 0
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
    end
    object TabSheet3: TTabSheet
      Caption = 'TabSheet3'
      ImageIndex = 2
    end
    object TabSheet2: TTabSheet
      Caption = 'TabSheet2'
      ImageIndex = 1
    end
  end
Beim instanzieren der Tabsheets wird dann auch eben diese Reihenfolge eingehalten.

Wie kann ich das bei meiner Komponente realisieren? Wie kann ich die Reihenfolge meine Pages im DFM ändern?


Besten Dank im Voraus.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

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

  Alt 16. Jul 2004, 10:38
Hi,

ich mir jetzt nicht ganz sicher wie du es bei dir umsetzen mußt, aber rein prinzipiell habe ich festgestellt, dass bei Kompos die zur Designzeit implementiert werden alle published-Eigenschaften bei Abweichung vom default-Wert in der DFM des Owners mit abgelegt werden.

Bsp:

Delphi-Quellcode:
published
  MyWert : Integer read FMyWert write FMyWert default 0;
end;
Wenn jetzt zur Designzeit MyWert über den Objectinspektor auf 1 (abweichend von 0) gesetzt wird, dann wird dieser Wert im DFM des Besitzerfensters im Bereich des BesitzerObjektes von MyWert abgelegt und beim nächsten Aufruf des Projektes gesetzt.

Ich hoffe, dass hat etwas weiter geholfen,

Gruß oki
  Mit Zitat antworten Zitat
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
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

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

  Alt 16. Jul 2004, 13:36
Hi,

jetzt hab ich mitbekommen wo dein Problem steckt. Ähnliches hatte ich auch schon mal. Bei mir war es so, dass ich meine eigenen TabSheets zur Laufzeit aus einer eigenen Klasse creiert habe. nun ist es ja so, dass entsprechend der erstellungsreihenfolge der PageIndex automatisch gesetzt wird. Erstelle ich also erst das 2., so kann ich dort nicht schon den PageIndex 5 vergeben (beispielsweise). Hier geht nur eins, von vornherein alle in der richtigen reihenfolge erstellen, oder nach dem create alles seperat zuweisen. Direktes eigenes Schreiben in die DFM bringt somit nichts (ist aber auch möglich glaube ich).

Gruß oki
  Mit Zitat antworten Zitat
aMuTeX

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

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

  Alt 16. Jul 2004, 14:33
Merci. Ich denke da bleibt mir wohl nix anderes übrig als die PageIndizes nach dem Kreieren nochmal zuzuweisen

Die Reihenfolge im DFM bestimmt ja die Instanzierungs-Reihenfolge. Wäre schön wenn man das DFM beeinflussen könnte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz