![]() |
Re: Abartig riesiger Resize-Rahmen bei Vista
Dann lass den Windows-Rahmen weg und kümmere dich selbst darum. Dann wird Vista dir auch nicht reinpfuschen.
Edit: Es gab vor kurzem einen Thread in der DP, in dem das Verschieben und Resizen von rahmenlosen Fenstern besprochen wurde. |
Re: Abartig riesiger Resize-Rahmen bei Vista
Zitat:
|
Re: Abartig riesiger Resize-Rahmen bei Vista
Vielleicht hilfr dir der folgende Code:
Delphi-Quellcode:
der stammt glaub ich aus dem o.g. Thread.
private
{ Private-Deklarationen } procedure NCHIT(var Msg : TWMNCHITTEST); message WM_NCHITTEST; . . . procedure TForm1.NCHIT(var Msg : TWMNCHITTEST); var p : Tpoint; const a = 9; var r,u : integer; begin p.x := msg.XPos; p.y := msg.YPos; p := screentoclient(p); msg.Result := HTCLIENT; {-} r := self.width - a; u := self.height - a; {-} if p.x > r then msg.Result := HTRIGHT; if p.y > u then msg.Result := HTBOTTOM; if PtInRect(Rect(r,u,self.width,self.height),p) then msg.Result := HTBOTTOMRIGHT; end; |
Re: Abartig riesiger Resize-Rahmen bei Vista
Morgen,
verdammter roter Kasten :mrgreen: Naja.. Ich poste meinen Kram trotzdem. Zum Resizen/Verschieben kann ich dir folgendes Codebeispiel anbieten:
Delphi-Quellcode:
Wie man da sieht, wird so ein HT... immer als Message.Result gesetzt, wenn man das Formular resizen oder verschieben können soll.
type
TfrmAppMain = class(TForm) procedure WMNCHitTest(var Message: TMessage); message WM_NCHITTEST; [...] implementation procedure TfrmAppMain.WMNCHitTest(var Message: TMessage); var x, y: Integer; p: TPoint; begin inherited; if Maximized then Exit; x := LoWord(Message.LParam); y := HiWord(Message.LParam); p.X := x; p.Y := y; p := ScreenToClient(p); if PtInRect(Rect(imgTopLeft.Left, imgTopLeft.Top, imgTopLeft.Left + imgTopLeft.Width, imgTopLeft.Top + imgTopLeft.Height), p) or PtInRect(Rect(imgMinimize.Left, imgMinimize.Top, imgMinimize.Left + imgMinimize.Width, imgMinimize.Top + imgMinimize.Height), p) or PtInRect(Rect(imgMaximize.Left, imgMaximize.Top, imgMaximize.Left + imgMaximize.Width, imgMaximize.Top + imgMaximize.Height), p) or PtInRect(Rect(imgClose.Left, imgClose.Top, imgClose.Left + imgClose.Width, imgClose.Top + imgClose.Height), p) then begin Exit; end; if PtInRect(Rect(5, 5, Width - 5, imgGradient.Height), p) then Message.Result := HTCAPTION; if PtInRect(Rect(5, 5, Width - 5, Height - 5), p) then Exit; if PtInRect(Rect(0, 0, 15, 15), p) then begin Message.Result := HTTOPLEFT; Exit; end; if PtInRect(Rect(Width - 15, 0, Width, 15), p) then begin Message.Result := HTTOPRIGHT; Exit; end; if PtInRect(Rect(0, Height - 15, 15, Height), p) then begin Message.Result := HTBOTTOMLEFT; Exit; end; if PtInRect(Rect(Width - 15, Height - 15, Width, Height), p) then begin Message.Result := HTBOTTOMRIGHT; Exit; end; if PtInRect(Rect(0, 0, imgGradient.Width, 5), p) then Message.Result := HTTOP; if PtInRect(Rect(0, 5, 5, Height - 5), p) then Message.Result := HTLEFT; if PtInRect(Rect(0, Height - 5, Width, Height), p) then Message.Result := HTBOTTOM; if PtInRect(Rect(Width - 5, 5, Width, Height), p) then Message.Result := HTRIGHT; end; Kopier dir die Prozedur einfach und spiel ein bisschen damit rum.. Ist eigentlich wirklich einfach. Edit: Vielleicht ist mein Zeugs hier auch unnötig kompliziert.. Naja, tat immer, darum ist es einfach so geblieben.. Ist auf jedenfall etwas länger als der Source von Progman, berücksichtigt dafür aber Sachen wie die Min/Max/Close Knöpfe.. Verhält sich jedenfalls fast so, wie ein "normales" Fenster. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr. |
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-2025 by Thomas Breitkreuz