Cpp Builder 11 TAdvStringGrid 自绘制和鼠标滚轮的问题

C++ Builder XE关于AdvStringGrid对EXCEL母表快速分表,并批量插入sheet子表简单操作,免费工具 RzListBox1->Items->Append(RzButtonEdit1->Text+"\\"+Btzd->Strings[Bi]+"_分表.xlsx");if( AdvStringGrid1->Cells[ZDint][j]== Btzd->Strings[Bi] ) //分表字段类。//查找字段列有多少个不同类。//删除所有表格文件。//删除所有表格文件。 阅读详情

首先咱们说说自绘制, 表格要填充内容,具体代码如下:

int count = [ data row count]

AdvStringGrid1->HideFocusRect=true;  //隐藏表格选中时的虚线框

// 表格初始化,表头要定好
AdvStringGrid1->Clear();   //清空表格内容
AdvStringGrid1->RowCount = count + 1;  //留一行作为表头,所以总的函数+1
AdvStringGrid1->RowHeights[0] = 47;  //第一行表头的行高度
AdvStringGrid1->Cells[0][0] = "ID";
AdvStringGrid1->ColWidths[0] = 0;  //宽度为0,就是要隐藏第0列的数据
   
AdvStringGrid1->Cells[1][0] = "编号";  //只是第1列的字段名,作为表头内容
AdvStringGrid1->ColWidths[1] = 60;     //设置第1列的像素宽度
AdvStringGrid1->Cells[2][0] = "时间";
AdvStringGrid1->ColWidths[2] = 180;
AdvStringGrid1->Cells[3][0] = "问题描述";
AdvStringGrid1->ColWidths[3] = 200;
AdvStringGrid1->Cells[4][0] = "分析类型";
AdvStringGrid1->ColWidths[4] = 100;
AdvStringGrid1->Cells[5][0] = "文件列表";
AdvStringGrid1->ColWidths[5] = 300;

//定义好表头之后来填充数据

for(int i=0; i < count; i++)
{
  int ARow = i + 1;
  
  AdvStringGrid1->RowHeights[ARow] = 47;
  AdvStringGrid1->Cells[0][ARow] = [key];
  AdvStringGrid1->Cells[1][ARow] = [key];
  AdvStringGrid1->Cells[2][ARow] = [timestamp];
  AdvStringGrid1->Cells[3][ARow] = [info];
  AdvStringGrid1->Cells[4][ARow] = [event];
  AdvStringGrid1->Cells[5][ARow] = [files];

}

需要设置表格的默认属性,还有就是在合适的地方刷新表格内容:

/*
MouseActions:  
{
    RowSelect = true  //鼠标滚动可以对表格的行进行选中

    WheelIncrement = 1  //滚动的偏移
}
*/

// 表格内容居中对齐
void __fastcall TForm1::AdvStringGrid1GetAlignment(TObject *Sender, int ARow, int ACol,
          TAlignment &HAlign, TVAlignment &VAlign)
{
	HAlign = taCenter;
    VAlign = vtaCenter;
}

void __fastcall TForm1::AdvStringGrid1ScrollCell(TObject *Sender, int ACol, int ARow,
          int ScrollPosition, int ScrollMin, int ScrollMax)
{
      ActionLogReqRefresh->Execute();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::AdvStringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
          bool &CanSelect)
{
	if(ARow > 0)
	{
        CanSelect = true;
	}
	else
	{
		CanSelect = false;  // 第一行作为表头,不允许被选中
	}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AdvStringGrid1ClickCell(TObject *Sender, int ARow, int ACol)

{
	if(ARow > 0)
	{
    	AdvStringGrid1->RowSelect[ARow] = true;
		ActionLogReqRefresh->Execute(); // AdvStringGrid1->Invalidate();
	}
}
//---------------------------------------------------------------------------

//  按键也会影响到表格,所以操作按键也需要刷新表格内容
void __fastcall TForm1::AdvStringGrid1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
	if(Key == VK_UP || Key == VK_DOWN)
	{
		ActionLogReqRefresh->Execute(); // AdvStringGrid1->Invalidate();
    }
}

//---------------------------------------------------------------------------

void __fastcall TForm1::AdvStringGrid1SelectionChanged(TObject *Sender, int ALeft,
		  int ATop, int ARight, int ABottom)
{
	ActionLogReqRefresh->Execute();  // AdvStringGrid1->Invalidate();
}

