![]() |
Abartig riesiger Resize-Rahmen bei Vista
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab hier eine Komponente im Einsatz, die die Titelzeile eines Festers durch einen eigenen Stil ersetzt.
(Ob das jetzt schön ist sei dahingestellt - es geht darum das in einer Anwendung etliche Fenster in vordefinierten Layouts wie zusammengehörende Module präzise nebeneinander plaziert werden) Bis unter XP lief das immer recht nett, unter Vista haben diese Fesnter jetzt plötzlich einen riesigen Resize-Bereich. (Im Screenshot im Anhang - oben XP, unten Vista) Was kann man da tun? Danke, Ralf |
Re: Abartig riesiger Resize-Rahmen bei Vista
Dem Fenster generell den Rahmen entfernen und selbst zeichnen? Ein normales Fenster hat unter Vista halt einen dicken Rahmen.
Edit: Eventuell tut es auch ein Manifest, das die Anwendung auf uxtheme verzichten lässt? Aber das ist nur so ein Gedanke. |
Re: Abartig riesiger Resize-Rahmen bei Vista
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Manifest? Ich hab die App mal ohne Manifest gemacht (da sollt dann ja auch kein uxtheme verwendet werden, oder?) - sieht auch nicht besser aus (siehe Anhang 2) |
Re: Abartig riesiger Resize-Rahmen bei Vista
Mit den dicken Rahmen musst Du aber generell rechnen. Die Rahmendicke einstellen kann man schon seit Windows 3.x, bisher hattest Du nur Glück, dass der Standardwert "dünner" war.
Wird Vista auf Klassisch umgestellt, sind da die Rahmen ebenfalls "normal" wie bei Windows 2000 & Co. |
Re: Abartig riesiger Resize-Rahmen bei Vista
Zitat:
(Ich such da herum bei WinXP, find aber nix) Kann man die Rahmenbreite für eine Applikation (oder vielleicht sogar ein Fenster) runterdrehen? |
Re: Abartig riesiger Resize-Rahmen bei Vista
Zitat:
Zitat:
|
Re: Abartig riesiger Resize-Rahmen bei Vista
Zitat:
Designs, OK, bei Vista kann man auf klassisch umstellen, aber z.B. XP "dicker" machen geht da IMHO nicht. Zitat:
|
Re: Abartig riesiger Resize-Rahmen bei Vista
Desktop, rechte Maustaste, Eigenschaften, Darstellung, Erweiterete Darstellung
Zumindest unter XP. Vista kenne ich nicht. Zitat:
Ich finde Programme schrecklich deren Skinsd einem aufgezwungen werden und die man nicht abschalten kann. |
Re: Abartig riesiger Resize-Rahmen bei Vista
Liste der Anhänge anzeigen (Anzahl: 1)
Geht auch unter Vista noch, zu finden unter Desktop -> Rechtsklick -> Anpassen -> Fensterfarbe und Darstellung -> Eigenschaften für klasssische Darstellung öffnen, um weitere Optionen anzuzeigen.
|
Re: Abartig riesiger Resize-Rahmen bei Vista
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Die Fenster sollen im Allgemeinen ja ohnehin nicht verschoben werden - nur ganz selten sind da Anpassungen nötig. Während die Anwendung läuft wird ja sogar der Taskbar ausgeblendet, weil auf dem Rechner dann exklusiv gearbeitet wird. (Klinischer Einsatz, das ist da so) |
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:47 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