Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Formular: Minimale Breite (OnPaint-BUG?) (https://www.delphipraxis.net/126543-formular-minimale-breite-onpaint-bug.html)

64Jabor 27. Dez 2008 22:15


Formular: Minimale Breite (OnPaint-BUG?)
 
Hallo DP,

ich habe folgendes Problem:

Mein Formular hat eine minimale Breite und Höhe, das habe ich per Constraints.MinHeight/Width eingestellt.
Nun habe ich jedoch im OnPaint-Ereignis des Formulares eingestellt, dass eine Komponente auf dem Formular - ein TEmbeddedWebBrowser -
immer die Breite des Formulares (clientwidth) und enstprechende Höhe (clientheight - komponente.top) bekommt.

Solange ich das Formulare VERGÖßERE, klappt alles wunderbar, der TEmbedded... passt sich an usw. doch wenn ich nun das Formular verkleinere, dann stimmt irgendetwas nicht mehr.
Der Browser passt sich nicht mehr an, seine Ränder verschwinden hinter ScrollBars, selbst wenn das Formular doppelt so breit wie normal ist und ich es nur um einen Pixel verkleinere, und bleiben verborgen bis man das Forumlar wieder vergrößert.

Woran kann das liegen?


greetZ 64Jabor

sirius 27. Dez 2008 22:28

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Was immer du genau machst, dein Problem sollte sich mit Align=alClient lösen.

64Jabor 27. Dez 2008 23:14

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
:/
Thx aber da kann ich auch den WindowState auf wsMaximized stellen und per BorderStyle den Resize rausnehmen.
NICHT Sinn der Sache...

Ich will ja "nur" dass mein Formular veränderbar in seiner Größe ist, nur halt nicht unter gewissen Grenzen kommt, das habe ich ja gelöst mit dem Constraints.
Mein Fenster HAT danach eine gewisse Höhe und Breite!
Es geht mir ja darum den Fehler zu beheben, dass sich die ScrollBars wie oben geschildert permanent einmischen - ohne Grund...

Was ich bezwecken will hast du hoffentlich verstanden, falls nicht versuche mal deinen Browser auf 10 Pixel Breite zu bringen - es wird nicht klappen.
Das Icon und die Button-Gruppe (minimieren, wiederherstellen, schließen) "rammen" sich un verhindern dass es weiter geht.
Genau das will ich auch erreichen - nur eben früher, sodass ich die ganzen Komponeten tolerant machen kann, sie sich der Formulargröße anpassen, ABER eben nicht ins Unendliche gestampft werden indem man das Formular einfach viel zu klein macht...

Hawkeye219 27. Dez 2008 23:58

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Hallo Sebastian,

wäre nicht das Ereignis Delphi-Referenz durchsuchenTForm.OnResize geeigneter für dein Vorhaben? Bei einem Verkleinern muss das Formular nicht zwangsläufig komplett neugezeichnet werden.

Gruß Hawkeye

jaenicke 28. Dez 2008 02:57

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Zitat:

Zitat von 64Jabor
:/
Thx aber da kann ich auch den WindowState auf wsMaximized stellen und per BorderStyle den Resize rausnehmen.
NICHT Sinn der Sache...

Was hat das eine mit dem anderen zu tun? :gruebel:

Align des TEmbeddedWebBrowser auf alClient gesetzt sollte dafür sorgen, dass dieser automatisch immer so groß ist wie das Formular, WindowState auf wsMaximized sorgt dafür, dass das Formular über den ganzen Bildschirm geht. Wo ist da der Zusammenhang?

Für eine Größenänderung ist jedenfalls OnPaint sicher nicht der richtige Ort, da hat Hawkeye219 Recht.

Uwe Raabe 28. Dez 2008 08:50

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Beim Vergrößern eines Forms wird Paint aufgerufen, weil Teile des Forms gezeichnet werden müssen, die bislang nicht zu sehen sind. Beim Verkleinern ist das nicht nötig, da alles bereits auf dem Bildschirm sichtbar ist - daher kein Paint-Aufruf. Windows zeichnet einfach nur den Rahmen neu und läßt nur das neu zeichnen, was bisher von dem Form verdeckt war.

OnPaint ist also der denkbar schlechteste Zeitpunkt eine Größenanpassung der enthaltenen Controls auszuführen.

64Jabor 29. Dez 2008 14:02

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Achso,

das erklärt einiges, vielen Dank!
OnResize müsste demnach aber die beste Variante sein, nicht?

toms 29. Dez 2008 14:11

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Zitat:

Zitat von 64Jabor
OnResize müsste demnach aber die beste Variante sein, nicht?

einfacher ist doch
Zitat:

Align des TEmbeddedWebBrowser auf alClient

64Jabor 29. Dez 2008 21:17

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
@tom

Wenn ich das mache, dann passt sich TEmbeddedWebbrowser immer auf mein Formular an, schön und gut, aber diese Komponente ist nicht die einzige auf meinem Formular...
Gibt es eine Möglichkeit bei dieser Methode mit dem align, die Komponente auf einen gewissen Raum zu begrenzen?

Matze 29. Dez 2008 21:33

Re: Formular: Minimale Breite (OnPaint-BUG?)
 
Hallo,

dazu kannst du vielleicht die Eigenschaft Delphi-Referenz durchsuchenAnchors nutzen. Ist dort xxLeft auf true, dehnt sich die Komponenten-Größe nur nach links aus usw.
Spiele damit einfach etwas herum.

Grüße, Matze


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Seite 1 von 2  1 2      

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