当前位置: 首页 > news >正文

Delphi TStringGrid控件学习笔记

一.设置文本属性.

注意到,在CELL这个方法中,与我们常用的VBA参数的写法是相反的.

DELPHI先列后行:  property Cells[ACol, ARow: Integer]: string read GetCells write SetCells; 

VBA先行后列: CELLS(ROW,COL)

image

 

procedure TForm1.FormCreate(Sender: TObject);
beginStringGrid1.Cells[0,0]:='序号';StringGrid1.Cells[1,0]:='操作';StringGrid1.Cells[2,0]:='结果';StringGrid1.Cells[0,1]:='1';
end;procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: LongInt;Rect: TRect; State: TGridDrawState);
varS: string;DrawFlags: Integer;LGrid: TStringGrid;
beginLGrid := TStringGrid(Sender);// 1. 处理标题行 (FixedRows, 这里假定是第0行)if (ARow = 0) thenbegin// 设置标题行单元格背景色LGrid.Canvas.Brush.Color := clBtnFace; // 使用标准按钮面部颜色作为标题背景LGrid.Canvas.FillRect(Rect); // 用画刷颜色填充单元格矩形区域// 设置标题字体为加粗LGrid.Canvas.Font.Style := [fsBold];// 设置文本颜色(可选)// LGrid.Canvas.Font.Color := clWindowText;
S := LGrid.Cells[ACol, ARow]; // 获取单元格文本DrawFlags := DT_VCENTER or DT_SINGLELINE or DT_CENTER; // 垂直居中、单行、水平居中// 使用 DrawText 函数绘制文本,实现居中
    DrawText(LGrid.Canvas.Handle, PChar(S), Length(S), Rect, DrawFlags);endelsebegin// 2. 处理数据行(非标题行)的默认绘制(可选)// 如果你想保持数据行的默认绘制方式,或者也想自定义数据行,可以在这里处理LGrid.Canvas.Brush.Color := clWindow; // 默认窗口背景色
    LGrid.Canvas.FillRect(Rect);LGrid.Canvas.Font.Style := []; // 常规字体// 使用 TextRect 绘制数据行文本(默认左对齐)LGrid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, LGrid.Cells[ACol, ARow]);// 或者,如果你希望数据行也居中,可以类似标题行那样使用 DrawText// DrawFlags := DT_VCENTER or DT_SINGLELINE or DT_CENTER;// DrawText(LGrid.Canvas.Handle, PChar(LGrid.Cells[ACol, ARow]), -1, Rect, DrawFlags);end;
end;

二.表格右键菜单设置.

image

 

这里提醒一下大家,菜单在创建时,其name是随机的,比如K1,N1,M1等等,请务必修改为具有实际意义的名称,方便阅读与引用.

在引用菜单是,请直接使用菜单的name,不要使用Item属性,比如下面这种写法非常不推荐使用.

PopupMenu1.Items[0].Visible := False; // '删除行'

image

 

然后设置表格的OnMouseDown事件

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
varACol, ARow: Integer;
beginif Button = mbRight then    // 检查是否是右键点击beginStringGrid1.MouseToCell(X, Y, ACol, ARow);   // 将鼠标坐标转换为单元格坐标.一个常用的,强大而有越的方法// 使用菜单项的 Name 来引用,这样更清晰可靠mnuDeleteRow.Visible := (ACol = 0) and (ARow > 0);   // 在第一列(非标题行)mnuDeleteCol.Visible := (ARow = 0) and (ACol > 0);   // 在第一行(非标题列)mnuClear.Visible     := (ARow > 0) and (ACol > 0);   // 在数据区域end;
end;

 

http://www.hskmm.com/?act=detail&tid=1324

相关文章:

  • JS 定时器 点击简书 button 加载更多 控制台触发
  • 【UnrealEngine4】星球工作优化杂项
  • Oops! internal error 1341 occurred.
  • navicat查看mysql数据库大小
  • MyNetty Normal 规格池化内存分配在高并发场景的应用探讨
  • mongodb 慢查询模拟
  • Java第一次实验
  • HCIP回顾— BGP经典实验详解
  • 逆波兰表达式求值+滑动窗口最大值
  • 84. 柱状图中最大的矩形
  • 前k个高频元素
  • 千靶日记-0002
  • [序列化/JSON/Java/Utils] JACKSON 概述
  • ipad装windows系统模拟器
  • reLeetCode 热题 100-2 字母异位词分组 扩展 - MKT
  • 第6篇、Kafka 高级实战:生产者路由与消费者管理
  • 3.4 页面替换算法 Page Replacement Algorithms
  • 完全弹性碰撞公式推导
  • 中国作为Why框架的诞生地,其国际地位的提升已超越传统 “国家实力” 的范畴,而是成为宇宙规律在人类文明中的具象化代表
  • [Java/日期/时间/时区] Java 时间的转换与处理:DateTimeUtils
  • Tekla坐标定位插件源码
  • std::map的基本用法
  • 力扣20题 有效的括号
  • 2025年9月10日学习笔记之keil软件仿真调试
  • MySQL的explain使用
  • K8S常见的微服务中间件部署之strom
  • Android种某些常见但由不是很好实现的效果
  • P11696 [JRKSJ ExR] 七影蝶 题解
  • IDEA创建文件时如何自动生成头部文档注释(简单、实用)
  • 一文带你吃透Power Platform,开启低代码开发新世界