如何在TEdit中画TComboBox上右边的那个下拉小按钮

回复于: 2004-07-22 21:50:55
给你专门写了个,怎么样?
unit myedit;
 
interface
 
uses
  Windows, SysUtils, Classes, ComCtrls,forms,Controls, ExtCtrls,StdCtrls,Buttons,Graphics;
 
type
 TMyButton = class(TSpeedbutton)
 private
 protected
  procedure Paint; override;
 public
 end;
 
  TMyEdit = class(TCustomEdit)
  private
 
  protected
  published
    property Anchors;
    property AutoSelect;
    property AutoSize;
    property BevelEdges;
    property BevelInner;
    property BevelKind default bkNone;
    property BevelOuter;
    property BiDiMode;
    property BorderStyle;
    property CharCase;
    property Color;
    property Constraints;
    property Ctl3D;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font;
    property HideSelection;
    property ImeMode;
    property ImeName;
    property MaxLength;
    property OEMConvert;
    property ParentBiDiMode;
    property ParentColor;
    property ParentCtl3D;
    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 OnContextPopup;
    //property OnDblClick;
    //property OnDragDrop;
    //property OnDragOver;
    //property OnEndDock;
    //property OnEndDrag;
    //property OnEnter;
    //property OnExit;
    //property OnKeyDown;
    //property OnKeyPress;
    //property OnKeyUp;
    //property OnMouseDown;
    //property OnMouseMove;
    //property OnMouseUp;
    //property OnStartDock;
    //property OnStartDrag;
  end;
 
 
 
type
  TNewPanel = class(TCustomPanel)
  private
    FEdit: TMyEdit;
    FButton: TMyButton;
  protected
    procedure Resize; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Edit: TMyEdit read FEdit;
    property UpDown: TMyButton read FButton;
    property BevelOuter default bvNone;
    property BorderStyle default bsSingle;
    property Width default 80;
    property Height default 20;
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin
  RegisterComponents('Mycomponent', [TNewPanel]);
end;
 
{ TMyPanel }
 
constructor TNewPanel.Create(AOwner: TComponent);
begin
  inherited;
  Caption := '';
  BevelOuter := bvNone;
  BorderStyle := bsSingle;
 
  FEdit := TMyEdit.Create(Self);
  FEdit.SetSubComponent(True);
  FEdit.BorderStyle := bsNone;
  FEdit.Height := 16;
  FEdit.Parent := Self;
 
 
  Fbutton := TMyButton.Create(Self);
  FButton.Name:='button';
  Fbutton.SetSubComponent(True);
  FButton.Parent := Self;
  Fbutton.Height:=16;
  Fbutton.Width:=16;
  Width := 80;
  Height := 20;
end;
 
destructor TNewPanel.Destroy;
begin
  FEdit.Free;
  FButton.Free;
  inherited;
end;
 
procedure TNewPanel.Resize;
begin
  inherited;
  FEdit.Width :=self.Width-20;
  FButton.Left:=FEdit.Left+Fedit.Width;
 
  Fedit.Height:=self.Height-4;
  fButton.Height:=Fedit.Height;
end;
 
 
 
 
{ TMyButton }
 
procedure TMyButton.Paint;
var
x,y:integer;
begin
  inherited;
  x:=5;
  y:=(self.Height-3) div 2;
  canvas.Pen.Color:=Clblack;
  Canvas.MoveTo(X, Y);
  canvas.lineTo(X+7,y);
 
  Canvas.MoveTo(X+1,y+1);
  Canvas.LineTo(X + 6, Y+1);
 
  Canvas.MoveTo(X + 2, Y + 2);
  Canvas.LineTo(X + 5, Y+2);
 
  Canvas.MoveTo(X + 3, Y + 3);
  Canvas.LineTo(X + 4, Y+3);
end;
 
end.
 
======================
回复于: 2004-07-23 09:29:27
procedure TForm1.Button1Click(Sender: TObject);
var
  H: THandle;
  R: TRect;
begin
  H := GetDC(Edit1.Handle);
  R := Edit1.ClientRect;
  R.Left := R.Right - 20;
  DrawFrameControl(H, R, DFC_SCROLL,
                   DFCS_SCROLLCOMBOBOX);
  ReleaseDC(Edit1.Handle, H);
end;
posted @ 2010-11-01 14:18  linux,dev  阅读(250)  评论(0编辑  收藏  举报