combobox中下拉列表的宽度不够显示items项目(字符串)的问题 (分数可以再加) (200分)

  • 主题发起人 主题发起人 玄成
  • 开始时间 开始时间

玄成

Unregistered / Unconfirmed
GUEST, unregistred user!
原先我是这样解决的,就是根据下拉式列表中所有的字符串中最长的字符串长度来设置
combobox的下拉 列表宽度,但由于我的combobox是在屏幕的右边,若太长,冲出屏幕的
那部分一 样看不到,请问各位有什么解决方法?能否让combobox的下拉列表靠combobox
的右边显示出来(默认是左边),期待答案。。。。。(请不要建议用第三方控件,我希
望编程实现。)
 
你把aligen设置成距右不就可以了, 剩下来就是设置combobox的宽度了啊,这样符合你的意思嘛?
 
combobox1.perform(CB_SETDROPPEDWIDTH,combobox1.width+100,0);
设置你要的宽度 <------------------------------------|
 
我知道怎么设宽度,可关键是在combobox在屏幕右边时宽度过宽时会冲出屏幕,
我问的是怎么解决这个问题。
 
我在想,没有必要想这种方法了,
ComboBox大不了不放在窗口右边不就行了,
难道必须要放在窗口右边吗?
 
没办法这是程序的原因,布局就是这样,如果没必要,我还用来问吗?
 
自己来做提示
 
to jsxjd:
请说一下具体的解决方法
 
自己做一个根hint一样的东东来显示就可以了。
 
可以在旁边加一个按纽
当点击它是打开一个窗口供选择 ,不就可以了
 
to liu12345
这样是不行的,我的stringgrid放在表格中不能移动或随便改变它的位置或添加其它控件
 
将 combobox 的 style 设为 csOwnerDrawFixed
在 OnDrawItem 中如下处理:

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
const
SL=15; //文本超过这个长度时右齐
var
s:string;
begin
s:=combobox1.items[index];
if odFocused in State then
combobox1.canvas.brush.color:=clBlue
else
combobox1.canvas.brush.color:=clwhite;
combobox1.canvas.Rectangle(rect);
if length(s)>SL then
DrawText(combobox1.canvas.handle,pchar(s),length(s),rect,DT_RIGHT)
else
combobox1.canvas.Textout(rect.Left+1,rect.top+1,s);
end;
事实上你可以进行任意的自理。上面只是一个例子!!!!!!!!
 
你们说的都是把ComboBox设为最大字符串的长度,而"玄成"要求的是因为显示地方不够了,
所以希望有足够的地方显示它,解决方法应该是给ComboBox加上水平滚动条!
在你的Form的OnCreate事件中添加以下代码:
procedure TForm1.FormCreate(Sender: TObject);
var
i, MaxWidth: integer;
begin
MaxWidth := 0;
for i := 0 to ListBox1.Items.Count - 1 do
if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1.Items.Strings) then
MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items.Strings);
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;
上面讲的是给ListBox加上水平滚动条,你把ListBox改为ComboBox, 然后那个
LB_SETHORIZONTALEXTENT 应该改为 CB_SETHORIZONTALEXTENT, 你可以查帮助。
我以前写的那个程序不知道到那去了,也是从这个改的。
 
谢谢你们的回答
to jsxjd:
你的方法只是让下拉列表中的文本向右对齐了,而下拉列表框还是左对齐,这样列表框的
内容还是会冲出屏幕。
to hq_pan:
你的方法似乎不行,是还要加别的设置吗??
 
对不起,我现在很忙,没空帮你调试。
错误是什么信息?我估计应该是Listbox.Items.Strings[]的问题,
ComboBox的Items好像跟listbox的不一样,你试试从这方面入手,
反正是取Combobox的“项”的问题。
 
to hq_pan:
提示信息是:canvas does not allow drawing.是不是combobox不能用这个消息??
 
你查看一下能否有其它取得那个字符串长度的方法。
我现在很忙,而且我机子在高强度的使用中,反应很慢,不能打开
Delphi来试。
 
不要人为增大下拉列表的宽度。
右齐时前面超过部分不会显示出来。
你试了没有!!!!!!!!!!!!
这是一个自适应宽度的输出方法!!!!!
根据你的情况适当调整 SL 的大小,当然也可以动态控制。
 
jsxjd,你的发言太深奥了,能解释一下吗?
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部