高分求Delphi的有关listbox控件的一段代码
如图.要求:1.项目左侧有对应的序号2.通过按钮(即图中的上下箭头)实现项目内容的上下移动,移动时序号自上至下保持不变。像这样,用阿拉伯数字,如下:1.萝卜2.番茄3.芹...
如图.要求:1.项目左侧有对应的序号 2.通过按钮(即图中的上下箭头)实现项目内容的上下移动,移动时序号自上至下保持不变。
像这样,用阿拉伯数字,如下:
1.萝卜
2.番茄
3.芹菜
4.西兰菜
*********************
若还是不明白我的要求,请百度HI我。 展开
像这样,用阿拉伯数字,如下:
1.萝卜
2.番茄
3.芹菜
4.西兰菜
*********************
若还是不明白我的要求,请百度HI我。 展开
3个回答
展开全部
用自绘的ListBox就行,即把ListBox.Style设置成lbOwnerDrawFixed,参考如下代码吧。
{ 窗体构造:做一些初始化操作 }
procedure TForm1.FormCreate(Sender: TObject);
begin
// 要求ListBox的条目采用自绘方法
ListBox1.Style := lbOwnerDrawFixed;
// 设置自绘的字体
ListBox1.Canvas.Font.Assign( ListBox1.Font );
{ 添加列表条目,不含序号,序号通过自绘画出 }
with Listbox1.Items do
begin
Add( '萝卜' );
Add( '番茄' );
Add( '芹菜' );
Add( '西兰菜' );
Add( '......' );
end;
end;
{ 响应“向上”按钮的点击 }
procedure TForm1.Button1Click(Sender: TObject);
begin
with ListBox1 do
begin
// 没有选中或者选中的是第一条,什么都不做
if ItemIndex <= 0 then
Exit;
Items.Exchange( ItemIndex, ItemIndex - 1 );
end;
end;
{ 响应“向下”按钮的点击 }
procedure TForm1.Button2Click(Sender: TObject);
begin
with ListBox1 do
begin
// 没有选中或者选中的是最后一条,什么都不做
if ( ItemIndex < 0 ) or ( ItemIndex = Items.Count - 1 ) then
Exit;
Items.Exchange( ItemIndex, ItemIndex + 1 );
end;
end;
{ 响应ListBox的自绘请求 }
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
LB : TListBox; // 为了书写简短而定义
C : TCanvas; // 为了书写简短而定义
S : string;
begin
LB := TListBox( Control );
C := LB.Canvas;
if ( odSelected in State ) or ( odFocused in State ) then
begin
C.Brush.Color := clNavy;
C.Font.Color := clYellow;
end
else
begin
C.Brush.Color := clWhite;
C.Font.Color := clBlack;
end;
// 画出带有序号的条目
S := Format( '%d.%s', [ Index + 1, LB.Items[ Index ] ] );
C.FillRect( Rect );
DrawText( C.Handle, PChar( s ), Length( s ), Rect, DT_SingleLine or DT_VCenter );
end;
{ 窗体构造:做一些初始化操作 }
procedure TForm1.FormCreate(Sender: TObject);
begin
// 要求ListBox的条目采用自绘方法
ListBox1.Style := lbOwnerDrawFixed;
// 设置自绘的字体
ListBox1.Canvas.Font.Assign( ListBox1.Font );
{ 添加列表条目,不含序号,序号通过自绘画出 }
with Listbox1.Items do
begin
Add( '萝卜' );
Add( '番茄' );
Add( '芹菜' );
Add( '西兰菜' );
Add( '......' );
end;
end;
{ 响应“向上”按钮的点击 }
procedure TForm1.Button1Click(Sender: TObject);
begin
with ListBox1 do
begin
// 没有选中或者选中的是第一条,什么都不做
if ItemIndex <= 0 then
Exit;
Items.Exchange( ItemIndex, ItemIndex - 1 );
end;
end;
{ 响应“向下”按钮的点击 }
procedure TForm1.Button2Click(Sender: TObject);
begin
with ListBox1 do
begin
// 没有选中或者选中的是最后一条,什么都不做
if ( ItemIndex < 0 ) or ( ItemIndex = Items.Count - 1 ) then
Exit;
Items.Exchange( ItemIndex, ItemIndex + 1 );
end;
end;
{ 响应ListBox的自绘请求 }
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
LB : TListBox; // 为了书写简短而定义
C : TCanvas; // 为了书写简短而定义
S : string;
begin
LB := TListBox( Control );
C := LB.Canvas;
if ( odSelected in State ) or ( odFocused in State ) then
begin
C.Brush.Color := clNavy;
C.Font.Color := clYellow;
end
else
begin
C.Brush.Color := clWhite;
C.Font.Color := clBlack;
end;
// 画出带有序号的条目
S := Format( '%d.%s', [ Index + 1, LB.Items[ Index ] ] );
C.FillRect( Rect );
DrawText( C.Handle, PChar( s ), Length( s ), Rect, DT_SingleLine or DT_VCenter );
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询