![]() |
Size Grip - ohne Statusbar
Liste der Anhänge anzeigen (Anzahl: 1)
|
Re: Size Grip - ohne Statusbar
|
Re: Size Grip - ohne Statusbar
Liste der Anhänge anzeigen (Anzahl: 1)
Ja danke Luckie, das ist eine gute Idee. Hm, leider gibt es dann bei der Benutzung des XP-Manifestes einen unschönen Effect.
Noch eine andere Idee ? |
Re: Size Grip - ohne Statusbar
Erweitere dein Formular im Interface-Teil um:
Delphi-Quellcode:
und im Implementation-Teil um:
protected
procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND; procedure WMNcHitTest(var Msg: TWMNcHitTest); message WM_NCHITTEST; procedure WMSize(var Msg: TWMSize); message WM_SIZE;
Delphi-Quellcode:
(TForm1 musst du natürlich durch den Namen deines Formulars ersetzen)
procedure TForm1.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
var rc: TRect; procedure Paint3(dc: HDC; const rc: TRect; clr: COLORREF; delta: integer); var pen, oldpen: HPen; begin pen := CreatePen(PS_SOLID, 0, clr); try oldpen := SelectObject(dc, pen); try MoveToEx(dc, rc.Right - delta, rc.Bottom - 1, nil); LineTo(dc, rc.Right, rc.Bottom - 1 - delta); inc(delta, 4); MoveToEx(dc, rc.Right - delta, rc.Bottom - 1, nil); LineTo(dc, rc.Right, rc.Bottom - 1 - delta); inc(delta, 4); MoveToEx(dc, rc.Right - delta, rc.Bottom - 1, nil); LineTo(dc, rc.Right, rc.Bottom - 1 - delta); finally SelectObject(dc, oldpen); end; finally DeleteObject(pen); end; end; begin inherited; Windows.GetClientRect(Handle, rc); rc.Left := rc.Right - 12; rc.Top := rc.Bottom - 12; Paint3(Msg.DC, rc, GetSysColor(COLOR_3DSHADOW), 2); Paint3(Msg.DC, rc, GetSysColor(COLOR_3DSHADOW), 3); Paint3(Msg.DC, rc, GetSysColor(COLOR_3DHILIGHT), 4); end; procedure TForm1.WMNcHitTest(var Msg: TWMNcHitTest); var rc: TRect; pt: TPoint; begin Windows.GetClientRect(Handle, rc); rc.Left := rc.Right - 12; rc.Top := rc.Bottom - 12; pt.x := Msg.XPos; pt.y := Msg.YPos; Windows.ScreenToClient(Handle, pt); if PtInRect(rc, pt) then Msg.Result := HTBOTTOMRIGHT else inherited; end; procedure TForm1.WMSize(var Msg: TWMSize); begin inherited; Windows.InvalidateRect(Handle, nil, TRUE); end; Das InvalidateRect bei WM_SIZE ist ein bisschen blöd, anders geht's aber irgendwie nur mit 'nem Extra-Control für das SizeGrip. |
Re: Size Grip - ohne Statusbar
Werde ich nacher gleich mal testen. thx.
:hi: |
Re: Size Grip - ohne Statusbar
Liste der Anhänge anzeigen (Anzahl: 1)
Konnte nicht umhin 'ne kleine Kompo dafür zu schreiben 8)
Benutzung ist denkbar einfach:
Delphi-Quellcode:
Source siehe Anlage oder
uses
SizeGripThemed; procedure TForm1.FormCreate(Sender: TObject); begin // ... TSizeGripThemed.Create(Self); end; ![]() Screenshot zeigt alle drei Varianten (auf die rechte untere Ecke achten). |
Re: Size Grip - ohne Statusbar
Na toll, jetzt wo ich mir selbst eine Kompo. (nach deinem Hinweis) geschrieben habe kommst Du und macht’s mir nach... äh.. vor. :zwinker:
Leider muss ich zugeben das mir Deine besser gefällt. :? Danke für diese schöne Komponente(n). :hi: // Edit: :gruebel: mach doch einen neuen Thread in Open Source damit man es besser in der Suche findet. // 2. Edit: (ausgiebig getestet) :bounce1: *juhu* ...man hab ich lange nach so etwas gesucht. |
Re: Size Grip - ohne Statusbar
Es scheint da noch ein kleines Problem zu geben (ich PM-me gerade mit turboPASCAL), also vielleicht erstmal nicht downloaden und installieren.
Mal 'ne technische Frage ... |
Re: Size Grip - ohne Statusbar
Liste der Anhänge anzeigen (Anzahl: 1)
So, neue Version fertig (den Download oben lösche ich raus).
@turboPASCAL: die Konstante SP_GRIPPER stammt aus der UxTheme.pas von Delphi, ich habe sie durch den Wert (3) ersetzt. Damit sollte man die Units auch mit der UxTheme.pas von Mike Lischke verwenden können. Die ge-theme-te Version TSizeGripThemed hat den "Vorteil", dass das Grip wirklich genau wie bei einem StatusBar gezeichnet wird, und damit je nach aktiviertem Stil unterschiedlich aussehen kann. |
Re: Size Grip - ohne Statusbar
den ganzen paint-scheiss hättest du dir sparen können:
Delphi-Quellcode:
DrawFrameControl ( DC, sender.ClientRect , DFC_SCROLL, DFCS_SCROLLSIZEGRIP );
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz