怎样增强TEdit(100分)

  • 主题发起人 主题发起人 yorkshi
  • 开始时间 开始时间
Y

yorkshi

Unregistered / Unconfirmed
GUEST, unregistred user!
听说Delphi6中有一个TLabeledEdit控件, 请问谁知道它的源代码?(shiyc@citiz.net)
如果不用一个Container control(like TPanel)和TLabel, TEdit来实现,
请问用什么方法实现最好(使用的控件数<=2)?
 
Delphi 6?
用 控件模板. 只需TLabel 与TEdit ,用法查帮助.
 
不错,是有TLabelEdit这个东西,不过我是在D4的UNLEASHED上看见的,继承TCustomControl
,将Label和Edit合在一起,称为聚合技术,去看一下这本书的源代码,十分简单。
 
Delphi 6?
TLabelEdit是干嘛用的?
 
delphi6?
出了吗?有卖的吗?(D版)
 
我有D4的Unleashed中关于TLabelEdit的原码,谁想要?
另外,有谁知道d6什么时候出?
 
胡说!谁说有D6的?
 
各位, 我所说的是TLabeledEdit, 而不是TLabelEdit.
to liangdewei:
TLabeledEdit是我在What's new in Delphi 6这个帮助文件中看到的, 并不是我胡说.
如果您认为我在胡说, 请提供理由.
toWollyXF:
我有"Delphi 4 Unleashed"和"Delphi 5 Developer's Guide"两本书,
所以您所说的"Delphi 4 Unleashed"中TLabelEdit的源码我早已看过,
而且已实现一个比其更好的控件.
to 教父:
TLabeledEdit是用来将TLabel和TEdit的功能合在一起的一个控件.
to zhuhuan:
我所要求的控件为<=2的几个控件的组合, 而您所说的是用三个控件组合在一起,
这种技术我已知道.
to Lera:
虽然所用控件数<=2, 但是控件模板的缺点也是显而易见的.

我看过TSpinEdit的源代码, 它是把TCustomEdit和TSpinButton合在一起,
但是TCustomEdit的Style为ES_MULTILINE, 这是我不能接受的.
如果采用"Delphi 4 Unleashed"
中的聚合技术, 那么每个需要的TEdit和TLabel的属性都需要publish出来.
如果直接把TEdit和TLabel对象设为public属性,
又怕对这两个子控件的属性设置会影响父控件的功能和外观(比如Width, Height等).
请问谁有更好的办法?
 
yorkshi::如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。

“What's new in Delphi 6这个帮助文件”哪里有啊?
 
有一个控件已经作到了,你要的话我可以给你。或者你自己到<a href="http://www.vclxx.com">深度历险</a>
 
写一个从继承于TWincontrol 的容器控件,源代码如下:
{
Copyright ?1998 by Delphi 4 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit ButtonEdit;

interface

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

type

TddgButtonEdit = class(TWinControl)
private
FSpeedButton: TSpeedButton;
FEdit: TEdit;
protected
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure SetText(Value: String);
function GetText: String;
function GetFont: TFont;
procedure SetFont(Value: TFont);
function GetOnButtonClick: TNotifyEvent;
procedure SetOnButtonClick(Value: TNotifyEvent);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Text: String read GetText write SetText;
property Font: TFont read GetFont write SetFont;
property OnButtonClick: TNotifyEvent read GetOnButtonClick write SetOnButtonClick;
end;

procedure Register;

implementation

procedure TddgButtonEdit.WMSize(var Message: TWMSize);
begin
inherited;
FEdit.Width := Message.Width-FSpeedButton.Width;
FSpeedButton.Left := FEdit.Width;
end;

constructor TddgButtonEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEdit := TEdit.Create(Self);
FEdit.Parent := self;
FEdit.Height := 21;
FEdit.Width:=20;
FSpeedButton := TSpeedButton.Create(Self);
FSpeedButton.Left := FEdit.Width;
FSpeedButton.Height := 19; // two less than TEdit's Height
FSpeedButton.Width := 19;
FSpeedButton.Caption := '...';
FSpeedButton.Parent := Self;

Width := FEdit.Width+FSpeedButton.Width;
Height := FEdit.Height;
end;

destructor TddgButtonEdit.Destroy;
begin
FSpeedButton.Free;
FEdit.Free;
inherited Destroy;
end;

function TddgButtonEdit.GetText: String;
begin
Result := FEdit.Text;
end;

procedure TddgButtonEdit.SetText(Value: String);
begin
FEdit.Text := Value;
end;

function TddgButtonEdit.GetFont: TFont;
begin
Result := FEdit.Font;
end;

procedure TddgButtonEdit.SetFont(Value: TFont);
begin
if Assigned(FEdit.Font) then
FEdit.Font.Assign(Value);
end;

function TddgButtonEdit.GetOnButtonClick: TNotifyEvent;
begin
Result := FSpeedButton.OnClick;
end;

procedure TddgButtonEdit.SetOnButtonClick(Value: TNotifyEvent);
begin
FSpeedButton.OnClick := Value;
end;
procedure Register;
begin
RegisterComponents('Samples', [TddgButtonEdit]);
end;
end.
 
多人接受答案了。
 
后退
顶部