Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Size Grip - ohne Statusbar (https://www.delphipraxis.net/53700-size-grip-ohne-statusbar.html)

turboPASCAL 21. Sep 2005 15:22


Size Grip - ohne Statusbar
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

wie bekommt man das Size-Grip ohne StatusBar auf sein Dialog ? :gruebel:

Luckie 21. Sep 2005 15:32

Re: Size Grip - ohne Statusbar
 
So: http://www.delphi-forum.de/viewtopic...light=sizegrip

turboPASCAL 21. Sep 2005 15:51

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 ?

Flocke 21. Sep 2005 18:26

Re: Size Grip - ohne Statusbar
 
Erweitere dein Formular im Interface-Teil um:
Delphi-Quellcode:
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;
und im Implementation-Teil um:
Delphi-Quellcode:
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;
(TForm1 musst du natürlich durch den Namen deines Formulars ersetzen)

Das InvalidateRect bei WM_SIZE ist ein bisschen blöd, anders geht's aber irgendwie nur mit 'nem Extra-Control für das SizeGrip.

turboPASCAL 21. Sep 2005 18:54

Re: Size Grip - ohne Statusbar
 
Werde ich nacher gleich mal testen. thx.

:hi:

Flocke 22. Sep 2005 11:12

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:
uses
  SizeGripThemed;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // ...
  TSizeGripThemed.Create(Self);
end;
Source siehe Anlage oder hier.
Screenshot zeigt alle drei Varianten (auf die rechte untere Ecke achten).

turboPASCAL 22. Sep 2005 13:26

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.

Flocke 22. Sep 2005 15:48

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 ...

Flocke 22. Sep 2005 21:15

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.

retnyg 30. Okt 2005 12:56

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 08:04 Uhr.
Seite 1 von 2  1 2      

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