如何在 Delphi 中的每个项目上制作带有按钮的列表

how to make list with buttons at each item in Delphi

如图所示,我需要制作一个列表,每个项目都有按钮,项目的左下方有一个按钮,右下方有一些按钮。

我在 ListBox 上使用 ListBox 控件和上面面板中的一些按钮制作演示应用程序,但是当 ListBox 滚动时,很难让按钮跟随 ListItem.

谁能帮忙,谢谢~~~

我找到了方法!所以,我会post自己回答~,但 Remy Lebeau 启发了我。 一开始,我用DrawFrameControl()在列表上制作按钮,它可以工作,但样式看起来像经典的windows样式,并且很难像示例中的图片那样制作背景颜色。 然后,我用FillRect()DrawEdge()做了Button,我觉得还不错,代码如下:

  hitPoint := lst1.ScreenToClient(Mouse.CursorPos);
  // there is a btnRect var of the Button Rect
  edgeRect.Left := btnRect.Left - 1;
  edgeRect.Top := btnRect.Top - 1;
  edgeRect.Right := btnRect.Right + 1;
  edgeRect.Bottom := btnRect.Bottom + 1;
  // make button
  lst1.Canvas.FillRect(btnRect);
  // make edge, FListMouseDown is bool var and setting value at MouseDown/MouseUp Event
  //
  if PtInRect(edgeRect, hitPoint) and FListMouseDown then begin
    DrawEdge(lst1.Canvas.Handle, edgeRect, EDGE_ETCHED, BF_RECT);  // button down style
  end else begin
    DrawEdge(lst1.Canvas.Handle, edgeRect, EDGE_RAISED, BF_RECT);
  end;

接下来的工作是将Buttons的Rect存入内存,编写ButtonOnClick事件代码,判断Mouse Hit Position是否在Button Rect中,在ListMouseUp()事件中调用ButtonOnClick事件,代码不在重要的像上面画的Buttons,所以省略了