大家给我看看这段代码! 分不够再加,急!!!!! (100分)

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

yf168

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个控件,形式是在edit旁边放一个button按钮,功能是点击button弹出来我自己的form,

unit winControl1;

interface

uses
SysUtils, Classes, Controls,stdctrls,ExtCtrls,Graphics,unit1;

type
TwinControl1 = class(TWinControl)
private
Fedit:TEdit;
Flist:Tstringlist;
Fbtn:Tbutton;
{ Private declarations }
protected
procedure btnClick(Sender: TObject);
{ Protected declarations }
public
constructor create(Aowner:Tcomponent);override;
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TwinControl1]);
end;

{ TwinControl1 }

procedure TwinControl1.btnClick(Sender: TObject);
begin
createform(Flist);//(createform过程在unit1里面)
end;

constructor TwinControl1.create(Aowner: Tcomponent);
begin
inherited;
Flist:=Tstringlist.Create;
self.Height :=21;
Fedit:=Tedit.Create(self);
Fedit.Top:=0;
Fedit.Parent:=self;
Fedit.Width :=121;
Fedit.Height :=21;
Fbtn:=Tbutton.Create(self);
// Fspeedbutton.Parent:=self;
Fbtn.Left :=Fedit.Left +Fedit.Width +2;//edit与Fspeedbutton的距离
Fbtn.Top:=0;
Fbtn.Width:=23;

Fbtn.Caption :='...';
Fbtn.OnClick :=self.btnClick ;
self.Width := Fedit.Width +Fbtn.Width;
end;
end.
现在的问题是这个button显示不出来,只有edit显示出来了,但是button的位置确实存在
也就是说控件长度是edit+button的宽度.
各位大虾!!!!,help
 

self.Width := Fedit.left+Fedit.Width +Fbtn.Width 就可以了嘛
 
首先
procedure TwinControl1.btnClick(Sender: TObject);
begin
createform(Flist);//(createform过程在unit1里面)
end;
这个方法就不对,你应该是输出一个事件,然后在事件里面处理。
 
老大,代码都没写全,应加上:
fbtn.Parent := self;
fbtn.Visible := true;
就可以了,我已测试过。
 
1、感谢上面哥们,不可见的问题解决。
我这个是集成的控件,需要弹出我自己的form,
2、我看了ip控件的一些源码,我是参考作的,createform在弹出的form里面写的
procedure TwinControl1.btnClick(Sender: TObject);
begin
createform(Flist);//(createform过程在unit1里面)
end;
3、遇到一个问题,就是控件长度变化时,能不能button的长度不变,只变edit的长度?
4. 如果想放在edit里面,我现在还没有思路!,分不够在加
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2584274
 
如果想在edit中放button不如用devexpress的buttonedit
如果控件长度变化修改edit长度就用wm_size的消息
procedure mycontrolsize(var Message: TWMSize); message WM_SIZE;
在这个方法中写调整edit大小的程序,可以参考controls单元的代码。
 
你把Edit的Anchors:=[akLeft,akTop,akRight];
Button的Anchors:=[akTop,akRight];
 
unit winControl1;
interface
uses
SysUtils, Classes, Controls,stdctrls,ExtCtrls,frm_tablefield,Graphics,messages,adodb;
type

TNotifyEvent = procedure(Sender: TObject) of object;
TwinControl1 = class(TWinControl)
private
Fedit:TEdit;
Flist:Tstringlist;
Fbtn:Tbutton;
FOnclick: TNotifyEvent ;
Fadoconn:Tadoconnection;
FConnection: Tadoconnection;
FstreditText:string;
function Getadoconn:Tadoconnection;
procedure Setadoconn(Aconn:Tadoconnection);
procedure SetConnection(const Value: Tadoconnection);
function GetEditText:string;
procedure SetEditText(Avalue:string);
procedure WriteEditText(AValue: string);

{ Private declarations }
protected
procedure btnClick(Sender: TObject);
procedure WMSIZE(var message:TWMSIZE);message WM_SIZE;
procedure Notification(AComponent:TComponent;Operation:TOperation);override;
procedure ButtonClick;
{ Protected declarations }
public
constructor create(Aowner:Tcomponent);override;
destructor Destroy; override;

{ Public declarations }
published
property Connection:Tadoconnection read Getadoconn write Setadoconn;
property Text:string read GetEditText write WriteEditText;
property OnButtonClick:TNotifyEvent read FOnClick write FOnClick ;
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TwinControl1]);
end;

{ TwinControl1 }

procedure TwinControl1.btnClick(Sender: TObject);
begin
createform(Fadoconn,Flist);
Fedit.Text :=Flist.Text;
end;

procedure TwinControl1.ButtonClick;
begin

end;

constructor TwinControl1.create(Aowner: Tcomponent);
begin
inherited;
Flist:=Tstringlist.Create;
self.Height :=21;
Fedit:=Tedit.Create(self);
Fedit.Top:=0;
Fedit.Parent:=self;
Fedit.Width :=121;
Fedit.Height :=21;
Fbtn:=Tbutton.Create(self);

Fbtn.Parent:=self;
Fbtn.Left :=Fedit.Left +Fedit.Width -1;//edit与Fspeedbutton的距离
Fbtn.Top:=0;
Fbtn.Width:=23;
Fbtn.Height :=21;

Fbtn.Caption :='...';
Fbtn.Visible :=true;
Fbtn.OnClick :=self.btnClick ;
self.Width := Fedit.Width +Fbtn.Width;
end;

destructor TwinControl1.Destroy;
begin
Flist.Free;
freeandnil(Fedit);
freeandnil(Fbtn);
inherited;
end;

function TwinControl1.Getadoconn:Tadoconnection;
begin
result:= Fadoconn;
end;

function TwinControl1.GetEditText: string;
begin
result:=FstrEdittext;
end;

procedure TwinControl1.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent,Operation);
if (Operation=opRemove) then
begin
if AComponent=Connection then
Fadoconn:=nil;
end;
end;

procedure TwinControl1.Setadoconn(Aconn: Tadoconnection);
begin
Fadoconn:=Aconn;
end;

procedure TwinControl1.SetConnection(const Value: Tadoconnection);
begin
FConnection := Value;
end;

procedure TwinControl1.SetEditText(Avalue: string);
begin
Fedit.text:=Flist.Text;
end;

procedure TwinControl1.WMSIZE(var message: TWMSIZE);
begin
Fedit.Width :=message.Width -Fbtn.Width ;
Fbtn.Left :=Fedit.Left +Fedit.Width ;
Fedit.Height :=message.Height ;
Fbtn.Height :=message.Height ;
end;

procedure TwinControl1.WriteEditText(AValue: string);
begin
FstrEditText:=Avalue;
Fedit.Text :=FstrEditText;
end;

end.
多谢各位.....
现在需要解决的问题是:
怎样加 事件,我想要: 单击这个控件的button有一个事件,edit的text改变时有一个事件
各位再帮我想想,
功能完成后,我会把代码贴出来的!!!!



 
为什么没有人再答?[:(]
 
为什么不参照一下additional中的LabeledEdit控件的做法?
 
procedure Myclick;
Procedure MyChange;

Fbutton.ONCLICK:= MyClick;
Fedit.onChange:=MyChange;


 
问题解决
谢谢各位,散分!!!在这里 多谢东兰梦舞

 
后退
顶部