首页
学习
活动
专区
圈层
工具
发布

学习笔记:delphi之TStringGrid

1、说明 最近加入了一个项目组,使用的开发工具是delphi6,想想又要开始搞这个工具有点小忧伤,但没办法谁让咱就是个打杂的尼。。。...所以主要的技术点: 1、自绘方法,直接就用OnDrawCell事件处理 2、表头,可以使用FixCol和FixRow的属性 3、文本换行 3、开发 3.1、属性设置 DefaultDrawing:设置为...、计算每行的文本高度 这个我找了半天也没找到比较简单好用的方法,最后就用TLabel这个控件来完成的。...的高度设置为StringGrid的行高,这样就能显示多行的文本了。...这样就得到了实际的文本高度。 DT_CALCRECT 就是用于计算文本的矩形宽高哦。 调用上面那句代码后,cellRect就会计算出文本显示的矩形大小了。同样就得到了宽高。

2.5K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学习笔记 :DrawText

    最近在做一个TStringGrid的自绘处理,在画文字处理上遇到了高度的计算问题。...如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。...如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。...DT_SINGLELINE:单行显示文本,回车和换行符都不断行。 函数里面最后面那段蓝字标示的很重要,DT_CALCRECT就是用来计算文本尺寸的哦。。...这个参数传入时是做为计算文本显示的矩形大小,返回时就是文本实际占用的矩形大小。 同时DrawText运算后也会有函数返回值的,就是文本实际的高度。

    1.3K50

    充分挖掘OFFICE文本框几个不为人知的细节功能

    除了基本的形状功能外,我们看到,它还有一个自己的分类叫文本框的属性(当然其他形状也有,因为可以在形状如矩形上写文字,效果就像矩形内部嵌入了一个文本框)。...这里有一些更细颗粒度的控制,例如根据文字调整形状大小,允许文本溢出形状等,这些效果会改变形状的大小,或文字超过形状范围外,在笔者当下的项目场景里是不允许的。但形状自动换行是需要的。...解决思路:比较文本框的高度和文字所在区域的高度,若文本框的高度比文字高度要小,就存在文字被遮挡显示不全的风险。 如何能够做到? 文本框有Height属性?文字区域有Height属性吗?...整个形状的高度,和文字的高度比较,还需要考虑到其上下边矩的问题, 计算公式应该为形状高度-上边矩-下边矩=文字区域高度。...到这里为止,看起来已经真相大白了,可以用上面的逻辑计算判断出有没遮挡的检验逻辑了。 然而这个逻辑成立的前提是,文本框的文字是非常正常地书写的。

    1.1K10

    DrawText

    大家好,又见面了,我是你们的朋友全栈君。 DrawText  函数功能:该函数在指定的矩形里写入格式化文本,根据指定的方法对文本格式化(扩展的制表符,字符对齐、折行等)。   ...,DrawText返回格式化正文 的高度而不是写正文。   ...DT_EXTERNALLEADING:在行的高度里包含字体的外部标头,通常,外部标头不被包含在 正文行的高度里。   DT_INTERNAL:用系统字体来计算正文度量。   ...DT_SINGLELINE:显示正文的同一行,回车和换行符都不能折行。   ...当一行中的字符将会延伸到由lpRect指定的矩形的边框时,此 行自动地在字之间断开。一个回车一换行也能使行折断。   DT_WORD_ELLIPSIS:截短不符合矩形的正文,并增加椭圆。

    1.1K20

    前端项目遇到的问题(一)

    缺点:不能跟随文本换行.textBorder { width: 150px; border-bottom: 1px solid #ffe3d6;}3....伪类通过给dom添加 before/after 添加下划线缺点:效果同border一样不能跟随文本换行.textAfter { position: relative; width: 150px;}....背景(项目中使用)通过使用 background: linear-gradient可以解决文本换行跟随,自定义下划线高度问题.textBody { width: 150px; overflow...,以下是对它们的介绍:1.getComputedStyle():这个方法可以获取指定元素的最终计算后的 CSS 样式。...3.getClientRects():返回一个 ClientRect 对象的集合,代表元素的每个边框矩形。如果元素有多个边框矩形(例如多行文本的元素),则会返回多个 ClientRect 对象。

    66810

    我做了一个在线白板(二)

    ,计算文本的宽高,文本是可以换行的,所以整体的宽度为最长那行文字的宽度,宽度的计算通过创建一个div元素将文本塞进去,设置样式,然后使用getBoundingClientRect获取div的宽度,也就是文字的宽度...;// 计算出行高 let height = lines * lineHeight;// 行数乘行高计算出文本整体高度 return { width, height..., }; }; 文本的宽和高分成了两部分进行计算,高度直接是行数和行高相乘得到,看一下计算宽度的逻辑: // 计算换行文本的实际宽度 export const getWrapTextActWidth...newRect,假设原始矩形的宽高比为2,新矩形的宽高比为1,新的小于旧的,那么如果要比例相同,需要调整新矩形的高度,反之调整新矩形的宽度,计算的等式为: newRect.width / newRect.height.../ originRatio; } else if (newRatio > originRatio) {// 新矩形的比例大于原始矩形的比例,高度不变,调整新矩形的宽度 x1 = newRect.x

    2.2K31

    VCL组件之编辑控件「建议收藏」

    —— 为True时,编辑框的高度会自动适应输入文本字体的高度(必须要BorderStyle属性为bsSingle时才有效) CanUndo —— 编辑框内的文字修改能否通过undo方法来撤销 CharCase...,使用Memo组件,但把它的高度做成标准Edit组件的高度,然后需要时设置Alignment属性。...Note 只要可能就保持窗体时标准的,尽管可以把Edit组件做成喜欢的那么高,如果高度超出标准Windows编辑控件的高度(对用户来说看起来像多行编辑控件),会使用户糊涂。...类 HideScrollBars——当文本长度很短,不需要滚动时,是否隐藏滚动条 PageRect——指定在打印RichEdit控件内容时,以像素为单位计算的纸张面积 Paragraph——指定当前段的格式...指定了数字的最大值 MinValue——指定了数字的最小值 对于每个编辑组件的全部方法请参见Delphi在线帮助。

    3K20

    掌握这些CSS知识点,Coding如飞!

    ,body的实际计算高度为内容撑开的高度,即为0(可以将上述代码的border样式取消注释,可看到body的高度) 那么子元素block类的高度即等同于0 body { background-color...盒子的高度无效,height为0,即在浏览器上无渲染高度 浏览器的渲染规则可理解记忆为:深度优先遍历计算 子元素的相对单位的计算值都是基于父/祖先元素对应的属性值,auto是基于内容区域撑开计算所得。...2.1 百分比单位计算 自己之前一直有个误区,认为padding、margin的百分比单位的计算基数是当前元素矩形区域宽高来算,但是根据包含块的规则,他们的计算基数应该是包含块的width值。...,而所在矩形的框高的计算值需要加上padding和border的宽度,所以变成了一个椭圆。...line-height值为纯数字时,当前行高会根据当前文本的 font-size*line-height 计算所得。

    1.5K20

    【Android】TextView的文字长度测量及各种padding解析

    虽然我们平时只用TextView显示纯文本数据,但其实TextView支持设置Background,四周的drawable小图标,以及Span数据比如文本或图片。...在Android里不管是什么控件都是占据一个矩形的空间,各个矩形之间基本都可以设置padding属性,这样一来TextView就被分成多个矩形区域了,而TextView也提供了获取各种padding和长度的接口...至于extendedPadding和totalPadding这两个的应用场景,我想了想,觉得应该是涉及需要计算显示出来后的文字高度的相关需求时会用到吧。...但其实这两个的效果是不一样的,官方api接口里有说明,都是英文我就不贴图了,大概翻译下: maxLines:限制TextView的最高高度,大概就是指通过限制行数来限制最高高度。...如果是maxLines="1"的话,那么就像上一问中分析的那样,所有的文字其实已经被自动换行了,只显示第一行,而换行是什么,就是为了让每行文字的长度超过文字区域的宽度才进行的换行,也就是说,如果一段文字经过

    4.4K70

    【IOS开发基础系列】UITextView专题

    最终,该对象包含的信息将用于文本绘制。该参数可为 nil 。 返回值         一个矩形,大小等于文本绘制完将占据的宽和高。 讨论         可以使用该方法计算文本绘制所需的空间。...size 参数是一个constraint,用于在绘制文本时作为参考。但是,如果绘制完整个文本需要更大的空间,则返回的矩形大小可能比 size更大。...一般,绘制时会采用constraint 提供的宽度,但高度则会根据需要而定。 特殊情况         为了计算文本块的大小,该方法采用默认基线。...如果NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度将被忽略,同时使用单线绘制。...解决方案:         将计算出来的高度值做向下取整处理即可。

    1.1K40

    如何用canvas实现一个富文本编辑器

    我们的大致做法大致如下: 1.遍历数据列表,计算出每项数据的字符宽高 2.根据页面宽度,计算出每一行包括的数据项,同时计算出每一行的宽度和高度,高度即为这一行中最高的数据项的高度 3.逐行进行绘制,同时根据页面高度判断...,如果超出当前页,则绘制到下一页 计算行数据 canvas提供了一个measureText方法用来测量文本,但是返回只有width,没有height,那么怎么得到文本的高度呢,其实可以通过返回的另外两个字段...来测量文本字符的宽高,遍历所有数据,如果当前行已满,或者遇到换行符,那么新创建一行。...2.点击的是一行的第一个字符的前半部分 当我们点击的是一行第一个字符的前半部分,目前显示会有点问题: 和后一个字符重叠了,这是因为我们计算的问题,前面的计算行数据的逻辑没有区分换行符,所以计算出来换行符也存在宽度...,那么高度默认为字号,否则还是走之前的逻辑,同时我们把换行符存在宽度的问题也一并修复了。

    2.8K42

    剖析 Figma 数据结构:不同图形的特有属性

    所以在计算时,需要将弧度转换到 (-2*PI, 2*PI] 区间,再转为角度。...图片 图片是特殊的矩形,其填充属性 fillPaints 使用了类型为 IMAGE 的 paint。 文本 TEXT 文本图形,支持富文本。 文本图形的属性非常多,这里只介绍一些常用的。...id; textData.baselines:基线对象数组,在换行的情况下,基线会有多条; textData.glyphs:每个字形的 SVG 的 path 表达; textData.fontMetaData...:字体的元信息,比如字重; ... letterSpacing:字间距; autoRename:自动重命名,默认为 true,此时图形的名称会自定跟随文本内容更新; textAutoResize:文字是有一个包围矩形的...默认为 WIDTH_AND_HEIGHT(宽高自动根据文字内容和换行适应),此外还有 HEIGHT(宽度固定,高度自适应)、NONE(文字内容不会改变矩形宽高,必要时会溢出矩形) 结尾 这些就是 Figma

    1.5K10

    手把手带你上手D3.js数据可视化系列(二)手把手带你上手D3.js数据可视化系列(二)

    画布设置好后,先来整体看看大西洋手抄本可视化作品源码里是如何根据画布大小和数据多少计算每个矩形的宽度 rectWidth 的,由于矩形高度均是宽度的1.5倍,所以无需另外计算。...rectWidth + totalMargin,整体高度是 1.5 * rectWidth + totalMargin(上面说过矩形实际高度总是宽度的1.5倍)。...而且后面实际绘制矩形时,就会发现确实是矩形实际高度为实际宽度的1.5倍,而不是整体高度为整体宽度的1.5倍,所以可知这里是近似后,应该就是为了简化计算。...但古柳想到类似上篇文章「手把手带你上手D3.js数据可视化系列(一) - 牛衣古柳 2021.07.30」里调整布局,换行显示的部分,如果这里也分别对宽高进行限制,即每一行的最后一个矩形整体要在画布内,...'rect'),并且采用取余取整操作,计算出每个矩形的x/y坐标值,和上一票最后调整布局换行显示的都类似,应该无需过多解释了。

    3.4K10

    不同大小的文字底部对齐,为什么不能使用flex-end

    :图片可以看到两个字体所在矩形虽然对齐了,但是两个文字的底部并没有对齐。...有以下几个原因:在 line-height: 1 的情况下,文字如果长度不定,出现了换行,就会出现两行文字紧贴在一起的情况,如下。...这里有点反直觉,line-height: 1 直觉上应该和字体的高度是一致的,但是在实际运行过程中发现,并不是这样的,主要和设备的字体有关,这里后面再详细探讨具体原因。...基本原理是 矩形区域高度 = (line-height) ≈ (fontSize + 透明边距)。...而 first baseline 和 last baseline 应该是在多行文本情况下有多个 baseline 的情况时,要对齐第一个 baseline 还是最后一个 baseline,实测如下:first

    2.4K40

    《GPTs 实战:新春贺卡制作》

    然后设定文本与图片边缘的距离,根据计算获取文本的具体范围 5. 当段落内容过长,超出具体的步骤4中计算出的文本范围时,应该在不影响单词显示的情况下,进行自动换行(增加"\n")。...根据计算文本整体的内容高度,调整文本整体位置,使文本整体垂直高度居中,并且确保文本依然保持原有的格式,同时整体文本居中。...然后设定文本与图片边缘的距离,根据计算获取文本的具体范围 5. 当段落内容过长,超出具体的步骤4中计算出的文本范围时,应该在不影响单词显示的情况下,进行自动换行(增加"\n")。...根据计算文本整体的内容高度,调整文本整体位置,使文本整体垂直高度居中,并且确保文本依然保持原有的格式,同时整体文本居中。...根据计算文本整体的内容高度,调整文本整体位置,使文本整体垂直高度居中,并且确保文本依然保持原有的格式,同时整体文本居中。

    1.2K10

    SVG与foreignObject元素

    SVG的text元素提供了基本的文本渲染功能,可以在指定位置绘制单行或多行文本,然而SVG并没有提供像HTML和CSS中的强大布局功能,比如文本自动换行、对齐方式等,这意味着在SVG中实现复杂的文本布局需要手动计算和调整位置...那么如果使用text来绘制文本在日常使用中最大的问题实际上就是文本的换行,如果只是平时人工来绘制SVG可能并没有什么问题,text同样提供了大量的属性来展示文本,但是想做一个通用的解决方案可能就麻烦一点了...,举个例子如果我想批量生成一些SVG,那么人工单独调整文本是不太可能的,当然在这个例子中我们还是可以批量去计算文字宽度来控制换行的,但是我们更希望的是有一种通用的能力来解决这个问题。...此外标签不能直接放在标签内部,其具有严格的嵌套规则,标签是一个独立的元素,用于在SVG画布上绘制文本,而标签是用于绘制矩形的元素,所以绘制的矩形并没有限制文本展示范围...如果想实现换行效果,则必须要自行计算文本长度与高度进行切割来计算位置: ----------------------------------- | This is a long text that

    1.9K61
    领券