Hallo
Um den Bereich rechts einzugrenzen, müssen wir die Grösse der NCA neu berechnen.
Wenn WM_NCCALCSIZE gesendet wird, machen wir die neue Berechnung.
Zusätzlich behandeln wir noch WM_NCPAINT, damit das normale Aussehen des Edits wieder
hergestellt wird.
Eine vereinfachte Komponente könnte so aussehen:
Delphi-Quellcode:
unit BorderEdit;
interface
uses
Windows, Messages, Classes, Controls, StdCtrls, Graphics;
type
TBorderEdit =
class(TEdit)
private
procedure WMNCCalcSize(
var Message: TWMNCCalcSize);
message WM_NCCALCSIZE;
procedure WMNCPaint(
var Msg : TWMNCPaint);
message WM_NCPAINT;
procedure NCPaint(ACanvas : TCanvas);
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Samples', [TBorderEdit]);
end;
procedure TBorderEdit.WMNCCalcSize (
var Message: TWMNCCalcSize);
begin
inherited;
Dec(
Message.CalcSize_Params^.rgrc[0].Right, 15);
end;
procedure TBorderEdit.NCPaint(ACanvas : TCanvas);
begin
ACanvas.Pen.Color := clWindow;
ACanvas.Brush.Color := clWindow;
ACanvas.Rectangle(Rect(3,2, Width-2, Height-2));
end;
procedure TBorderEdit.WMNCPaint(
var Msg: TWMNCPaint);
var
Canvas : TCanvas;
DC : HDC;
begin
inherited;
Canvas := TCanvas.Create;
DC := GetWindowDC(
Handle);
try
Canvas.Handle :=
DC;
NCPaint(Canvas);
Invalidate;
finally
ReleaseDC(
Handle,
DC);
Canvas.Free;
end;
end;
end.