AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ClientRect begrenzen

Offene Frage von "oki"
Ein Thema von oki · begonnen am 25. Aug 2007 · letzter Beitrag vom 29. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#11

Re: ClientRect begrenzen

  Alt 25. Aug 2007, 17:37
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 )

Gruß oki
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#12

Re: ClientRect begrenzen

  Alt 27. Aug 2007, 19:29
Tja, leider hab ich es über das Parent-Control noch nicht hin bekommen.
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
42
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#13

Re: ClientRect begrenzen

  Alt 28. Aug 2007, 08:22
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
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#14

Re: ClientRect begrenzen

  Alt 29. Aug 2007, 06:22
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
42
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#15

Re: ClientRect begrenzen

  Alt 29. Aug 2007, 08:02
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.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: ClientRect begrenzen

  Alt 29. Aug 2007, 08:08
Klar, begriffen!

gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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