TPagecontrol unsichtbar machen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Andy Nightingale
Beiträge: 216
Registriert: Mo 13. Jan 2025, 12:11

TPagecontrol unsichtbar machen

Beitrag von Andy Nightingale »

Hallo Leute,
ich wollte auf einer Form mehrere Seiten installieren mit TPagecontrol. Es sollte aber nicht sichbar sein. Ich wollte oben mehrere Buttons machen das wenn ich auf einen Button klicke z.B. mit der Page3 das es dorthin springt und alles anzeigt. Wie könnte man das verwirklichen? Grüße.

wp_xyz
Beiträge: 5156
Registriert: Fr 8. Apr 2011, 09:01

Re: TPagecontrol unsichtbar machen

Beitrag von wp_xyz »

Das bessere Control dafür ist das TNotebook, weil es gar keine Tabs hat und somit selbst nicht sichtbar ist, auch kein Rand. Verwende den Objekt-Baum über dem Objekt-Inspektor um zwischen den Seiten hinundher zu wechseln. Im Code kannst du mit NoteBook.PageIndex die sichtbare Seite auswählen.

Siehe beigefügtes einfaches Beispielprojekt
Dateianhänge
notebook_demo.zip
(2.37 KiB) 46-mal heruntergeladen
Zuletzt geändert von wp_xyz am Mi 7. Mai 2025, 23:02, insgesamt 2-mal geändert.

Andy Nightingale
Beiträge: 216
Registriert: Mo 13. Jan 2025, 12:11

Re: TPagecontrol unsichtbar machen

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Mi 7. Mai 2025, 19:45 Das bessere Control dafür ist das TNotebook, weil es gar keine Tabs hat und somit selbst nicht sichtbar ist, auch kein Rand. Verwende den Objekt-Baum über dem Objekt-Inspektor um zwischen den Seiten hinundher zu wechseln. Im Code kannst du mit NoteBook.PageIndex die sichtbare Seite auswählen.

