AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TPanel Visible := True wirkt nicht in TabSheet OnShow
Thema durchsuchen
Ansicht
Themen-Optionen

TPanel Visible := True wirkt nicht in TabSheet OnShow

Ein Thema von Graf Gustav · begonnen am 5. Feb 2019 · letzter Beitrag vom 6. Feb 2019
Antwort Antwort
Seite 2 von 3     12 3      
Graf Gustav

Registriert seit: 13. Mär 2011
48 Beiträge
 
Delphi 10.4 Sydney
 
#11

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

  Alt 6. Feb 2019, 08:40
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.
Reinhold
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#12

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

  Alt 6. Feb 2019, 08:44
Gut zu wissen!
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#13

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

  Alt 6. Feb 2019, 08:46
@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?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#14

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

  Alt 6. Feb 2019, 08:53
Da finde ich aber die startprocedure wie blawen Sie vorgeschlagen hat besser.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#15

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

  Alt 6. Feb 2019, 08:59
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#16

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

  Alt 6. Feb 2019, 09:01
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;
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#17

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

  Alt 6. Feb 2019, 09:24
Auch mit meinem Beispielprojekt ?


Vergiss es das war ja falsch

Geändert von v2afrank ( 6. Feb 2019 um 09:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#18

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

  Alt 6. Feb 2019, 09:35
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;
Angehängte Dateien
Dateityp: zip Borland Studio-Projekte.zip (826,4 KB, 0x aufgerufen)
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 6. Feb 2019 um 09:52 Uhr)
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#19

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

  Alt 6. Feb 2019, 10:15
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.
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#20

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

  Alt 6. Feb 2019, 10:26
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas ( 6. Feb 2019 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 14:04 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