Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TPanel Visible := True wirkt nicht in TabSheet OnShow (https://www.delphipraxis.net/199607-tpanel-visible-%3D-true-wirkt-nicht-tabsheet-onshow.html)

Graf Gustav 6. Feb 2019 08:40

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Danke euch für die Hinweise.
Entscheidend ist der Pagewechsel.
Denn ausgelöst wird das TabShow-Ereignis durchaus initial,
die Visible-Anweisung wird auch durchlaufen, das Panel ändert auch seinen Visible-Status,
es bewirkt nur nichts. (Auch kein ProzessMessages und kein Repaint etc. hilft...)

Es schaudert mich zwar ein bisschen, aber das ist mein Workaround:
PageControl bekommt eine zweites (der Ordnung halber ist es dann die erste) TabSheet
mit TabVisible = False, das ist die ActivePage beim Start.
In dem OnShow-Ereignis des Fensters wird dann ActivePage auf 1 gesetzt.
Dann gehts.

ConnorMcLeod 6. Feb 2019 08:44

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Gut zu wissen!

Moombas 6. Feb 2019 08:46

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
@graf gustav: Warum nicht einfach so, wie ich bereits schrieb:
Delphi-Quellcode:
procedure TForm1.PageControl1Change(Sender: TObject);
begin
  if Pagecontrol1.ActivePage = Tabsheet2 then
    Panel1.Show
  else
    Panel1.Hide;
end;
Dann brauchst du kein zusätzliches Tabsheet oder ähnliches. Und bei mir hats ja im Test funktioniert, hast du mal ein Projekt nur mit den Komponenten gemacht zum Testen?

v2afrank 6. Feb 2019 08:53

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Da finde ich aber die startprocedure wie blawen Sie vorgeschlagen hat besser.

Moombas 6. Feb 2019 08:59

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Im Endeffekt muss es jeder selber wissen, viele Wege führen nach Rom. Nichts desto Trotz funktioniert bei mir das Einblenden des Panels wenn man mit ".visible" arbeitet im onShow Event Problemlos.

Andreas L. 6. Feb 2019 09:01

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Ich kann den Fehler nicht reproduzieren. Das Panel wird im OnShow sichtbar. Getestet in Delphi 2009 Pro und Turbo Delphi 2006 Pro.

Delphi-Quellcode:
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Button1: TButton;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    procedure TabSheet2Show(Sender: TObject);
    procedure Button1Click(Sender: TObject);

...


procedure TForm1.Button1Click(Sender: TObject);
begin
  panel1.Visible := False;
  panel1.Visible := True;
end;

procedure TForm1.TabSheet2Show(Sender: TObject);
begin
  panel1.Visible := True;
end;

v2afrank 6. Feb 2019 09:24

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Auch mit meinem Beispielprojekt ?


Vergiss es das war ja falsch

Moombas 6. Feb 2019 09:35

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zu deinem Beispiel Projekt:
1. Liegt das Panel nicht im Sheet -> korrigiert
2. Packe mal eine zweite Seite zum Pagecontrol hinzu
3. Wechsel die Seiten

und siehe da, das Panel erscheint! Siehe Anhang.

Und wenn man das Panel per Button ein-/ausblenden möchte geht (nur als Beispiel) folgendes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Panel1.Visible = True then
    Panel1.Visible := False
  else
    Panel1.Visible := True;
end;

Andreas L. 6. Feb 2019 10:15

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Ich hab jetzt nochmal was ausprobiert. Wenn das Panel auf dem TabSheet liegt das beim Start der Anwendung sichtbar ist. Wird das Panel tatsächlich nicht sichtbar.

Moombas 6. Feb 2019 10:26

AW: TPanel Visible := True wirkt nicht in TabSheet OnShow
 
Zitat:

Zitat von Andreas L. (Beitrag 1424821)
Ich hab jetzt nochmal was ausprobiert. Wenn das Panel auf dem TabSheet liegt das beim Start der Anwendung sichtbar ist. Wird das Panel tatsächlich nicht sichtbar.

Weil das Tabsheet als default visible = false beim start hat. Ansonsten macht es ja auch keinen Sinn! Du stellst ja das visible auf false im Objektinspector damit das Panel (oder was auch immer) beim Programmstart NICHT sichtbar ist. Nun willst du aber das beim Programmstart es über das Show-Event doch sichtbar wird. Das beißt sich.

Ich glaube das es WaD (Works as designed) ist, da beim Seitenwechsel der ".visible := True;" korrekt ausgeführt ist und dein Problem nur beim Programmstart besteht, was du aber mit deiner Einstellung im Objektinspektor selber ABSICHTLICH so eingestellt hast!?

Fazit:
Willst du das das Panel sofort sichtbar ist bei Programmstart: Visible per default auf True setzen (oder z.B. beim onCreate-Event einblenden, wenn es Abhängigkeiten dafür gibt).
Willst du das Panel während der Laufzeit einblenden: z.B. beim onShow-Event ".visible := true" setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz