• 学用 TStringGrid [6]


    本例运行效果图:



    一般修改 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 := 16{设 StringGrid1 为 16 行}
    
      {给每个单元赋值}
      with StringGrid1 do
        for i := 0 to ColCount - 1 do
          for j := 0 to RowCount - 1 do
            Cells[i,j] := Format('%.1x%.1x',[i,j]);
    
      {下面只是动态生成 15 个 TCheckBox, 并赋予标题与 OnClick 功能}
      gb := Self.GroupBox1; {用 gb 简化 GroupBox1 的称谓}
      j := 16;              {用来记录 TCheckBox 的纵向位置}
      for i := 0 to 14 do
      begin
        if cb<>nil then Inc(j,cb.Height);
        cb := TCheckBox.Create(Self);
        cb.Parent := gb;
        cb.Left := 6; cb.Top := j;
        cb.Caption := GetEnumName(TypeInfo(TGridOption),i); 
        cb.OnClick := gb.OnClick;
    
        {本来可以没有下面这句, 不然会隐藏部分名称, 可能是中文系统的支持问题}
        cb.Width := Canvas.TextWidth(GetEnumName(TypeInfo(TGridOption),5))+ 20;
      end;
    end;
    
    {这个主要是让 TCheckBox 调用的}
    procedure TForm1.GroupBox1Click(Sender: TObject);
    var
      i: Integer;
    begin
      GridOpt := [];
      for i := 0 to GroupBox1.ControlCount - 1 do
      begin
        if TCheckBox(GroupBox1.Controls[i]).Checked then
          GridOpt := GridOpt + [TGridOption(i)];
      end;
      StringGrid1.Options := GridOpt;
    end;
    
    end.

    附上窗体设计源码:


    object Form1: TForm1
      Left = 201
      Top = 31
      Caption = 'Form1'
      ClientHeight = 277
      ClientWidth = 468
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesigned
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object StringGrid1: TStringGrid
        Left = 0
        Top = 0
        Width = 335
        Height = 277
        Align = alClient
        TabOrder = 0
        ExplicitWidth = 328
      end
      object GroupBox1: TGroupBox
        Left = 335
        Top = 0
        Width = 133
        Height = 277
        Align = alRight
        Caption = 'GroupBox1'
        TabOrder = 1
        OnClick = GroupBox1Click
        ExplicitLeft = 328
      end
    end

  • 相关阅读:
    在Linux(Ubuntu)下安装Arial、Times New Roman等字体
    Qt的安装和使用中的常见问题(简略版)
    Qt的安装和使用中的常见问题(详细版)
    机械+固态双硬盘时机械硬盘卡顿问题解决
    在Qt(C++)中与Python混合编程
    在Notepad++中快捷选中多行
    在Linux下访问Windows共享文件夹
    Ubuntu下U盘只读文件系统,图标上锁,提示无法修改
    使用Qt Installer Framework制作软件安装包
    Swoole练习 websocket
  • 原文地址:https://www.cnblogs.com/jijm123/p/10833205.html
Copyright © 2020-2023  润新知