Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   DateTimePicker ohne Border (https://www.delphipraxis.net/192054-datetimepicker-ohne-border.html)

DCoderHH 17. Mär 2017 07:42

Delphi-Version: 5

DateTimePicker ohne Border
 
Wie kann ich die Border vom TDateTimePicker entfernen? Es soll vollkommen flach aussehen.

Headbucket 17. Mär 2017 08:46

AW: DateTimePicker ohne Border
 
Hallo,

da gibt es meines Wissens nach (noch) keine simple Lösung. Man kommt also wohl leider nicht um das Selbstzeichnen herum.

Folgenden Code habe ich z.B. hier gefunden: http://dxdelphi.blogspot.de/2016/04/...rame-from.html

Delphi-Quellcode:
unit DateTimePickerBorderless;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ComCtrls, Vcl.Graphics,
  Winapi.Messages, Winapi.Windows;

type
  TDateTimePickerBorderless = class(TDateTimePicker)
  private
    { Private declarations }
    FInnerBorderColor: TColor;
    FOuterBorderColor: TColor;
    procedure WMPaint (var Message: TWMPaint); message WM_PAINT;
    procedure SetInnerBorderColor(const Value: TColor);
    procedure SetOuterBorderColor(const Value: TColor);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; Override;
  published
    { Published declarations }
    property InnerBorderColor: TColor read FInnerBorderColor Write SetInnerBorderColor;
    property OuterBorderColor: TColor read FOuterBorderColor Write SetOuterBorderColor;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('emarti', [TDateTimePickerBorderless]);
end;

{ TDateTimePickerBorderless }

constructor TDateTimePickerBorderless.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ParentColor:= false;
  FInnerBorderColor:= clWhite;
  FOuterBorderColor:= clWhite;
end;

destructor TDateTimePickerBorderless.Destroy;
begin
  inherited;
end;

procedure TDateTimePickerBorderless.SetInnerBorderColor(const Value: TColor);
begin
  FInnerBorderColor:= Value;
  Invalidate;
end;

procedure TDateTimePickerBorderless.SetOuterBorderColor(const Value: TColor);
begin
  FOuterBorderColor:= Value;
  Invalidate;
end;

procedure TDateTimePickerBorderless.WMPaint(var Message: TWMPaint);
var
  OuterBrush, InnerBrush: HBRUSH;
  DC: hdc;
  R: TRect;
begin
  inherited;
  DC:= GetWindowDC(Handle);
  try
    OuterBrush:= CreateSolidBrush(FOuterBorderColor);
    InnerBrush:= CreateSolidBrush(FInnerBorderColor);
    try
      GetWindowRect(Handle, R);
      OffsetRect(R, -R.Left, -R.Top);
      FrameRect(DC, R, OuterBrush);
      InflateRect(R, -1, -1);
      FrameRect(DC, R, OuterBrush) ;
      InflateRect(R, -1, -1);
      FrameRect(DC, R, InnerBrush);
    finally
      DeleteObject(InnerBrush);
      DeleteObject(OuterBrush);
    end;
  finally
    ReleaseDC(Handle, DC);
  end;
end;

end.
Grüße
Headbucket

DCoderHH 17. Mär 2017 11:25

AW: DateTimePicker ohne Border
 
Danke, das läuft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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