单击此项目时更改ListBox项目的颜色

时间:2014-06-08 05:59:48

标签: delphi delphi-7

所以我在表单上有一个ListBox,它由不同的链接组成,所有这些都是蓝色和带下划线的(如html链接,你知道)。当用户单击其中一个Items(链接)时,它会在默认浏览器中打开,但我也希望该特定链接将颜色更改为紫色。这就是我现在在OnClick程序中所拥有的内容:

procedure TForm1.ListBox1Click(Sender: TObject);

begin
ShellExecute(Handle, 'open', PAnsiChar(ListBox1.Items[ListBox1.ItemIndex]), nil, nil, SW_SHOWNORMAL);
end;

1 个答案:

答案 0 :(得分:7)

您的问题归结为如何使用不同的字体设置为每个项目绘制列表。您需要执行以下操作:

  1. 将列表框的Style属性设置为lbOwnerDrawFixed
  2. 处理列表框的OnDrawItem事件以绘制每个项目。
  3. 您的OnDrawItem事件会以字体绘制项目,以指示该项目是否已被点击。你可以管理我认为的逻辑。我将展示一个简单的示例,根据项目的Index以不同方式绘制项目。

    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    var
      ListBox: TListBox;
      Canvas: TCanvas;
    begin
      ListBox := Control as TListBox;
      Canvas := ListBox.Canvas;
    
      // clear the destination rectangle
      Canvas.FillRect(Rect);
    
      // prepare the font style and color
      Canvas.Font.Style := [fsUnderline];
      if Odd(Index) then
        Canvas.Font.Color := clBlue
      else
        Canvas.Font.Color := clPurple;
    
      // draw the text
      Canvas.TextOut(Rect.Left, Rect.Top, ListBox.Items[Index]);
    
      // and the focus rect
      if odFocused in State then
        Canvas.DrawFocusRect(Rect);
    end;