Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: TEdit - Textbereich eingrenzen

  Alt 22. Jan 2008, 18:28
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.
Angehängte Dateien
Dateityp: zip borderedit_120.zip (208,6 KB, 8x aufgerufen)
Thomas
  Mit Zitat antworten Zitat