Einzelnen Beitrag anzeigen

TNoob

Registriert seit: 10. Mai 2007
7 Beiträge
 
Delphi 7 Personal
 
#1

Auf Panel.Resize() im Mainform in anderem Fenster reagieren

  Alt 10. Mai 2007, 13:20
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
  Mit Zitat antworten Zitat