Delphi-PRAXiS

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 PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthin? (https://www.delphipraxis.net/75113-pagecontrol-aenderung-tabsheet-inhalt-ohne-sprung-dorthin.html)

triangulum 14. Aug 2006 16:02


PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthin?
 
Salü,

Anwendung hat PageControl mit 8 TabSheets.

Wenn nun in TabSheet1 ein Button geklickt wird, löst das Ereignis eine Contentänderung im TabSheet5 aus. Ein Frame wird TabSheet5 hinzuugefügt und angezeigt.

Nun wird dann aufgrund dieser Änderung auch TabSheet5 angezeigt, und nicht TabSheet1.

Wenn man am Ende des Eventhandler eingibt
Delphi-Quellcode:
PageControl1.ActivePageIndex := 0;
kehrt er zwar zu TabSheet1 zurück, aber ein unschönes Flimmern ist noch zu sehen (da der Sprung dorthin ja stattfand, nur sofort Rückkehr).

Wie kann man einstellen, dass die Änderung des Inhalts von TabSheet5 vollkommen im Hintergrun verläuft, und wir bei TabSheet1 stehenbleiben? TabSheet5 nur dann sehen, wenn wir draufklicken?

mkinzler 14. Aug 2006 16:06

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Wie greifst du auf die Elemente des anderen Tabsheets zu?

triangulum 14. Aug 2006 16:23

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Jedes TabSheet enthält einen Frame. Alle Elemente sind in dem jeweiligen Frame zusammengefasst.

Die Frames sind in getrennten Dateien gespeichert. Anfangs werden sie den jew. TabSheets zugewiesen
Delphi-Quellcode:
Application.CreateForm(TSigmaPFrame, SigmaPFrame);
SigmaPFrame.Parent := TabSheet4;
CreatedFrames[3] := true;
später können sich jedoch Komponenten der Frames dynamisch ändern (direkt durch Programmcode).

Dann will ich nicht, dass er, wenn ich auf TabSheet1 bin und Komponenten im TabSheet5 sich ändern, automatisch im PageControl das TabSheet5 auswählt. Er soll die Änderung im Hintergrund ausführen und mich auf TabSheet1 lassen.

mkinzler 14. Aug 2006 16:26

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Nein ich meine im Eventhandler.

triangulum 14. Aug 2006 16:44

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Delphi-Quellcode:
Procedure TCalculationFrame.CalcButtonAltClick(Sender: TObject);
begin

<bla bla>

  HauptF.ShowFrame5(self);
  HauptF.PageControl1.ActivePageIndex := 0
end;
CalculationFrame "klebt" auf TabSheet1, Frame5 auf TabSheet5.

Der CalcButton befindet sich auf CalculationFrame. Die Änderung durch ShowFrame5 betrifft dann Frame5.
Delphi-Quellcode:
Procedure THauptF.ShowFrame5(Sender: TObject);
Begin
 Frame5.FormCreate(Sender);
 StatusHistory;
 Frame5.Show;
End;

Jürgen Thomas 14. Aug 2006 16:48

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Ich kann nicht wirklich helfen; aber vielleicht habe ich eine passende Idee, sodass ein Fachmann die Suche an der richtigen Stelle startet:

Bei Datenbank-Controls gibt es DisableControls/EnableControls, damit genau so ein Flackern verhindert wird.

Unter NET gibt es für alle WinControls die Methoden SuspendLayout/ResumeLayout.

Ich dachte, dass mit Invalidate dies ebenfalls erreicht werden könnte. Aber das ist wohl zu einfach gedacht.

Vielleicht bringen Euch diese Gedanken weiter. Jürgen

Hawkeye219 14. Aug 2006 17:41

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Hallo triangulum,

bei zur Laufzeit erstellten Komponenten ist der Aufruf der Methode Show in der Regel überflüssig. Vielleicht hilft es auch hier, auf diesen Aufruf zu verzichten.

Gruß Hawkeye

raiguen 15. Aug 2006 09:24

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
Zitat:

Zitat von Hawkeye219
...
bei zur Laufzeit erstellten Komponenten ist der Aufruf der Methode Show in der Regel überflüssig. Vielleicht hilft es auch hier, auf diesen Aufruf zu verzichten...

Genau das ist der 'Knackpunkt' ;-)

Zitat:

Zitat von triangulum
Delphi-Quellcode:
Procedure TCalculationFrame.CalcButtonAltClick(Sender: TObject);
begin
<bla bla>
  HauptF.ShowFrame5(self); //aufruf zur Erstellung des Frames IST OKAY
  HauptF.PageControl1.ActivePageIndex := 0
end;
CalculationFrame "klebt" auf TabSheet1, Frame5 auf TabSheet5.

Der CalcButton befindet sich auf CalculationFrame. Die Änderung durch ShowFrame5 betrifft dann Frame5.
Delphi-Quellcode:
Procedure THauptF.ShowFrame5(Sender: TObject);
Begin
 Frame5.FormCreate(Sender);
 StatusHistory;
 Frame5.Show; //<<---- DAS bringt dir sofort den Tab5 in Vordergrund!! 
End;

Schmeiß die Zeile Frame5.Show raus und schon wird im Stillen bzw Hintergrund der Frame erstellt ;-)

triangulum 15. Aug 2006 10:29

Re: PageControl: Änderung Tabsheet-Inhalt ohne Sprung dorthi
 
jou dank an alle, es war tatsächlich Show ... :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 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