2
A
回答
3
您可以使用TGridpanel并通过重写Paint方法实现自己的绘画逻辑。
附加的图像显示它看起来像什么,达到您的预期结果,需要添加一些代码。
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TGridPanel = Class(ExtCtrls.TGridPanel)
protected
procedure Paint; override;
end;
TCellItem = Class(ExtCtrls.TCellItem)
Property Size; // make protected Size accessable
End;
TForm6 = class(TForm)
GridPanel1: TGridPanel;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button14: TButton;
Button15: TButton;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
uses TypInfo, Rtti;
Function GetSize(B: TComponent): Integer;
var
c: TRttiContext;
t: TRttiInstanceType;
begin
c := TRttiContext.Create;
try
t := c.GetType(B.ClassInfo) as TRttiInstanceType;
Result := t.GetProperty('Width').GetValue(B).AsInteger;
finally
c.Free;
end;
end;
procedure TGridPanel.Paint;
var
I: Integer;
LinePos, Size: Integer;
ClientRect: TRect;
begin
inherited;
begin
LinePos := 0;
Canvas.Pen.Style := psSolid;
Canvas.Pen.Color := clBlack;
ClientRect := GetClientRect;
Canvas.Rectangle(ClientRect);
for I := 0 to ColumnCollection.Count - 2 do
begin // cast to "own" TCellItem to access size
Size := TCellItem(ColumnCollection[I]).Size;
if I = 0 then
Canvas.MoveTo(LinePos + Size, ClientRect.Top)
else // "keep cells together"
Canvas.MoveTo(LinePos + Size, ClientRect.Top + TCellItem(RowCollection[0]).Size);
Canvas.LineTo(LinePos + Size, ClientRect.Bottom);
Inc(LinePos, Size);
end;
Canvas.Font.Size := 12;
Canvas.TextOut(TCellItem(ColumnCollection[0]).Size + 20,
(TCellItem(RowCollection[0]).Size - Canvas.TextHeight('X')) div 2,
'a longer caption text to be displayed');
LinePos := 0;
for I := 0 to RowCollection.Count - 2 do
begin
Size := TCellItem(RowCollection[I]).Size;
Canvas.MoveTo(ClientRect.Left, LinePos + Size);
Canvas.LineTo(ClientRect.Right, LinePos + Size);
Inc(LinePos, Size);
end;
end;
end;
end.
+1
太棒了。非常感谢。 – SAMPro 2013-04-23 08:05:37
相关问题
- 1. NSUserDefaults以表格形式保存并在数组中读取
- 2. 以Java格式保存Outlook邮件格式的邮件
- 3. 保存的文件格式
- 4. 如何以.rtf格式保存文件
- 5. 以列表形式保存子列表
- 6. 以NSData对象的形式将文件保存到文件
- 7. 以形式对齐组件
- 8. Django:如何使用ManytomayField以表格形式保存对象
- 9. Breezing窗体组件不保存快速模式形式
- 10. ASP.NET图表控件格式
- 11. ctools表格组件条件格式
- 12. PHP simpleXML如何以格式化的方式保存文件?
- 13. Asp.net Viewstate不保存控件的样式
- 14. 保存形式哈希改变事件
- 15. 在html控件中显示以字节数组形式存储的图像
- 16. 免费的C#表格/图形组件
- 17. 的Liferay:PDF格式保存文件名
- 18. 使电子表格以版本控制的人类可读格式保存
- 19. 如何保存控件数组
- 20. 角度/猫鼬保存一份文件列表的形式
- 21. 以表格形式显示
- 22. 以Java条形式保存FileDialog初始文件扩展名
- 23. 如何在将矩阵保存到文件时控制格式?
- 24. 阅读文本文件保存以前的格式
- 25. AngularJS:如何以表格形式表示并保存每行对象
- 26. Angular2表格控件组持有未定义数量的控件
- 27. 将数据写入文本文件以表格的形式
- 28. excel加载保存csv文件格式
- 29. 保存文件Windows Iot Core jpg格式
- 30. Couchbase lite文件保存格式
您可以在您的问题中包含一张图片,以显示您寻找什么外观,并尝试更好地解释。例如,我不清楚的是,如果您希望组件“重复”包含的组件或不。此外,“表格风格”对我来说还不清楚,但那可能是因为我不是母语的人。 – jachguate 2013-04-23 05:27:32
对不起,我的英语不好。我只想要一个像ListView这样的组件,但是每个单元格可以包含另一个组件,例如'GridPanel' – SAMPro 2013-04-23 06:11:09