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

学用TStringGrid之——ColCount、RowCount、Cells             

  本例中使用到了Panel控件,只是比较简单的拖拽到界面上(比如可以在Panel上面放按钮……),详细的知识并没有涉及到,还是先学习TStringGrid。

  本例的功能:

1.获取StringGrid的行数、列数

2.给单元赋值

  运行效果图 :

  代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids; type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} {显示列数与行数}
procedure TForm1.Button1Click(Sender: TObject);
var
cCount,rCount: Integer;
begin
cCount := StringGrid1.ColCount; {获取总列数}
rCount := StringGrid1.RowCount; {获取总行数} Text := Format('总列数: %d; 总行数: %d', [cCount, rCount]); {显示在标题}
end; {给每个单元赋值}
procedure TForm1.Button2Click(Sender: TObject);
var
c,r: Integer;
begin
for c := 0 to StringGrid1.ColCount - 1 do
for r := 0 to StringGrid1.RowCount - 1 do
StringGrid1.Cells[c,r] := Format('%d,%d', [c,r]);
end; end.

  我的补充:

  我尝试在我的电脑上编写了一样的程序,运行效果一样,我就纳闷了,为什么显示是有5行5列呢?于是我去看了一下代码中 TStringGrid的Object Inspector,看到了下面的图中的配置(以ColCount为例,ColCount为总列数,RowCount为总行数)

  发现原来如果直接将TStringGrid组件拖拽到界面上,我的Delphi默认会设置有5行5列,如果想在程序刚启动的时候就显示不是5行5列,而是你自己个性化的配置,可以在Object Inspector里面去配置为你想要的行列数。或者显式在窗体的创建方法中用代码声明。

  注意,在使用Delphi进行程序开发的时候,不光是要在代码编辑器中编辑代码,还要注意Object Inspector等工具的配合使用

  另外可以学习其中Format函数的使用。用来格式化字符串,并且Format的返回值是string类型。

学用TStringGrid之——DefaultColWidth、DefaultRowHeight、Col、Row  

  本例功能:

1.修改StringGrid单元的默认宽和高

2.添加行和列

3.确认当前单元并赋值

  运行效果图:

  代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids; type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.dfm} {修改单元宽度与高度}
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.DefaultColWidth := 56;
StringGrid1.DefaultRowHeight := 18;
TButton(Sender).Caption := '宽与高';
//也可以使用Button1.Caption:= '宽与高'; 的方式更改按钮上的文字
end; {添加一行}
procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
TButton(Sender).Caption := '加一行';
end; {添加一列}
procedure TForm1.Button3Click(Sender: TObject);
begin
StringGrid1.ColCount := StringGrid1.ColCount + 1;
TButton(Sender).Caption := '加一列';
//也可以使用Button3.Caption:= '加一列'; 的方式更改按钮上的文字
end; {当前单元}
procedure TForm1.StringGrid1Click(Sender: TObject);
var
c,r: Integer;
begin
c := StringGrid1.Col; {当前列}
r := StringGrid1.Row; {当前行}
StringGrid1.Cells[c,r] := Format('列:%d;行:%d', [c,r]);
//注意TStringCell的Cells 属性的使用方式,而且它是一个string,表示对应列上的显示字符串
end; end.

  我的补充:

1.注意代码中我对更改按钮上显示文字的说明

2.注意代码中我对TStringGrid的Cells使用的相关说明

3.代码中声明的StringGrid1Click方法可以通过在图形界面设计的时候双击TStringGrid控件,然后就可以在代码编辑器上添加这个方法并在其中添加你想要的代码了。

  或者可以选中这个TStringGrid,在其Object Inspector上的Events中找到OnClick事件,然后双击Object Inspector上面的OnClick,也可以在代码编辑器上添加这个方法。很多组件的事件响应函数都可以通过双击Object Inspecto的Events里面列出的所有对应事件来进行声明。

4.结合本文中的第一个程序的代码

  单元格的行与列是从0而不是从1开始的,TStringGrid的Col 属性是返回当前单元格的列,Row属性是返回当前单元格的行

  本段代码中的第三个按钮对应的方法:点击某个TStringGrid的单元格可以在上面显示字符串,但是对于第0行与第0列上所有的单元格都没有用,点击了也不会有反应

  上面的这种方式没法通过点击TStringGrid的第0行与第0列上的单元格来使其响应,但是不是说明第0行与第0列上面是没办法添加数字的,具体例子比如本文的第一个程序。只是因为第0行与第0列的单元格没有办法对单击单元格的事件作出任何响应,比如你可以在单元格的单击事件中添加其他代码(比如弹出对话框),发现其他的单元格都可以响应,只有第0行与第0列的单元格不可以

