怎么实现AutoSize???(50分)

  • 主题发起人 主题发起人 cgh0717
  • 开始时间 开始时间
C

cgh0717

Unregistered / Unconfirmed
GUEST, unregistred user!
我要从TGlyphControl中派生一个新的控件,想实现AutoSize,但看了看VCL源码,
就是没有办法现实。请大GG、XX们帮帮忙。我要源码喔!还要可以在WordWap(好像写错了)
为True时也能AutoSize
 
看看TCustomLabel之类的源码

或干脆从其派生.
 
我Dao,我不是说了吗?看看,还是不会,都说了最好给源码。
 
你到底想干啥,何苦呢,直接从TCUSTOMLABEL派生不就得了.

----给源码?明摆着VCL的源码不看,非得叫别人写一个,谁敢说比VCL的源码写得更好.
 
我以不是要TLabel,在,而我把父类的Paint给改了不是继承芜湖画法。
你要是知道,还是招了吧!!
 
我实在不知道你刚说的这一段意思怎么理解.

还是要贴VCL源码.

TCustomLabel = class(TGraphicControl)
private
FFocusControl: TWinControl;
FAlignment: TAlignment;
FAutoSize: Boolean;
FLayout: TTextLayout;
FWordWrap: Boolean;
FShowAccelChar: Boolean;
function GetTransparent: Boolean;
procedure SetAlignment(Value: TAlignment);
procedure SetFocusControl(Value: TWinControl);
procedure SetShowAccelChar(Value: Boolean);
procedure SetTransparent(Value: Boolean);
procedure SetLayout(Value: TTextLayout);
procedure SetWordWrap(Value: Boolean);
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
protected
procedure AdjustBounds; dynamic;
procedure DoDrawText(var Rect: TRect; Flags: Longint); dynamic;
function GetLabelText: string; virtual;
procedure Loaded; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure Paint; override;
procedure SetAutoSize(Value: Boolean); virtual;
property Alignment: TAlignment read FAlignment write SetAlignment
default taLeftJustify;
property AutoSize: Boolean read FAutoSize write SetAutoSize default True;
property FocusControl: TWinControl read FFocusControl write SetFocusControl;
property ShowAccelChar: Boolean read FShowAccelChar write SetShowAccelChar default True;
property Transparent: Boolean read GetTransparent write SetTransparent default False;
property Layout: TTextLayout read FLayout write SetLayout default tlTop;
property WordWrap: Boolean read FWordWrap write SetWordWrap default False;
public
constructor Create(AOwner: TComponent); override;
property Canvas;
end;

AUTOSIZE/WORDWARP功能都有,哪个不需要的,KAKAKA 干掉它.
要加的新功能,SHUASHUASHUA,加上.

 
说具体点吧。。你是想做一个什么样的控件。。才好给出具体的源码。。
 
其实,我是从TSpeedButton中派生出来的。TSpeedButton中可以把图放的地方,我觉得不好。
就改变了画法,更本没有继承。所以有两个问题:
MosueDown时那个按下边框(这个问题也请帮帮忙)
还有就是AutoSize。

这样不知行了没有。VCL代码我看多了,可就是没有办法现实这两个。
 
autosize的实现在于要知道所画的东东(如:文本,图象)的大小,由此“反向”改变
控件大小,如label,他用了DrawTextEx的DT_CALCTEXT计算大小,而图片应该就好办多了。

至于边框,用moveto和lineto画就是了,当然Frame3D函数也可!
 
多人接受答案了。
 
后退
顶部