如何开发类似combobox的控件(100分)

  • 主题发起人 主题发起人 BlueWin
  • 开始时间 开始时间
B

BlueWin

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个Combobox控件,但要求下拉时出现一个ListView。
我看了一下ELIB的DBDatetimeEditEh 的代码---------没看懂。
主要想知道:
1。当点击button时如何显示下拉控件。
2。当鼠标点到其他地方时,控件自动消失。
以上请附代码和注释。因为我很菜的。谢谢
 
可以动态生成呀
 
嗯,可以用复合控件来实现,用TEdit、Tbutton和TListView来模拟。
1。在建立时Tlistview是hide的,在TButton点击之后才show出来。
2。试试cm_MouseLeave事件(或是其它事件?)。
3。源代码没有,不过VCL源码倒是可以参考,而且极为详细,还有帮助。
 
下拉控件的宽度和Combobox的宽度不一样时,又怎么办?
 
真没人知道吗?
 
向这些属性都是可以控制的,在动态生成前都设好
 
如何生成?
 
稍等一会,我先做个例子
 
你找不到源代码的,它的实现在Windows内部,微软不公开源代码。
 
你先看看这个动态生成的例子,不全
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
listv:Tlistview;
begin
listv:=Tlistview.create(nil);
listv.left:=edit1.Left;
listv.Top:=edit1.Top+edit1.Height+2;
listv.Width:=Edit1.Width;
listv.parent:=self;
end;

end.
动态生成的listview没有释放
 
这个动态生成的例子我做过,并且也给它事件。但是当鼠标在其他地方单击时要让控件消失,不好处理。
如在combobox(其实是Text)的Exit事件等都不对。
 
是呀,我想那就要用键盘钩子了吧
我刚学delphi不久,我现在也就知道这么多了
 
下拉控件是个弹出窗口,如果不需要弹出动画
则直接显示就可以了,

关于第二条,也很容易,让弹出的窗口捕获鼠标消息
当失去捕获时,关闭窗口就可以了,
像菜单那样的
 
以前做过这么一个复合控件,ego说的对。
看看这几个贴子,会有帮助的。
458030
668719
140364
 
谢谢各位。在看了OMVM推荐的帖子后我做好了控件。
也谢谢各位的热心帮助。分数就大家分了吧。
 
后退
顶部