其他的TStringGrid的知识                            

  通过上面两个的简单总结,已经对TStringGrid有了初步的了解,更为深入、全面的学习可以直接参考万一的博客中的相关内容

  并且最好自己写代码来玩玩!

学用 TStringGrid [3] - Cols、Rows

学用 TStringGrid [4] - ColWidths、RowHeights

学用 TStringGrid [5] - FixedCols、FixedRows、Color、FixedColor

学用 TStringGrid [6] - Options

学用 TStringGrid [7] - ColWidths[0]、RowHeights[0]、GridLineWidth

学用 TStringGrid [8] - 字体列表

学用 TStringGrid [9] - OnDrawCell

查看所有 Unicode 字符 [Delphi 2009]

给 TStringGrid 添加鼠标拖动功能 - 回复 "dxx" 的问题

如何在 TDrawGrid 的单元格中显示图片 - 回复 "巅枫" 的问题

Delphi控件之---通过编码学习TStringGrid(也会涉及到Panel控件,还有对Object Inspector的控件Events的介绍的更多相关文章

  1. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)

    最近在开发中使用到了UpDown这个控件,但是因为之前没有使用过,所以很不熟悉,于是就编写了一个简单的demo来学习UpDown以及其结合TEdit的用法. 初步的常用功能的简介 目前(2015.08 ...

  2. python --- 字符编码学习小结

    上半年的KPI,是用python做一个测试桩系统,现在系统框架基本也差不多定下来了.里面有用到新学的工厂设计模式以及以及常用的大牛写框架的业务逻辑和python小技巧.发现之前自己写的代码还是面向过程 ...

  3. TGraphicControl(自绘就2步,直接自绘自己,不需要调用VCL框架提供的函数重绘所有子控件,也不需要自己来提供PaintWindow函数让管理框架来调用)与TControl关键属性方法速记(Repaint要求父控件执行详细代码来重绘自己,还是直接要求Invalidate无效后Update刷新父控件,就看透明不透明这个属性,因为计算显示的区域有所不同)

    TGraphicControl = class(TControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPaint) ...

  4. python --- 字符编码学习小结(二)

    距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...

  5. 【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件

    目录(?)[-] Chronometer计时器控件 倒计时CountDownTimer Switch控件 Space控件 其他控件 Android提供了很多控件,基本上都是view的扩展. Chron ...

  6. Delphi中一些DLL的运用(要传递Application和Screen,似乎还忘了传递提示控件)

    dll 调用部分: {****************************************************************} { } { Project: DllDebug ...

  7. OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom窗体控件形式创建)

    参考资料: https://social.msdn.microsoft.com/Forums/zh-TW/1b781685-c670-4338-953d-1957a8f24a66/opentkglco ...

  8. delphi之多线程编程(尚未学习)

    本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...

  9. Delphi和JAVA用UTF-8编码进行Socket通信例子

    最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码. 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收 ...

随机推荐

  1. 【原】小玩node+express爬虫-2

    上周写了一个node+experss的爬虫小入门.今天继续来学习一下,写一个爬虫2.0版本. 这次我们不再爬博客园了,咋玩点新的,爬爬电影天堂.因为每个周末都会在电影天堂下载一部电影来看看. talk ...

  2. Le lié à la légèreté semblait être et donc plus simple

    Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...

  3. ORM之殇,我们需要什么样的ORM框架?

    最近在研究ORM,究竟什么样的框架才是我们想要的 开发框架的意义在于 开发更标准,更统一,不会因为不同人写的代码不一样 开发效率更高,无需重新造轮子,重复无用的代码,同时简化开发流程 运行效率得到控制 ...

  4. web中c#纯网站中引用log4net模块,不记录日志

    如题,解决如下: 1.log4net.config配置如下: <?xml version="1.0" encoding="utf-8" ?> < ...

  5. 深入理解javascript原型和闭包 (转)

    该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...

  6. HiHo Coder字典树 TrieTree

    题目地址:http://hihocoder.com/problemset/problem/1014 不得不吐槽一下这个OJ,题目质量是很好的,但是提交代码后返回的信息也太少了吧!!!本机测试无误,提交 ...

  7. [译]C#编码约定

    原文:https://msdn.microsoft.com/en-us/library/ff926074.aspx 编码约定的目的是: 创建统一格式的代码,让读者的注意力更集中在内容上面,而不是结构 ...

  8. COM 组件基础——GUID 和 接口

    一.前言 书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了.那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时 ...

  9. Load Test Analyzer Overview

    reference url: https://msdn.microsoft.com/en-us/library/ms404677.aspx

  10. IIS7.0发布Web服务-0001

    配置错误 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的 (overrideModeDefault="Deny"),或者是通过包含 ove ...