[gelöst] PageControl ActivePage zur Laufzeit ändern

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

[gelöst] PageControl ActivePage zur Laufzeit ändern

Beitrag von kralle »

Moin,

ich möchte zur Laufzeit die Aktive Seite eines PageControls ändern.
Die Variable die ich dafür nutzen will, habe ich so initialisert:

Code: Alles auswählen

  ChangeActivePage: String = 'Tab01_Allgemein';   


Die erste Wertzuweisung erfolgt so:

Code: Alles auswählen

procedure TFrameAllgemein.FrameExit(Sender: TObject);
begin
      Datenmodul.ChangeActivePage:= 'Tab01_Allgemein' ;
end;  
Und hier soll der Wechsel ausgeführt werden:

Code: Alles auswählen

procedure TMainForm.PageControlExit(Sender: TObject);
begin
  Pagecontrol.ActivePage := Datenmodul.ChangeActivePage;
end;


Bei kompilieren bekomme ich schon beim Initialisieren folgende Fehlermeldung:

Code: Alles auswählen

 
Projekt kompilieren, Modus: Default, Ziel: linux/sdg: Exit code 256, Fehler: 2
DatenModul.pas(27,3) Error: Identifier not found "Tab01_Allgemein"
DatenModul.pas(27,45) Error: Illegal expression
 
Weiß ich an der stelle der Variablen noch keinen Wert zu, bekomme ich bei der Nutzung einen Fehler:

Code: Alles auswählen

Projekt kompilieren, Modus: Default, Ziel: linux/sdg: Exit code 256, Fehler: 1, Hinweise: 19
main.pas(159,56) Error: Incompatible type for arg no. 1: Got "AnsiString", expected "TTabSheet"
 
Aber, die Variable als "TTabSheet" deklarieren, geht auch nicht.

Das kann doch nicht so schwer sein, dem PageControl zur Laufzeit die aktive Seite zu benennen.
Im Objektinspektor funktioniert es funktioniert es ja auch.

Wo ist schon wieder mein Denkfehler?

Gruß Heiko
Zuletzt geändert von kralle am So 27. Mär 2016, 16:51, insgesamt 1-mal geändert.
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: PageControl ActivePage zur Laufzeit ändern

Beitrag von theo »

Steht ja da. ActivePage ist kein String sondern ein TTabSheet.

Ich blicke nicht, was du da machen willst, aber so kann man die Seite z.B. über den Index wählen:

Code: Alles auswählen

 
PageControl1.ActivePage:=PageControl1.Pages[2];  

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

Re: PageControl ActivePage zur Laufzeit ändern

Beitrag von wp_xyz »

Code: Alles auswählen

PageControl1.ActivePageIndex := 2;  // Tab mit dem Index 2 (3.Tab) nach vorne holen
// oder:
PageControl1.ActivePage := PageControl.Pages[2];
// oder:
PageControl1.ActivePage :=Tab01_Allgemein;  // Wenn Tab01_Allgemein der Name eines Tabs ist ("Name", nicht "Caption")
// oder:
for i:=0 to PageControl1.Count-1 do
  if PageControl1.Pages[i].Caption = 'Allgemein' then
  begin
    PageControl.ActivePageIndex := i;
    break;
  end;
 

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: PageControl ActivePage zur Laufzeit ändern

Beitrag von kralle »

Moin,
theo hat geschrieben: Ich blicke nicht, was du da machen willst,
Ich möchte den Anwender so lange auf einer Seite festhalten, bis er bestimmte TEdit-Felder ausgefüllt hat.
theo hat geschrieben: aber so kann man die Seite z.B. über den Index wählen:

Code: Alles auswählen

 
PageControl1.ActivePage:=PageControl1.Pages[2];  
Ich werde das jetzt über den Index machen.
Über den Namen, hätte ich es nur verständlicher gefunden.
Jetzt kommt halt ein vernüpftiger Kommentar in den Quellcode.

Gruß Heiki
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

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

Re: PageControl ActivePage zur Laufzeit ändern

Beitrag von wp_xyz »

kralle hat geschrieben:Moin,
Ich möchte den Anwender so lange auf einer Seite festhalten, bis er bestimmte TEdit-Felder ausgefüllt hat.
Dazu musst du nur das Ergebnis OnChanging des PageControl abfangen und den Parameter AllowChange auf false setzen.
kralle hat geschrieben: Ich werde das jetzt über den Index machen.
Über den Namen, hätte ich es nur verständlicher gefunden.
Mein Code oben zeigt dir, wie du das über den Namen des TabSheets machen kannst (wiegesagt, den Namen, nicht die Caption, die am Reiter eingetragen ist)

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: PageControl ActivePage zur Laufzeit ändern

Beitrag von kralle »

Moin,
wp_xyz hat geschrieben: Dazu musst du nur das Ergebnis OnChanging des PageControl abfangen und den Parameter AllowChange auf false setzen.
Genau das war das was ich gesucht habe. Danke.

Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Antworten