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 Client Area von Form beschränken (https://www.delphipraxis.net/52368-client-area-von-form-beschraenken.html)

Zerolith 29. Aug 2005 00:01


Client Area von Form beschränken
 
Tag,

ja ich habe bereits die Suche verwendet. Leider hilft mir dieser Thread nicht weiter.

ich habe ein Formular mit Border := bsNone; Daher wird ein Panel (z.B. für ein Menü oben) das alTop hat, bei x:0;y:0 beginnend gezeichnet. Gefällt mir nicht. Da mein Form. ein paar Bitmaps für den Rand und die "Titelleiste" zeichnet. Jetzt würde ich trotzdem gern eine eigene "ClientArea" definieren.

Wie mach ich das?

Danke, Daniel

Flocke 29. Aug 2005 07:03

Re: Client Area von Form beschränken
 
Dann setze Align wieder auf alNone, positioniere dein Panel so wie es sein soll (im Formular) und setze zusätzlich Right in der Eigenschaft "Anchors". Dann ist der rechte Rand des Controls am rechten Rand des übergeordneten Controls (bzw. der Form) "verankert".

Zerolith 29. Aug 2005 09:46

Re: Client Area von Form beschränken
 
gibts keine schönere möglichkeit?

Olli 29. Aug 2005 09:55

Re: Client Area von Form beschränken
 
Schreibe einen Handler für WM_NCCALCSIZE.

Allerdings weiß ich nicht, ob Delphi dann nicht vielleicht mit den Aligns und Anchors durcheinanderkommt :gruebel:

Zerolith 29. Aug 2005 10:16

Re: Client Area von Form beschränken
 
Danke für den Tipp. Aber das is gerade der typische fall: "dem hund n knochen wortlos hinwerfen"

sorry - wie und was müsste ich hierfür tun?

danke

Olli 29. Aug 2005 10:32

Re: Client Area von Form beschränken
 
Zitat:

Zitat von Zerolith
Aber das is gerade der typische fall: "dem hund n knochen wortlos hinwerfen"

:gruebel: ... ähem ... sicher doch :?

Zitat:

Zitat von Zerolith
sorry - wie und was müsste ich hierfür tun?

Die Frage ist, ob du ein Rezept willst, oder ob du den fertigen Kuchen willst?! Letzteres bekommst du von mir leider nicht.

WM_* sollte dich darauf aufmerksam machen, daß es sich um eine Fensternachricht handelt. Wenn man sich dann über MSDN-Library durchsuchenWM_NCCALCSIZE im PSDK schlau gemacht hat, weiß man sogar wofür lParam und wParam in diesem Falle stehen. Da es um eine Fensternachricht geht, ist der Handler eine Fensterfunktion, die WM_NCCALCSIZE bearbeitet anstelle der orginalen Fensterfunktion.

Alles redundante Information, da sie oben bereits drinsteckte.

Flocke 29. Aug 2005 10:37

Re: Client Area von Form beschränken
 
Du hast doch eine Enterprise-Version. Schau in der Unit Forms nach der Routine TCustomForm.WMNCCalcSize (als Beispiel). Dann reduziert Windows aber den Client-Bereich und du kannst nicht mehr mit dem normalen OnPaint drauf zeichnen, sondern musst WM_NCPAINT ebenfalls abfangen überschreiben.

//EDIT: roten Kasten gesehen und ignoriert (das passiert wenn man anfängt und dann zwischendurch 15 Min. telefoniert 8))

[Nachtrag]

Schöne Beispiele sind auch TWinControl.WMNCCalcSize und TWinControl.WMNCPaint in der Unit Controls.

//EDIT: Durchgestrichene Passage geändert

Olli 29. Aug 2005 10:43

Re: Client Area von Form beschränken
 
Zitat:

Zitat von Flocke
Schöne Beispiele sind auch TWinControl.WMNCCalcSize und TWinControl.WMNCPaint in der Unit Controls.

... Wobei WM_NCPAINT es erlaubt in den Bereich innerhalb des Fensters aber außerhalb der Client Area zu zeichnen. Das wäre also die Stelle, wo man normalerweise die Bitmap zum Verzieren draufblitten würde.

Zerolith 29. Aug 2005 10:43

Re: Client Area von Form beschränken
 
Danke werd ich mir anschauen


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