继承于TLabeledEdit的控件,在右侧放置一BitBtn,响应自编的OnClick事件,但当Edit重新获得焦点时出现问题!(70分)

  • 主题发起人 主题发起人 zjmaskman
  • 开始时间 开始时间
Z

zjmaskman

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,该控件中的BitButton位于编辑框(TLabeledEdit)的右边,用意为通过按钮查询数据,并返回结果到编辑框。但编辑框获得焦点时,按钮被编辑框的底色(白色)覆盖,只有按钮重新获得焦点时,才会得到重绘。
请问,怎样才能解决以上问题?谢谢!
 
查询完成后可以将BitButton的大小调整成编辑框的大小,位置与编辑框相同,visible属性可以赋为:false,也可不管;当TLabeledEdit编辑框中按下“回车键”恢复BitButton的位置和相关属性,并且获得焦点!
 
但是TLabelEdit编辑框刚获得焦点时就覆盖了BitButton,而我想实现即使是在TLabeledEdit中输入的同时,BitButton也是可见的!怎么办?
 
RxLib里有现成的TComboEdit,若自己想写,它有完整的源码,看看就是。
 
不清楚你的这个控件是怎么写的,看来似乎是有问题。
能否在你的编辑框或取焦点时,在控件代码中主动绘一下bitbutton
 
procedure TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
bitbtn1.Visible:=true;
bitbtn1.SetFocus;
end
else
begin
bitbtn1.Visible:=true;
end
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
bitbtn1.Visible:=false;
end;

以上是我给出的解决方法,其他与你相关的操作和代码,需要你自己添加,你可以试试!
 
看是你的TLabelEdit写的不对。你重绘EDIT。却不想他会覆盖BTN。绘EDIT的时候不要绘BTN占据的地方。或者。直接把BTN也REFRESH。但是可能会闪。最好是。绘制EDIT的时候。不要绘制被BTN战局的地方。
 
var
R: TRect
begin
SetRect(R, 0, 0, Width - BtnWidth - 3, Height);
SendMessage(edit1.Handle, EM_SETRECTNP, 0, LongInt(@R));
end;
Edit1必须是多行文本。
 
多谢大家,我的问题已经解决了,用继承TPanel的方法就不存在上述问题了!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部