回复于: 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;