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 Auf Panel.Resize() im Mainform in anderem Fenster reagieren (https://www.delphipraxis.net/91815-auf-panel-resize-im-mainform-anderem-fenster-reagieren.html)

TNoob 10. Mai 2007 12:20


Auf Panel.Resize() im Mainform in anderem Fenster reagieren
 
Moin Delphifreunde! Hab mich mal angemeldet, um nicht immer nur passiv dabei zu sein :)

Also folendes Szenario:

Ich habe ein SDI-Projekt mit einem TTreeview align=Left und ein TPanel align=Client auf dem Hauptformular. Das Projekt hat noch weitere Formulare, die in der Projektdatei autocreatet werden.

Diese Formulare werden im OnCreate() auf ParentWindow=MainForm.Panel gesetzt. Durch Auswahl im Treeview werden die entsprechenden Formulare auf dem Panel angezeigt, die vorherige Form wird geschlossen.

Das klappt alles reibungslos, jedoch will ich nun bei Größenänderung der Anwendung und dem entsprechend des "ClientPanels" auch die Formulare auf dem Panel an die Größe anpassen.

Die Unterformulare haben:
BorderStyle=bsToolWindow
WindowState=wsMaximized
Align=alClient / alNone

Im OnPaint() setzte ich mit SetBounds(MainForm.Panel....) immer auf die aktuelle Größe.
Um Verschieben der Form auf dem Panel zu unterbinden, reagiere ich auf WM_MOVING und WM_NCHITTEST (habe ich aus dem Forum).

Jetzt das Problem:

1.) Nutze ich align=alClient und im OnPaint() das SetBounds() wird scheinbar die Form immer wieder neu gezeichnet und flackert ständig.

2.) Nutze ich align=alNone und SetBounds(), wird das OnPaint() nicht mehr aufgerufen. (erst wieder wenn z.B. ein anderes Control die Form "zerstört" und ein Neuzeichnen erzwingt->Dialogfenster o.Ä.)

3.) Nutze ich align=alClient ohne SetBounds(), wird das Formular nicht vollständig ins Panel eingepasst. Rechts fehlt dann ein Bereich! ???


Meine Idee war nun in Beispiel 2) einfach das OnPaint() selber aufzurufen, jedoch bekomme ich dann einen Fehler bei Start der Anwendung, vermutlich weil zu dem Zeitpunkt das Unterformular noch nicht createt wurde. Habe schon überlegt das Botschaftssystem von Windows zu nutzen, jedoch ist in meiner Delphiversion die "messages.pas" nicht enthalten ;(

Kann mir jemand weiterhelfen?

MfG TNoob

marabu 10. Mai 2007 12:37

Re: Auf Panel.Resize() im Mainform in anderem Fenster reagie
 
Herzlich willkommen in der Delphi-PRAXiS, TNoob.

Ich weiß jetzt nicht wie genau du die ChildForms realisiert hast, aber ich arbeite auch oft mit ChildForms anstelle von Frames (aus historischen Gründen) und ich habe die von dir beschriebenen Probleme nicht. Liegt es am anderen Ansatz? Schau selbst: klick

Freundliche Grüße vom marabu

TNoob 10. Mai 2007 13:17

Re: Auf Panel.Resize() im Mainform in anderem Fenster reagie
 
Vielen Dank Marubu!
Dann werd ich das mal so wie in deinem Beispiel machen. Es ist scheinbar ein Unterschied ob ich zur Laufzeit als Parent/Child setze, oder gleich als Child create. Das wichtigste war, das man das Unterformular nicht auf dem Panel verschieben kann. Bei dir gehts einfach so und ich hab mir da einen abgebrochen.^^

MfG


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