Delphi-PRAXiS
Seite 2 von 2     12   

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 ClientRect begrenzen (https://www.delphipraxis.net/98331-clientrect-begrenzen.html)

oki 25. Aug 2007 18:37

Re: ClientRect begrenzen
 
Im Moment habe ich das Gefühl, dass der Schlüssel zur Lösung in diesem Zitat aus der OH für ClientHeight, wie schon weiter oben angeführt, liegt:
Zitat:

Bei TControl ist ClientHeight mit der Eigenschaft Height identisch. In abgeleiteten Klassen kann aber eine ClientHeight-Eigenschaft implementiert werden, die sich von Height unterscheidet. So entspricht beispielsweise der Wert der Eigenschaft ClientHeight eines Formulars dem Wert von Height abzüglich der Höhe der Titelleiste, des Rahmens und der Bildlaufleiste.
Im Besonderen macht mich dieser Satz aufmerksam:
Zitat:

In abgeleiteten Klassen kann aber eine ClientHeight-Eigenschaft implementiert werden, die sich von Height unterscheidet.
Eigentlich müsste man doch jetzt nur wissen, wie man eine ClientHeight-Eigenschaft implementiert, die von Height abweicht (für die anderen Clientwerte natürlich identisch; logisch).

Klingelts da bei jemanden?
(Bei mir nicht :cry: )

Gruß oki

oki 27. Aug 2007 20:29

Re: ClientRect begrenzen
 
Tja, leider hab ich es über das Parent-Control noch nicht hin bekommen. :cry:
Aus diesem Grund hab ich es jetzt so gemacht, dass beim Verschieben des Controls geprüft wird, ob es sich im ClientRect des Parents befindet. Wenn nicht, dann wird die Position korriegiert.

Gruß oki

Gruber_Hans_12345 28. Aug 2007 09:22

Re: ClientRect begrenzen
 
Zitat:

Zitat von oki
@ Gruber_Hans_12345:
Leider nicht. der Codevorschlag liefert eher "komische" Ergebnisse. Siehe Anhang.
Ich habe hier einmal meinen Mozilla in den Vordergrund und wieder zurück gebracht. Der Rand mit den Resten meines Browsers ist genau der eingekrenzte Rect aus deinem code. Ein Wechsel für Inc; Dec liefert das Ergebnis, dass von meinem Panel beim Verschieben etwas übrig bleibt (auf dem Parent). der gewünschte effekt für die enthaltenen Controls tritt aber nicht ein.

Also, das sieht ja schon gnaz gut aus!

dein problem ist jetzt nur mehr, das du deine zeichenoperation auch in den NC Bereich verlegen mußt

Delphi-Quellcode:

    procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;

procedure TfrMDIChild.WMNCPaint(var Msg: TWMNCPaint);
var
    DC         : HDC;
    iCanvas    : TCanvas;
begin
    iCanvas        := TCanvas.Create;
    DC             := GetWindowDC(Handle)
    iCanvas.Handle := DC;

    FormNCPaint(iCanvas);  <<< hier dann die zeichenroutine auf den Canvas

    ReleaseDC(Handle, DC);

    iCanvas.free;
    Msg.Result := 0;
end;
Da du ja den ClientBeriech verkleinert hast, mußt du nun deine sachen (den Header und rahmen) in den NC Bereich verlegen

oki 29. Aug 2007 07:22

Re: ClientRect begrenzen
 
Hi Gruber_Hans_12345,
auch dir herzlichen Dank für deine Antworten. Nach dem zweiten Überlegen ist dein Codevorschlag wirklich interessant. Leider trifft er aber nicht den Kern meines aktuellen Problemes. Ich versuch es noch mal zu erklären.

Mir geht es an dieser Stelle nicht darum, dass ich in meiner Compo in den definierten Clientbereich zeichne. Ich möchte, dass andere Kompos von mir zur Laufzeit nur im festgelegten Clientbereich platziert und verschoben werden können.

Kann es sein, dass dein Codevorschlag ein Zeichnen zwischen WindowRect und ClientRect andeutet? Also sozusagen das Control per Hand zeichnen und den neuen Clientbereich auslassen. Somit würde das Zeichnen eventuell über den Rand geschobene Controls übermalen und somit den Eindruck erwecken, dass sie nur im ClientBereich sichtbar sind.

Dann noch mal gefragt, was verstehst du unter NC-Bereich? Ich würde dann ja non-Client vermuten.

Dank und Gruß oki

Gruber_Hans_12345 29. Aug 2007 09:02

Re: ClientRect begrenzen
 
ja, NC ist der Non Client Bereich

und ich habe diesen code dazu verwendet, um den Non-ClientBereich in meinem Formular zu vergrößern.

das bedeutet, das jedes Panel, das bei 0,0 platziert wird, oder das mit Align = alClient verwendet wird, nun nur mehr in diesem ClientBereich platziert wird
dh wird der NonClient Bereich vergrößert (der obige rand zb) dann rutschen alle controls nach unten, und können nicht in den NonClient Bereich verschoben werden.

oki 29. Aug 2007 09:08

Re: ClientRect begrenzen
 
Klar, begriffen!

gruß oki


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz