AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem mit von CustomEdit abgeleiteten Eingabefeld
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit von CustomEdit abgeleiteten Eingabefeld

Ein Thema von LH_Freak · begonnen am 29. Sep 2005 · letzter Beitrag vom 30. Sep 2005
 
Benutzerbild von LH_Freak
LH_Freak

Registriert seit: 2. Mär 2005
Ort: Nürnberg
222 Beiträge
 
#10

Re: Problem mit von CustomEdit abgeleiteten Eingabefeld

  Alt 29. Sep 2005, 21:39
Könnte ich probieren. Hast du irgendein Codebeispiel?

Das hab ich bis jetzt:

Delphi-Quellcode:
unit MUH_Edit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type

TMUH_Edit = class(TCustomEdit)
  private
    BorderCol: TColor;
    BorderCol2: TColor;
    Bckrnd: TColor;
    FCanvas: TCanvas;
    MouseInControl: Boolean;
    procedure NewAdjustHeight;
    procedure CMFontChanged (var Message: TMessage); message CM_FONTCHANGED;
    procedure CMMouseEnter (var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE;
    procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMKillFocus (var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMNCCalcSize (var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
    procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT;
    procedure SetBorderCol(Value:TColor);
    procedure SetBorderCol2(Value: TColor);
    procedure SetBckrnd(Value: TColor);
    procedure Paint(const Clip: HRGN);
  public
    constructor Create (AOwner: TComponent); override;
    procedure Loaded; override;
  published
    property BackgroundColor: TColor read Bckrnd write SetBckrnd;
    property BorderColor: TColor read BorderCOl write SetBorderCol;
    property BorderColor_hell: TColor read BorderCol2 write SetBorderCol2;

    property Align;
    property AutoSize;
    property BorderStyle;
    property CharCase;
    property DragCursor;
    property DragMode;
    property Enabled;
    property Font;
    property HideSelection;
    property MaxLength;
    property OEMConvert;
    property ParentFont;
    property ParentShowHint;
    property PasswordChar;
    property PopupMenu;
    property ReadOnly;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Text;
    property Visible;

    property OnChange;
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDrag;
   {$IFDEF D4CB4}
    property Anchors;
    property BiDiMode;
    property Constraints;
    property DragKind;
    property ParentBiDiMode;
    property OnEndDock;
    property OnStartDock;
   {$ENDIF}
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MUH Messenger', [TMUH_EDIT]);
end;

constructor TMUH_Edit.Create (AOwner: TComponent);
begin
  inherited;
  ParentFont := True;
  BorderCol := $00849295;
  BorderCol2 := $00E7EBEF;
  Bckrnd := clWhite;

  FCanvas := TControlCanvas.Create;
  TControlCanvas(FCanvas).Control := self;

  AutoSize := False;
  Ctl3D := False;
  ControlStyle := ControlStyle - [csFramed];
  SetBounds(0, 0, 121, 19);
end;

procedure TMUH_Edit.Paint(const Clip: HRGN);
var
Points: array [0..8] of TPoint;
aRect: TRect;
R: TRect;
begin
GetWindowRect(Handle, R);

InflateRect(R, 3, 3);

FCanvas.Brush.Color := Bckrnd;
FCanvas.Rectangle(Rect(1,1,Width,Height));
FCanvas.Brush.Color := BorderCol;
FCanvas.FrameRect(Rect(0,0,Width,Height));
FCanvas.Pen.Color := BorderCol2;
FCanvas.MoveTo(1,Height-2);
FCanvas.LineTo(1,1);
FCanvas.LineTo(Width-1,1);
FCanvas.Brush.Style := bsClear;
FCanvas.TextOut(0,0,Text);
end;

procedure TMUH_Edit.NewAdjustHeight;
var
  DC: HDC;
  SaveFont: HFONT;
  Metrics: TTextMetric;
begin
  DC := GetDC(0);
  SaveFont := SelectObject(DC, Font.Handle);
  GetTextMetrics(DC, Metrics);
  SelectObject(DC, SaveFont);
  ReleaseDC(0, DC);

  Height := Metrics.tmHeight + 6;
end;

procedure TMUH_Edit.CMFontChanged(var Message: TMessage);
begin
  inherited;
  if not((csDesigning in ComponentState) and (csLoading in ComponentState)) then
    NewAdjustHeight;
end;

procedure TMUH_Edit.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  if (GetActiveWindow <> 0) then
  begin
    MouseInControl := True;
    Paint(0);
  end;
end;

procedure TMUH_edit.CMMouseLeave(var Message: TMessage);
begin
  inherited;
  MouseInControl := False;
  Paint(0);
end;

procedure TMUH_Edit.WMSetFocus (var Message: TWMSetFocus);
begin
  inherited;
  if not(csDesigning in ComponentState) then
    Paint(0);
end;

procedure TMUH_Edit.WMKillFocus (var Message: TWMKillFocus);
begin
  inherited;
  if not(csDesigning in ComponentState) then
    Paint(0);
end;

procedure TMUH_Edit.WMNCCalcSize (var Message: TWMNCCalcSize);
begin
  inherited;
  InflateRect(Message.CalcSize_Params^.rgrc[0],-3,-3);
end;

procedure TMUH_Edit.Loaded;
begin
  inherited;
  if not(csDesigning in ComponentState) then
    NewAdjustHeight;
end;

procedure TMUH_Edit.WMNCPaint (var Message: TMessage);
begin
  inherited;
  Paint(HRGN(Message.WParam));
end;

procedure TMUH_Edit.SetBorderCol(Value: TCOlor);
begin
BorderCol := Value;
Paint(0);
end;

procedure TMUH_Edit.SetBorderCol2(Value: TCOlor);
begin
BorderCol2 := Value;
end;

procedure TMUH_Edit.SetBckrnd(Value: TCOlor);
begin
Bckrnd := Value;
end;

end.
Florian Wolz
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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-2025 by Thomas Breitkreuz