最后咱们来说一下自绘制表格控件;

void __fastcall TForm1::AdvStringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
		  TRect &Rect, TGridDrawState State)
{
		if(ARow>= 0)
		{
			AdvStringGrid1-> Canvas-> Brush-> Style = TBrushStyle::bsSolid;
			if(ARow >= 1)
			{
				if(AdvStringGrid1->RowSelect[ARow])
				{
					AdvStringGrid1-> Canvas-> Brush-> Color   =  (TColor)0xf9f6f3;
				}
				else
				{
					AdvStringGrid1-> Canvas-> Brush-> Color   =   (TColor)clWhite;
				}
			}
			else
			{
				AdvStringGrid1-> Canvas-> Brush-> Color   =  (TColor)0xf9f6f3;
			}
//			Rect.Right = Rect.Right + 1;


			AdvStringGrid1-> Canvas-> FillRect(Rect);
			AdvStringGrid1-> Canvas-> Brush-> Style = TBrushStyle::bsClear;
			AdvStringGrid1-> Canvas-> Pen-> Color = clSilver;
			AdvStringGrid1-> Canvas-> Pen-> Width = 1;
//			AdvStringGrid1-> Canvas-> Rectangle(Rect);
			AdvStringGrid1-> Canvas->MoveTo(Rect.Left, Rect.Bottom);
			AdvStringGrid1->Canvas->LineTo(Rect.Right+1, Rect.Bottom);
			if(ACol >=1)
			{
				 {
						AdvStringGrid1->Canvas->Font->Size = 12;
						DrawText(AdvStringGrid1-> Canvas-> Handle,   AdvStringGrid1-> Cells[ACol][ARow].c_str(),
						-1,   (RECT*)&Rect,   DT_SINGLELINE   |   DT_VCENTER   |   DT_CENTER);
				 }
			}
			else
			{
				AdvStringGrid1->Canvas->Font->Size = 12;
				Rect.Left = Rect.left + 15;
				DrawText(AdvStringGrid1-> Canvas-> Handle,   AdvStringGrid1-> Cells[ACol][ARow].c_str(),
					-1,   (RECT*)&Rect,   DT_SINGLELINE   |   DT_VCENTER );
			}
		}
}

 自绘制表格控件,表格的每一个单元格都需要刷新背景,否则背景会残留。

delphi advstringgrid 表格中加checkbox 读取,设置checkbox,全选,反选。 阅读详情

相关推荐

Delphi 7用TAdvStringGrid控件提升表格交互与展示

TAdvStringGrid-v4.0.8.1是业界领先的网格控件之一,以其强大功能和高度定制性在应用程序开发中扮演着重要角色。它提供了丰富的API接口,以及高度可配置的选项,支持开发者实现复杂的数据展示和交互功能。对于需要处理大量数据和提供良好用户体验的应用程序,TAdvStringGrid能够通过其灵活的布局和样式定制来满足不同项目需求。TAdvStringGrid不仅包括基本的网格功能,如列宽调整、行高设置和数据绑定,还支持更高级的特性,比如自定义单元格绘制、内置数据编辑器和丰富的事件系统。

weixin_34456923的博客 1263

delphi html 表格控件,Delphi之TMS开发组件包-TAdvStringGrid表格控件

最近项目涉及一些复杂表格显示的实现,尝试使用Dev Express的cxGrid控件多次还是没法实现想要的效果,后来发现,TMS开发组件包的TAdvStringGrid可以实现效果。这里举例来说明一下,例如,需要实现如下效果: 如上所示是一个3行4列的表格,其中,第一行的1、2列合并,第2行的2、3列合并,下面使用TAdvStringGrid来实现,步骤如下:1. 新建一个VCL窗口项目,布局界面...

weixin_42135073的博客 2417

Delphi开发者必备:Adv StringGrid控件详细介绍

Delphi作为一款流行的快速应用开发工具,其报表控件功能一直是开发者们关注的焦点。在本章中,我们将介绍Delphi的报表控件的基本概念、功能以及如何高效使用它们。Delphi报表控件是用于创建报表的组件集合,它支持数据的展示、编辑以及复杂的布局管理,对数据进行可视化表达。利用Delphi报表控件,开发者可以快速生成多样化的报表,从而帮助业务分析与决策制定。Delphi报表控件套件中包含了一系列组件,例如:QuickRepStringGrid等,每个组件都针对特定类型的报表提供了优化。

