AnyLib
User's guide

 使用 AnyGrid

AnyGrid 支持对象属性的概念,在不同的开发环境下,它的使用方法大体相同,只是语法不大一样。对于那些不支持对象属性的开发工具(比如VC),可用相应的 Get 和 Set 方法来读和写属性的值。
下面以 Delphi 的语法来介绍 AnyGrid 的使用。

设计AnyGrid

跟别的组件一样,AnyGrid 的使用也非常简单:将它拉入窗体后,即可在属性面板或属性页中设置它的各项属性。在 VCL 版本中,双击 AnyGrid 就可以调出表格设计器,在 ActiveX 版本中,选中鼠标右键的 "Property" 菜单,然后在出现的属性页中选择 Designer 选项页,单击其中的 Grid Designer 按钮也可调出表格设计器。使用表格设计器设计了表格的内容后,这些内容自动作为窗体资源被保存。

访问 AnyGrid 的单元格

AnyGrid 中的每个单元格都是一个独立的对象,拥有大量的属性和方法。可以有多种方式访问单元格,最常用的是通过行列访问,如 AnyGrid1.Cells(2,1) 将返回第3行,第2列的单元格(行和列从 0 开始计数);如果单元格已经命名, 那么也可以用名称访问,如 AnyGrid1.CellByName('Amount') 。返回当前拥有焦点的单元格更简单:AnyGrid1.SelectedCell。
要取得鼠标坐标下的单元格,需要这样做:

GetCursorPos(P);
P:=AnyGrid1.ScreenToClient(P);
if AnyGrid1.PeekCell(P) then
   Cell:=AnyGrid1.CellFromPoint(P);

由于单元格采用滞后分配内存的方式,即空单元格直至被改动后它的类实例才会被分配,这种技术保证了效率和有效节省了空间。因此,如果只是访问单元格,都应该先调用 PeekCell 来检查它是否为空,就像例子所做的一样 ,如果不检查就直接访问,并且要访问的单元格正好是空的,那么 AnyGrid 会先给它分配类实例然后再返回。

使用上面任何一种方法访问单元格时,都应该检测返回值是否等于空,如:

Cell:=AnyGrid1.Cell(2,1);
if Cell<>nil then
  ShowMessage(Cell.Text);

注意:由于 Visual Foxpro 处理接口的速度很慢,所以在 Visual Foxpro 中访问和设置单元格的文本时应该分别调用表格的 GetCellText 和 SetCellText 方法。

使表格的内部视图居中

下面代码使 Invoice 风格的表格的内部视图自动水平居中。
procedure TfrmBase.AnyGridResize(Sender: TObject);
begin
   if AnyGrid1.GridType=gtInvoice then
     AnyGrid1.LeftSpace:=Max(10,(AnyGrid1.Width-AnyGrid1.GridWidth) div 2);
end ;

精确控制文本和图片的位置

使用单元格的 TextLMargin,TextTMargin,TextRMargin 和 TextBMargin 属性可以分别控制文本的左、上、右、下四个边距(相对于单元格的边框)。
而使用 GraphicLMargin,GraphicTMargin,GraphicRMargin 和 GraphicBMargin 可以分别控制图片的左、上、右、下四个边距(相对于单元格的边框)。
对于有斜线的单元格,如果 BiasDirection 等于 bdDown,则 TextLMargin 和 TextBMargin 可以控制 LeftText 的位置, TextTMargin 和 TextRMargin 可以控制 RightText 的位置; 如果 BiasDirection 等于 bdUp,则 TextLMargin 和 TextTMargin 可以控制 LeftText 的位置, TextRMargin 和 TextBMargin 可以控制 RightText 的位置。

用户如何插入回车符

进入编辑模式后,用户可以使用 Ctrl+Enter 来插入回车符,要使回车符起作用,还需设置单元格的 WordWrap 属性值为 True。


 

AnyLib Team
E-mail: support@anylib.com