本例运行效果图:


一般修改 TStringGrid 的 Options 直接在设计时选一下 True 或 False 就行了; 代码中可以像下面操作:

  StringGrid1.Options := [goFixedVertLine];
  StringGrid1.Options := [goFixedVertLine, goVertLine, goColSizing];

做完这个例子发现不太初级了, 但代码很简单:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids; type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    GroupBox1: TGroupBox;
    procedure FormCreate(Sender: TObject);
    procedure GroupBox1Click(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.dfm} uses
  TypInfo; {需要这个单元获取 StringGrid1.Options 选项名称} var
  cb: TCheckBox;        {准备动态生成 15 个 TCheckBox}
  GridOpt: TGridOptions; {StringGrid1.Options 是一个 TGridOptions 类型(集合)}
                        {同时也应知道: TGridOptions 集合是根据 TGridOption 枚举定义的} {窗体建立时, 干了不少事}
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
  gb: TGroupBox; {为简化 GroupBox1 名称用}
begin
  StringGrid1.RowCount := ;  {设 StringGrid1 为 16 行}   {给每个单元赋值}
  with StringGrid1 do
    for i := to ColCount - do
      for j := to RowCount - do
        Cells[i,j] := Format('%.1x%.1x',[i,j]);   {下面只是动态生成 15 个 TCheckBox, 并赋予标题与 OnClick 功能}
  gb := Self.GroupBox1; {用 gb 简化 GroupBox1 的称谓}
  j := ;              {用来记录 TCheckBox 的纵向位置}
  for i := to do
  begin
    if cb<>nil then Inc(j,cb.Height);
    cb := TCheckBox.Create(Self);
    cb.Parent := gb;
    cb.Left := ; cb.Top := j;
    cb.Caption := GetEnumName(TypeInfo(TGridOption),i);
    cb.OnClick := gb.OnClick;     {本来可以没有下面这句, 不然会隐藏部分名称, 可能是中文系统的支持问题}
    cb.Width := Canvas.TextWidth(GetEnumName(TypeInfo(TGridOption),))+ ;
  end;
end; {这个主要是让 TCheckBox 调用的}
procedure TForm1.GroupBox1Click(Sender: TObject);
var
  i: Integer;
begin
  GridOpt := [];
  for i := to GroupBox1.ControlCount - do
  begin
    if TCheckBox(GroupBox1.Controls[i]).Checked then
      GridOpt := GridOpt + [TGridOption(i)];
  end;
  StringGrid1.Options := GridOpt;
end; end.

附上窗体设计源码:


object Form1: TForm1
  Left =
  Top =
  Caption = 'Form1'
  ClientHeight =
  ClientWidth =
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesigned
  OnCreate = FormCreate
  PixelsPerInch =
  TextHeight =
  object StringGrid1: TStringGrid
    Left =
    Top =
    Width =
    Height =
    Align = alClient
    TabOrder =
    ExplicitWidth =
  end
  object GroupBox1: TGroupBox
    Left =
    Top =
    Width =
    Height =
    Align = alRight
    Caption = 'GroupBox1'
    TabOrder =
    OnClick = GroupBox1Click
    ExplicitLeft =
  end
end

学用 TStringGrid [6] - Options的更多相关文章

  1. 跟我一起学.NetCore之选项(Options)核心类型简介

    前言 .NetCore中提供的选项框架,我把其理解为配置组,主要是将服务中可供配置的项提取出来,封装成一个类型:从而服务可根据应用场景进行相关配置项的设置来满足需求,其中使用了依赖注入的形式,使得更加 ...

  2. Delphi控件之---通过编码学习TStringGrid(也会涉及到Panel控件,还有对Object Inspector的控件Events的介绍

    我是参考了万一的博客里面的关于TStringGrid学习的教程,但是我也结合自己的实际操作和理解,加入了一些个人的补充,至少对我有用! 学用TStringGrid之——ColCount.RowCoun ...

  3. Delphi 编写ActiveX控件(OCX控件)的知识和样例(有详细步骤)

    一.ActiveX应用情况简介: ActiveX控件也就是一般所说的OCX控件,它是 ActiveX技术的一部分.ActiveX是微软公司推出的基于组件对象模型COM的技术,包括对Windows 32 ...

  4. jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件

    支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...

  5. 学习笔记:delphi之TStringGrid

    1.说明 最近加入了一个项目组,使用的开发工具是delphi6,想想又要开始搞这个工具有点小忧伤,但没办法谁让咱就是个打杂的尼... 的需求是显示一个类似于Word/excel的那种表格,可以合并列等 ...

  6. 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选

    在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...

  7. 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求

    论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...

  8. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. 学完了js的知识,一起分享总结知识点

    又一个知识点学完了,到了总结学习效果和知识总结的时间了.js这个编程语言相对于html和css的逻辑性要强一些,也比较不容易上手.概念性的知识点不难理解,就是实际的操作并不容易,需要通过学习和借鉴案列 ...

随机推荐

  1. python模块之导入包及模块发布

    1.导入包(不常用的方法) 在使用python的包时,有时候想直接导入包名,然后通过包名来调用模块,例如: temp为我们创建的一个包,如果我们想通过下面的方式进行导入模块中的方法,将会出错 impo ...

  2. (转) IntelliJ IDEA2018激活

    IntelliJ IDEA2018破解教程 破解方法:下载破解补丁→修改配置文件→输入激活码→激活成功 由于JetBrains封杀,大部分激活服务器已经不能使用,使用下面的比较麻烦的方法也可以进行破解 ...

  3. (转)JAVA socket 进行十六进制报文交互测试

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io. ...

  4. Android仿支付宝扣款顺序,动态改变ListView各Item次序

    前言:今天遇到个需求,需要让用户动态选择语音传输方式的次序,突然想起支付宝选择扣款顺序的功能,恰好能满足需要,就花了点时间写了个demo,在此权当学习记录 先上效果图 支付宝的效果 demo的效果 思 ...

  5. Linux查看某进程的线程

    首先得知道你要查的进程的PID: 比如我要查看看我unimrcpserver的线程 第二种方法:top top命令可以实时显示各线程情况.就相当于windows的资源管理器.

  6. 如何通过Samba共享Linux文件夹

    https://blog.csdn.net/stu059074244/article/details/77766155   Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Window ...

  7. Olympic Game

    每次奥运会期间,大家都非常关注奖牌榜排名的情况. 现在我们假设奖牌榜的排名规则,按优先级从高到低如下: 金牌 数量多的排在前面: 银牌 数量多的排在前面: 铜牌 数量多的排在前面: 若以上三个条件仍无 ...

  8. 2019JAVA最新课程-React从入门到实战(新)

    1.准备工作 可以在yunp.top网站看webpack,node/npm,cnpm的相关使用视频教程 react有两种使用方式,一是在现有网站中添加:二是创建一个全新的 官网创建全新一个react ...

  9. Mysql 日期函数date_format()

    用法:DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据 1.语法 date_fromat(date,format) 说明:date 参数是合法的日期.format 规定日期/时间的输 ...

  10. 带 like 的字符串匹配查询

    1.百分号通配符  '%'  ,匹配任意长度的字符,甚至包括零字符 例:查询所有以  'a'  字母开头的水果,sql 语句如下 select f_id,f_name from fruits wher ...