weixin_42143092的博客 1216

当前最全的TAdvStringGrid控件属性事件介绍和使用方法(AdvStringGrid使用技巧/Cells)...

当前最全的TAdvStringGrid控件属性事件介绍和使用方法(AdvStringGrid使用技巧/Cells)---作者:TTT日期:20090306---   TAdvStringGrid是Delphi编程中常用的控件,经常用于统计数据和设计比较复杂的表格。控件功能很强大,但相应的使用也很复杂!  以下是我整理出的常用技巧,有一部分是我自己的经验,有一部分是网上搜的别...

weixin_30355437的博客 654

Pytorch学习笔记(III)——提取特征

目录一、引言二、具体步骤1、参数模型2、网络结构3、参数载入4、特征提取器5、读取图片三、完整代码 一、引言   深度学习在许多任务中主要充当着特征学习的作用,而学习完的特征才是后续应用的一个关键。本文将主要介绍,如何提取任意目标层的特征图。   本文以输入数据为图片为例。 二、具体步骤 1、参数模型 博主使用了ResNet50训练了一个人脸识别的网络   训练完成的深度学习模型,我们会保存一...

lockonlxf的博客 2643

STM32F103ZET6【标准库函数开发】------04五个串口配置实战:从零到一构建多串口通信系统

本文详细介绍了STM32F103ZET6标准库函数开发中五个串口(USART/UART)的配置实战,从硬件引脚识别、时钟树配置到多串口系统整合技巧。通过具体代码示例和调试经验,帮助开发者快速构建稳定的多串口通信系统,适用于工业控制、物联网网关等应用场景。

weixin_29188997的博客 344

AdvStringGrid常用操作

(1)如何设置表格固定的列数,如下图所示: AdvStringGrid使用小结 这里固定的列数为3列,通过设置下面属性来改变固定的列数: AdvStringGrid.FixedCols:=n;(n为要固定的列数值) (2)如何从AdvStringGrid中读取和向AdvStringGrid中导入值: AdvStringGrid.Cells[j,i]:=str;(向其单元格赋值)这里需要注意的是,j...

展翅飞翔 1837

Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感

Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感

冲击10w 1万+

TAdvStringGrid用法

TAdvStringGrid(一) ******************************技巧一 本文全部摘自网络,出处很多,感谢原创作者及其它引用者。 文章介绍了TAdvStringGrid控件的一些常用的属性事件和方法,主要用于统计数据和设计比较复杂的表格!核心部分:合并单元格的几个函数和过程!   1.可否进行编辑  设置Options中goEditing设置为true。 ...

huang714的专栏 1932

Spring AI 项目实战(一):Spring AI 核心模块入门

摘要:本文探讨了Spring Boot与Spring AI在Java生态下开发智能应用的技术融合。Spring Boot通过自动配置和嵌入式服务器简化企业级应用开发,其核心架构包括Spring Application和Web MVC框架。Spring AI则提供标准化接口,整合Hugging Face、TensorFlow等AI引擎,模块化支持NLP、CV和ML任务。文章通过代码示例展示了文本分类、图像处理和机器学习预测的实现,为开发者提供了Java生态下高效构建AI应用的解决方案。

博客 1530

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

AdvStringGrid使用方法(1)

  本文简单的介绍了TAdvStringGrid控件的一些常用的属性事件和方法,主要用于统计数据和设计比较复杂的表格!核心部分:合并单元格的几个函数和过程!  1.可否进行编辑   设置Options中goEditing设置为true。   2.点击鼠标时直接进入编辑,或允许、不允许改变行或列宽等特性,都可以在MouseActions中设置。   3.设置Grid中,某一列的数据格

记性不好,笔记而已 1万+

基于YOLOv8的包装商品智能检测系统完整指南—含论文、代码

《基于YOLOv8的包装商品智能检测系统》摘要: 本文提出了一套完整的零售商品自动检测解决方案,利用YOLOv8深度学习框架实现高精度、高效率的商品识别。系统针对SKU110K大规模商品数据集(含11,762张高密度货架图像)进行优化,包含数据预处理、模型训练、推理检测和可视化界面全流程。详细介绍了从CSV标注到YOLO格式的转换方法、环境配置指南及技术架构设计。该系统可应用于智能零售、物流仓储等多个场景,有效解决人工盘点效率低、误差大的痛点。实验表明,该系统具备毫秒级检测速度和批量处理能力,为商业数字化转