Siehe beigefügtes einfaches Beispielprojekt
Kann das Beispiel nicht öffnen,- fehlt die lpr Datei. :-(

wp_xyz
Beiträge: 5156
Registriert: Fr 8. Apr 2011, 09:01

Re: TPagecontrol unsichtbar machen

Beitrag von wp_xyz »

Andy Nightingale hat geschrieben: Mi 7. Mai 2025, 20:50
wp_xyz hat geschrieben: Mi 7. Mai 2025, 19:45 Das bessere Control dafür ist das TNotebook, weil es gar keine Tabs hat und somit selbst nicht sichtbar ist, auch kein Rand. Verwende den Objekt-Baum über dem Objekt-Inspektor um zwischen den Seiten hinundher zu wechseln. Im Code kannst du mit NoteBook.PageIndex die sichtbare Seite auswählen.

Siehe beigefügtes einfaches Beispielprojekt
Kann das Beispiel nicht öffnen,- fehlt die lpr Datei. :-(
Grrrr... Das passiert, wenn's pressiert... - Ich habe den Anhang im vorigen Post gegen das vollständige Projekt ausgetauscht.

Andy Nightingale
Beiträge: 216
Registriert: Mo 13. Jan 2025, 12:11

Re: TPagecontrol unsichtbar machen

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Mi 7. Mai 2025, 23:03
Andy Nightingale hat geschrieben: Mi 7. Mai 2025, 20:50
wp_xyz hat geschrieben: Mi 7. Mai 2025, 19:45 Das bessere Control dafür ist das TNotebook, weil es gar keine Tabs hat und somit selbst nicht sichtbar ist, auch kein Rand. Verwende den Objekt-Baum über dem Objekt-Inspektor um zwischen den Seiten hinundher zu wechseln. Im Code kannst du mit NoteBook.PageIndex die sichtbare Seite auswählen.

Siehe beigefügtes einfaches Beispielprojekt
Kann das Beispiel nicht öffnen,- fehlt die lpr Datei. :-(
Grrrr... Das passiert, wenn's pressiert... - Ich habe den Anhang im vorigen Post gegen das vollständige Projekt ausgetauscht.
Das ist ja cool.- genau das meinte ich .- vielen Dank :D

Benutzeravatar
juelin
Beiträge: 251
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: TPagecontrol unsichtbar machen

Beitrag von juelin »

Hallo Andy,
ich habe Dir mal ein File gegeben. "Neues Projekt in Lazarus"
Du legst für jede Form ein Unit an.
In den Projekteinstellungen (Menü -> Projekt -> Projekteinstellungen)
verschiebst Du unter Formulare alle Formulare, die Du beim Programmstart nicht sehen willst nach links.
Projekt2.jpg
Projekt2.jpg (65.5 KiB) 2116 mal betrachtet
Im Programm (Form1) ruft dann so ein Formular mit folgenden Befehle auf: (Beispiel Form1 ruft Form2 auf)

Code: Alles auswählen

      Form1.Visible:=False;
      Form2:=TForm2.Create(self);
      Form2.ShowModal;
Wenn Du dann wiederzurück zur Ausgangsform willst rufst Du (Form2) folgende Befehle auf:

Code: Alles auswählen

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Form2.Cursor:=crDefault;
  Form2.Refresh;
  Action:=caFree;
  Form1.Rueck; // Stellt in Form1 eventuell Daten wieder her (Label,Edit,Combobox......)
                        // auf jeden Fall: Form1.Visible:=True;
                        // Form1Rueck ist eine Procedure und muss in public stehen.
end;
In Form1 in uses Unit2 einfügen.
In Form2 in uses Unit1 einfügen.

So ich hoffe es klappt bei Dir.
Gruß
Jürgen

charlytango
Beiträge: 1063
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TPagecontrol unsichtbar machen

Beitrag von charlytango »

Andy Nightingale hat geschrieben: Mi 7. Mai 2025, 18:34 Hallo Leute,
ich wollte auf einer Form mehrere Seiten installieren mit TPagecontrol. Es sollte aber nicht sichbar sein. Ich wollte oben mehrere Buttons machen das wenn ich auf einen Button klicke z.B. mit der Page3 das es dorthin springt und alles anzeigt. Wie könnte man das verwirklichen? Grüße.
Wenn du damit eine Benutzerführung erstellen willst, empfehle ich dir das Packagage TDINotebook anzusehen. Ist über OPM installierbar.

Egal ob TPagecontrol oder andere ähnliche Controls.
Wenn dies Seiten sehr umfangreich sind, wird das schnell mal unübersichtlich und kaum mehr in einer einzigen Unit handhabbar.

Stattdessen benutzt man so ein Pagecontrol/Notebook nur als "Umschalteinheit".
Die Inhalte der einzelnen Pages organisiert man dann entweder in einem TForm oder TFrame, erstellt sie zur Laufzeit und "klebt" sie in eine neue Page ein.
Es gibt somit keine "unsichtbaren" Pages sondern es existieren nur diejenigen die du aktuell anzeigen willst. Auch das Hin und her schalten von Daten entfällt.
TDINotebook kontolliert auch alle erzeugten Pages und Forms in einer Liste.
Wenn du mehr Info brauchst, melde dich einfach.

Andy Nightingale
Beiträge: 216
Registriert: Mo 13. Jan 2025, 12:11

Re: TPagecontrol unsichtbar machen

Beitrag von Andy Nightingale »

juelin hat geschrieben: Do 8. Mai 2025, 10:45 Hallo Andy,
ich habe Dir mal ein File gegeben. "Neues Projekt in Lazarus"
Du legst für jede Form ein Unit an.
In den Projekteinstellungen (Menü -> Projekt -> Projekteinstellungen)
verschiebst Du unter Formulare alle Formulare, die Du beim Programmstart nicht sehen willst nach links.
Projekt2.jpg
Im Programm (Form1) ruft dann so ein Formular mit folgenden Befehle auf: (Beispiel Form1 ruft Form2 auf)

Code: Alles auswählen

      Form1.Visible:=False;
      Form2:=TForm2.Create(self);
      Form2.ShowModal;
Wenn Du dann wiederzurück zur Ausgangsform willst rufst Du (Form2) folgende Befehle auf:

Code: Alles auswählen

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Form2.Cursor:=crDefault;
  Form2.Refresh;
  Action:=caFree;
  Form1.Rueck; // Stellt in Form1 eventuell Daten wieder her (Label,Edit,Combobox......)
                        // auf jeden Fall: Form1.Visible:=True;
                        // Form1Rueck ist eine Procedure und muss in public stehen.
end;
In Form1 in uses Unit2 einfügen.
In Form2 in uses Unit1 einfügen.

So ich hoffe es klappt bei Dir.
Gruß
Jürgen
Danke dir und Grüße nach Mannheim :-)

Andy Nightingale
Beiträge: 216
Registriert: Mo 13. Jan 2025, 12:11

Re: TPagecontrol unsichtbar machen

Beitrag von Andy Nightingale »

charlytango hat geschrieben: Do 8. Mai 2025, 14:24
Andy Nightingale hat geschrieben: Mi 7. Mai 2025, 18:34 Hallo Leute,
ich wollte auf einer Form mehrere Seiten installieren mit TPagecontrol. Es sollte aber nicht sichbar sein. Ich wollte oben mehrere Buttons machen das wenn ich auf einen Button klicke z.B. mit der Page3 das es dorthin springt und alles anzeigt. Wie könnte man das verwirklichen? Grüße.
Wenn du damit eine Benutzerführung erstellen willst, empfehle ich dir das Packagage TDINotebook anzusehen. Ist über OPM installierbar.

Egal ob TPagecontrol oder andere ähnliche Controls.
Wenn dies Seiten sehr umfangreich sind, wird das schnell mal unübersichtlich und kaum mehr in einer einzigen Unit handhabbar.

Stattdessen benutzt man so ein Pagecontrol/Notebook nur als "Umschalteinheit".
Die Inhalte der einzelnen Pages organisiert man dann entweder in einem TForm oder TFrame, erstellt sie zur Laufzeit und "klebt" sie in eine neue Page ein.
Es gibt somit keine "unsichtbaren" Pages sondern es existieren nur diejenigen die du aktuell anzeigen willst. Auch das Hin und her schalten von Daten entfällt.
TDINotebook kontolliert auch alle erzeugten Pages und Forms in einer Liste.
Wenn du mehr Info brauchst, melde dich einfach.
Super.- ich werde das mal runterladen und testen und mich wieder melden. Grüße und Danke

Acia6850
Beiträge: 30
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Re: TPagecontrol unsichtbar machen

Beitrag von Acia6850 »

Hallo,

man kann die TabSheets eines PageControl alle unsichtbar machen bis auf eines.

Beispiel mache alle TabSheets unsichtbar :

blMode := false; unsichtbar
blMode := true; sichtbar

mit PageControl1.ActivePageIndex:=2; // [0,1,2]

kann man das Tabsheed Nr. 3 auf active setzen

Beispiel Code :

Code: Alles auswählen

program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
     

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls,
  Grids;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    PageControl1: TPageControl;
    StringGrid1: TStringGrid;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure xClearPG(blMode : Boolean);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  xClearPG(false);
  PageControl1.ActivePageIndex:=0;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

  PageControl1.ActivePageIndex:=1;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

  PageControl1.ActivePageIndex:=2;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  xClearPG(True);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  xClearPG(false);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  xClearPG(false);

end;

procedure TForm1.xClearPG(blMode : Boolean);
Var
  nCnt : Longint;
  N    : Longint;

begin
  nCnt := PageControl1.PageCount;
  For N:=0 To nCnt-1 do begin
    PageControl1.Pages[N].TabVisible:=blMode;
  end;

end;

end.  



Viel Spass beim Test.

Antworten