今天面试后,备受打击 ( 积分: 20 )

  • 主题发起人 主题发起人 fisheryj
  • 开始时间 开始时间
F

fisheryj

Unregistered / Unconfirmed
GUEST, unregistred user!
创建一个控件
LABEL +IMAGE
就是把两个控件合并成一个控件 还可以修改LABEL的CAPTION属性 及IMAGE的属性

谁知道如何解决

[:(][:(][:(][:(]
 
创建一个控件
LABEL +IMAGE
就是把两个控件合并成一个控件 还可以修改LABEL的CAPTION属性 及IMAGE的属性

谁知道如何解决

[:(][:(][:(][:(]
 
继承就OK了
 
正在试试。
 
继承panel,把label,image放在上面
or 从Twincontrol继承
 
我认为从TGraphicControl 继承是最好的。
 
type
TXLabImage = class(TGraphicControl)
private
FLabel: TLabel;
FImage: TImage;
procedure SetImage(const Value: TImage);
procedure SetLabel(const Value: TLabel);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property XLabel: TLabel read FLabel write SetLabel;
property XImage: TImage read FImage write SetImage;
end;
 
继承panel,把label,image放在上面
or 从Twincontrol继承

还要label,image SetSubComponent(true)
 
放在一个FRAME上面
 
放在一个Frameh上应该可以的
 
创建一个控件 , 不Frame, 面试要小心,不能答非所问, 还是从Tpanel继承简单
 
这个叫聚合控件开发,开发这类控件,主要是选取主控件,把次要的控件当作它的子件来解决。像这个LABEL +IMAGE的控件,你可以选IMAGE作为主控件,即继承TIMAGE类,再在类里申明一个TLABEL变量和一个CAPTION属性,至于它们的显示位置,你可以在IMAGE.OnPaint里面写代码,把TLabel和IMAGE的关系统处理好。做这个控件不是很复杂,多试试相信你能做好的。
 
TWinControl继承是最好的
 
继承 Timage
声明个 Label:Tlabel;
重载下 Create
在 Create 时候创建 Label
 
从Tgraphic继承 就无法给句柄。 比如说一起拖动就不行。 所以最好是从twincontrol继承。当然, 继承panel是个捷径。
 
TO jfyes,  这样建立控件后 在应用程序里里添加控件 LABEL和 IMAGE之间的位置如何
 
从panel中创建比较好。在创建时设好位置,重载panel的caption,当改变其caption时改变lable的caption,再新加几个属性,当这些属性改变时相应改变image的属性,那就得了
 
谁有代码?详细的
 
unit XControl;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Mask, DB, DBCtrls, VDBConsts,
Forms, Dialogs, Buttons, ComCtrls, Graphics, ExtCtrls, Grids, DBGrids, ADODB, CheckLst,
Menus, Inifiles, ActiveX, ComObj, DBTables, DBClient, SqlExpr, Jpeg, CommCtrl,
Variants, TypInfo, ShellAPI, ZLib;

type
TXLabImage = class(TPanel)
private
FLabel: TLabel;
FImage: TImage;
procedure SetLabel(const Value: TLabel);
procedure SetImagel(const Value: TImage);
public
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
published
property XLabel: TLabel read FLabel write SetLabel;
property XImage: TImage read FImage write SetImagel;
end;
procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Jfyes Express', [TXLabImage]);
end;

{ TXLabImage }

constructor TXLabImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

FImage := TImage.Create(Self);
FImage.Parent := Self;
FImage.Name := 'SubImage';
FImage.SetSubComponent(True);

FLabel := TLabel.Create(Self);
FLabel.Name := 'SubLabel';
FLabel.SetSubComponent(True);
FLabel.Parent := Self;
FLabel.FocusControl := Self;
end;

destructor TXLabImage.Destroy;
begin
FLabel.Free;
FImage.Free;
inherited Destroy;
end;

procedure TXLabImage.SetImagel(const Value: TImage);
begin
FImage := Value;
end;

procedure TXLabImage.SetLabel(const Value: TLabel);
begin
FLabel := Value;
end;
 
SetSubComponent(True); 很重要,不然是保存不SubComponent的数据
property XLabel: TLabel read FLabel write SetLabel; // delete write SetLabel
property XImage: TImage read FImage write SetImagel;// delete write SetImagel
 

Similar threads

D
回复
0
查看
925
DelphiTeacher的专栏
D
D
回复
0
查看
717
DelphiTeacher的专栏
D
D
回复
0
查看
678
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部