高手救命,如何弹出一个类似Combobox的下拉列表似的东东 ( 积分: 10 )

  • 主题发起人 主题发起人 autra
  • 开始时间 开始时间
A

autra

Unregistered / Unconfirmed
GUEST, unregistred user!
最近需要弄一个下拉列表多选框,自己考虑实现方法如下:上面使用一个Edit,下面使用一个CheckListBox,在进行某些操作的时候显示CheckListBox,但是,这里面就存在一个问题,
Constructor Create(AOwner:TComponent) ;
begin
CheckListBox.parent := AOwner ;
end;
这样回出现问题,ChecklistBox的大小发生变化时会影响Aowner的大小,
且CheckListBox不是象Combobox的下拉列表那样浮在别的控件上面,所以回被别的控件覆盖
因此考虑使用一个form作checkListBo的parent,form.parent不能是aOwner,但是出现一个新的问题, 再form弹出的时候包含控见的窗体标题栏会发生变化,因为这个窗体失去焦点,如何不让他窗体标题栏发生变化呢?
各位牛人,帮帮小弟一把吧
 
最近需要弄一个下拉列表多选框,自己考虑实现方法如下:上面使用一个Edit,下面使用一个CheckListBox,在进行某些操作的时候显示CheckListBox,但是,这里面就存在一个问题,
Constructor Create(AOwner:TComponent) ;
begin
CheckListBox.parent := AOwner ;
end;
这样回出现问题,ChecklistBox的大小发生变化时会影响Aowner的大小,
且CheckListBox不是象Combobox的下拉列表那样浮在别的控件上面,所以回被别的控件覆盖
因此考虑使用一个form作checkListBo的parent,form.parent不能是aOwner,但是出现一个新的问题, 再form弹出的时候包含控见的窗体标题栏会发生变化,因为这个窗体失去焦点,如何不让他窗体标题栏发生变化呢?
各位牛人,帮帮小弟一把吧
 
编辑一个公共窗体,再定位!
 
弹出新窗体,原有窗体失去焦点,颜色当然变化!难道还有其他变化?是否可以修改窗体失去焦点时标题拦的颜色值.达到欺骗的目的.
一般都是一个公共窗体.参考:
 
CheckListBox.BringtoFront
 
设置CheckListBox的扩展风格为ExStyle := EXStyle or WS_EX_TOOLWINDOW or WS_EX_TOPMOST即可让这个窗口象Combobox的下拉列表那样浮动。
 
来自:kinneng, 时间:2005-7-19 11:28:59, ID:3138674
设置CheckListBox的扩展风格为ExStyle := EXStyle or WS_EX_TOOLWINDOW or WS_EX_TOPMOST即可让这个窗口象Combobox的下拉列表那样浮动。
如何修改????
 
TDropDownWindow是弹出窗口
procedure TDropDownWindow.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style := WS_POPUP or WS_BORDER;
ExStyle := WS_EX_TOOLWINDOW;
AddBiDiModeExStyle(ExStyle);
WindowClass.Style := CS_SAVEBITS;
end;
end;
 
procedure TEXPWPanel.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or WS_BORDER;
ExStyle := EXStyle or WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
WindowClass.Style := CS_SAVEBITS;
end;
end; { CreateParams }

我的控件就是这样,下载 http://kinneng.icpcn.com
 
kinneng:
 我看到了你的程序,确实效果不错,可是你能不能给我发一份那个控件的源代码,TEXPWDBEdit,让小弟学习学习。autra@163.com 
 小弟愚昧,至今还是不知道怎么解决我的问题。
 我现在这么做的,各位大哥看看。
 TMyControl = class(TEdit)
private
FListFm:TForm1 ;
FCKList:TCheckList ;
end ;
Creat(..)
begin
...
FLisfm := Tform1.Create(Self) ;
FCkList.parent := FListFm ;
//但是我不能设置Flistfm.parent := Self;
或者Flistfm.parent := TWincontrol(Aowner) ; //会出问题的
 这样我只有不设置Flistfm.parent属性了
 因此在 显示Flistfm的时候,因为Flistfm变为活动窗体,
 主窗体标题栏还是会出现颜色变化

end ;
我在TForm1..CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or WS_BORDER;
ExStyle := EXStyle or WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
WindowClass.Style := CS_SAVEBITS;
end;
end; { CreateParams }
这么使用还是出现这样的问题,请大哥指教
 
CheckListBox本身就是窗口,还要外加一个窗口干什么???


type

TMyCheckListBox= class(TCheckListBox)
private
protected
......
procedure CreateParams(var Params:TCreateParams); override;
......
end;

TForm1 = class(TForm)
private
{ Private declarations }
MyCheckListBox:TCheckListBox;
......
end;

procedure TMyCheckListBox.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or WS_BORDER;
ExStyle := EXStyle or WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
WindowClass.Style := CS_SAVEBITS;
end;
end; { CreateParams }
......


procedure TForm1.FormCreate(Sender: TObject);
begin
MyCheckListBox:=TMyCheckListBox.Create(Self);
......
end; {Create}

这样应该看明白了吧
 
后退
顶部