如何在 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,所以省略了
如图所示,我需要制作一个列表,每个项目都有按钮,项目的左下方有一个按钮,右下方有一些按钮。
我在 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,所以省略了