FJN110的博客 209

TAdvStringGrid控件属性事件介绍和使用方法

TAdvStringGrid是Delphi编程中常用的控件,经常用于统计数据和设计比较复杂的表格。控件功能很强大,但相应的使用也很复杂!   以下是我整理出的常用技巧,有一部分是我自己的经验,有一部分是网上搜的别人的总结,有一部分整理了,有一部分没有整理;有一部分测试了,有一部分没有经过测试~呵呵,但都是我手工编辑的啊。(部分示例过程是用于创建和设置动态Cells的过程,如果不理解请参考我总结的另...

qq_29786017的博客 2012

【PyTorch项目实战】之ResNet系列:resnet18、resnet34、resnet50、resnet101、resnet152

ResNet (Residual Network) :是一种深度卷积神经网络(CNN)架构,其核心思想是引入残差学习(Residual Learning)机制,通过跳跃连接(skip connections)来解决深层网络训练中的退化问题。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 6375

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3036

动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)

    本方法实现用常量和常量数组完美创建和控制动态TAdvStringGrid。    原理就是先声明常量,包括列数,行数,各列的属性,然后在程序的其它过程用这些常量来控制Cells。非常方便,便于修改和移植!    以下为窗体整体代码,中间有说明。此段代码不光有动态AdvStringGrid的完美示例,还有一般窗体的常用的过程,比较窗体初始化,刷新过程。    此窗体,只需要简单准备如下,

taoether的专栏 1882

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Delphi StringGrid 屏蔽鼠标中间

Procedure TFMHourKeyIn.OnMouseWheel(Var Msg :TMsg;var Handled:Boolean); begin  if Msg.message = WM_MouseWheel  then    begin    if strngrdRouter.Focused then    begin      SendMessage(strngrdRou

ts_otaku的专栏 1060

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

控件:实现虚线的StringGrid

这个最先是发在朋友的网站 www.lihuasoft.net  上的,大家可以看看: 原来StringGrid的演示效果:     修改后的StringGrid的演示效果:   

1359

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Delphi TMS AdvStringGrid 列宽列的宽度可以让用户自由拉伸可调

在属性的Options里面有一个goColSizing的,改为True即可让用户可调宽度。

Delphi开发局QQ群:32422310 1942

android gridview隐藏滚动条,如何禁用GridView中的ScrollViewer的滚动

如何禁用GridView中的ScrollViewer的滚动10/20/20132 minutes to readIn this article这篇文章所讨论的问题似乎有些基础,因为ScrollViewer控件有Horizontal/VerticalScrollMode属性可以用来控制滚动条的行为,如设定成ScrollMode.Disabled的期望结果就是能够禁用滚动操作。一开始我们也是这样认为的...

weixin_39966922的博客 400

TAdvStringGrid 使用技巧(转载)

TAdvStringGrid是Delphi编程中常用的控件,经常用于统计数据和设计比较复杂的表格。控件功能很强大,但相应的使用也很复杂!   以下常用技巧,有一部分整理了,有一部分没有整理;有一部分测试了,有一部分没有经过测试。

欧少的博客 1万+

AdvStringGrid使用方法(2)

procedure TForm1.FormCreate(Sender: TObject);begin  AdvStringGrid1.FixedRows:=2;  AdvStringGrid1.SaveFixedCells := false;  AdvStringGrid1.MergeCells(1,0,2,1);  AdvStringGrid1.MergeCells(

记性不好,笔记而已 1万+

学习和使用AdvStringGrid

1. 前言项目上需要一个表格组件来展现数据。Delphi自带的StringGrid实在功能太少,而且很难看。的确是可以扩展,但是这是要花费很多时力的。 我需要的表格组件应有如下基本功能:单元格中可以加入复选框、单选框、下拉框、日期选择框等。 点击列标题可以排序. 列拖动(这个功能不要也行) 支持翻页导航。(数据行数太多时我想分页显示) 方便的打印接口,而且可以方便地设置

山刀在线 2295
上一篇: cppbuilder xe10.4 WM_DROPFILES 在win10上收不到的问题
下一篇: 零刻 ME MINI 使用经验
vrix
博客等级 码龄24年 674粉丝 167原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值