TComboBox的水平滚动条???(36分)

  • 主题发起人 主题发起人 Nstar
  • 开始时间 开始时间
N

Nstar

Unregistered / Unconfirmed
GUEST, unregistred user!
我知道TListBox可以设置水平滚动条,
但TComboBox怎么不可以啊!
在TComboBox宽度不变的情况下, 如何看见里面的较长字符串啊!
Hint??
 
对呀,应该是用hint了吧,
 
下面是一个完整的例子:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
ListBox1: TListBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ListBox1Enter(Sender: TObject);
private
MaxWidth:Integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
MaxWidth:=0;
for i:=1 to 20 do
begin
ListBox1.Items.Add('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
for i := 0 to ListBox1.Items.Count - 1 do
if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1.Items) then
MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items);
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;

procedure TForm1.ListBox1Enter(Sender: TObject);
{var i: integer;}
begin
{ 在这里使用ListBox将自动出现水平滚动条 }
{ for i := 0 to ListBox1.Items.Count - 1 do
if MaxWidth < ListBox1.Canvas.TextWidth(ListBox1.Items) then
MaxWidth := ListBox1.Canvas.TextWidth(ListBox1.Items);
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);}
end;

end.
 
to Nstar:

可以的,你可以在combobox1的item行宽超过一定值时,
发送一个消息给它,让它出现一个横向的滚动条。
SendMessage(Combobox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+X, 0);
X为超出行宽的实际值
 
procedure TForm1.Button3Click(Sender: TObject);
begin
combobox1.perform(CB_SETDROPPEDWIDTH,combobox1.width+100,0);
end;
 
多人接受答案了。
 
后退
顶部