如何在Delphi中的每个项目上创建带按钮的列表

时间:2015-01-09 02:39:13

标签: delphi button delphi-2010 tlistbox

如图所示,我需要在每个项目上创建一个带有按钮的列表,项目左下角有一个按钮,右下角有一些按钮。

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

谁能提供帮助,谢谢~~~

Pic

1 个答案:

答案 0 :(得分:0)

我找到了成功的方法!所以,我会自己发布答案,但是Remy Lebeau给了我灵感。 在开始时,我使用DrawFrameControl()来制作列表上的按钮,它可以工作但风格看起来像经典的窗户样式,并且很难像示例中的图片那样制作颜色。 然后,我使用FillRect()DrawEdge()制作了按钮,我认为很好,这是代码:

  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;

以下工作是将Rect of Buttons存储在内存中,编写ButtonOnClick事件代码,并在判断Mouse Hit Position是否在Button Rect中之后调用ListMouseUp()事件中的ButtonOnClick事件,Code不重要上面的图纸按钮,因此省略