- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将椭圆中间的数字显示为 Canvas 上绘制的文本。坐标(对于椭圆)将存储在数据库内,文本值将存储在数据库的另一部分中。
到目前为止,我所做的是我一直在使用 FMXExpress (Github) 的演示项目(DrawApp)。我将一些程序从私有(private)更改为公开。这些程序包括 StartDrawing(startP:TPointF)、EndDrawing(startP:TPointF)、DoDraw(),这样我就可以从外部单元/对象使用这些函数。该对象使用这些函数与 MouseUp/MouseDown 配合使用,以及一些属性(包括 fDrawing)来区分绘图是否正在进行以及正在使用什么工具(fdEllipse)。
我的主窗体在 FormCreate 中使用以下代码来初始创建 fdrawbox := TMyPaintBox.Create(Rectangle1);矩形 1 位于图像顶部,它代表显示 body 部位的网格,并且能够在图像顶部绘制圆圈。我发现创建文本或椭圆并不难,但是为了创建多个带有标识符的圆圈来区分圆圈,正如我所提到的,我想要一个数字来显示哪个圆圈是哪个。甚至在将来,我可能想更改颜色以显示要关注哪个圆圈。
demonstration for mypaintbox http://www.abatepain.com/abate/OHlbF.jpg
因此,以下代码 (Delphi FMX) 展示了通过利用 TRectangle 作为其父级来创建绘图应用程序。
with fdrawbox do begin
Parent := Rectangle1;
Visible := True;
ForegroundColor := TAlphaColor($FF000000); //
BackgroundColor := TAlphaColor($00000000); //
FuncDraw := TFunctionDraw.fdEllipse; //fdrawbox.fDrawing := True;
StartDrawing(PointF(100, 100));
EndDrawing(PointF(200, 200));
FuncDraw := TFunctionDraw.fdNone;
OnPaint := PaintBox1Paint;
end;
圆圈是使用最后几行创建的,但为了利用 FillText,我需要使用我创建的 OnPaint 函数,代码如下所示。我相信 DrawApp 在内部处理 OnPaint 函数,但它如何处理它仍然未知。但打印“Hello Text!!”仍然是必需的
procedure TMainForm.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
with Canvas do begin
BeginScene();
//Clear(cbbg.Color);
Font.Style := [];
Font.Size := 12;
Fill.Color := TAlphaColors.Red;
FillText(TRectF.Create(0, 0, 300, 295), 'Hello Text!!', false, 100, [], TTextAlign.Center, TTextAlign.Center); //TFillTextFlag.RightToLeft
EndScene;
end;
Application.ProcessMessages;
end;
有人可以举一个例子来说明如何处理这个问题(可能在单个函数内),我可以在其中打印多个圆圈并在其后添加关联的文本吗?我相信在前面的示例中,我可以自己完成,但我必须手动输入 PointF(用于圆)和 TRectF 用于文本,并且它们都使用不同的值作为坐标。
最佳答案
正如您所注意到的,TMyPaintBox
类不支持文本渲染,也不支持文本输出中经常使用的属性,如字体或颜色等。但是您可以通过在私有(private)中定义字段来自行添加这些属性部分以及用于获取/设置公共(public)部分中的值的属性。
在下面,我假设添加字段 ftextout
、ffontsize
和 ffontcolor
以及相应的属性 TextOut
字体大小
和字体颜色
。
要以与绘制其他元素类型类似的方式添加渲染文本的功能,请将 fdText
作为新枚举添加到 TFunctionDraw
。
TFunctionDraw=(fdNone,fdPen,fdLine,fdRectangle,fdEllipse,fdFillBgr,fdBitmapStamp,fdPolyLine, fdText);
然后在TMyPaintBox.DoDraw
中向case ffdraw of
添加一个新的case选项,例如:
with vCanvas do
begin
BeginScene();
case ffdraw of
//
// other TFunctionDraw enums
//
TFunctionDraw.fdText: begin
{Canvas.}Font.Size := ffonsize; // new field
{Canvas.}Fill.Color := ffontcolor; // new field
{Canvas.}FillText(r, TextOut, False, 1, [],
TTextAlign.Center, TTextAlign.Center);
end;
end;
编辑:
TFunctionDraw.fdText
中对 Canvas
的引用是多余的。删除注释掉的引用文献。要使用的 Canvas 已在 with
语句中定义(添加到要显示的代码中)。哦,我讨厌那些with
!
还值得注意的是,如果您只想显示带有文本的圆圈,而不让用户在 Canvas 上绘制,则可以使用自己制作的组件更简单地实现它。
另外,不要直接调用DoDraw
。它由 Paint
调用,每当 fdrawbox
失效时都会触发该函数。因此,当您想要强制更新时,请调用 invalidate
。
编辑结束
然后您可以像任何其他元素绘制一样实现文本渲染(使用您的代码模板):
with fdrawbox do begin
Parent := Rectangle1;
Visible := True;
ForegroundColor := TAlphaColor($FF000000); //
BackgroundColor := TAlphaColor($00000000); //
FuncDraw := TFunctionDraw.fdEllipse; //fdrawbox.fDrawing := True;
StartDrawing(PointF(100, 100));
EndDrawing(PointF(200, 200));
FuncDraw := TFunctionDraw.fdText;
FontSize := 12; // set new property
FontColor := TAlphaColorRec.Red; // set new property
TextOut := 'Hello text!';
StartDrawing(PointF(100, 100));
EndDrawing(PointF(200, 200));
FuncDraw := TFunctionDraw.fdNone;
invalidate;
// OnPaint := PaintBox1Paint; // no need for this
end;
关于delphi - (Delphi FMX) 如何使用 Canvas.FillText 显示在椭圆的中间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38360343/
我有 n 个圆圈,它们必须完美地围绕着一个椭圆,如下图所示: 在这张图片中,我需要找出椭圆周围每个圆的位置,并且还能够计算出完全适合这些周围圆的椭圆。 我知道的信息是每个圆的半径(都一样),以及圆的个
如何在three.js 中创建一个椭圆? 我看过这个: Drawing an ellipse in THREE.js 但是如果有人可以提供一个工作示例会很酷。 我试过这个: ellipse = new
我将使用哪种 SKPhysicsBody 主体类型来创建椭圆物理主体? 我知道我可以用直线做一条曲线,只是让它不是一个真正的椭圆,但似乎必须有某种方法来挤压一个圆或创建一个圆? 最佳答案 Create
我有一堆二维点。您可以在左图中看到它们。它们形成了某种带有几只兔子耳朵的环。我的目标是找到大的内循环/椭圆,您可以在右侧看到它。 什么样的算法对这种情况有用。 我尝试了 RANSAC 算法的变体(取
这个问题在这里已经有了答案: Ellipsis in the middle of a text (Mac style) (16 个答案) 关闭 7 年前。
我是 XAML 新手。我遇到了这个问题,我需要将符号图标或字体图标放入椭圆形状(因此它显示为圆圈内的图标)。但是,似乎 Ellipse 的 Fill 属性只需要 ImageBrush 和 ColorB
我是 OpenCV 的新手,正在学习进行一些图像处理。作为我项目的一部分,我遇到了将椭圆形式的图像补丁变形为目标椭圆的问题。据我所知,我需要计算两个补丁之间的仿射变换,然后将此变换扭曲到目标补丁中。浏
我希望能够使用 Graphics2D 实例在 BufferedImage 上绘图,并在形状的外部 填充颜色。如果这是矩形之类的形状,那会很容易,但我需要使用的形状是圆形。 用颜色填充一个圆很容易,只需
我正在尝试在 box2D (Cocos2D) 中创建一个椭圆对象。到目前为止,我已经为此使用了 b2CircleShape,但我意识到它不会再削减它了,我必须拥有椭圆形的 body 。可能吗?我试过使
我只是想知道是否有一种方法可以像我在绘画中制作的这个例子那样用拇指制作椭圆 slider : 现在我正在使用 style 但只适用于水平的silders。这是示例代码:
本文讲述了java实现画线、矩形、椭圆、字符串功能的实例代码。分享给大家供大家参考,具体如下: ?
我一直在阅读有关将圆拟合到数据的一些方法(如 this )。我想看看这些方法如何处理真实数据并考虑使用 R 来实现这一点。我尝试在 rseek 中搜索可以帮助解决此问题的软件包,但没有找到任何有用的信
当椭圆不使用此公式1旋转时。如果value = 1-指向椭圆,如果value> 1-外部,如果value #include #include struct Pt {int x, y;
已尝试搜索,但找不到任何内容。 我正在尝试使用数组和 for 循环绘制多个 2D 椭圆,我每秒都会重新绘制框架。问题是,我每次重新绘制时只得到一个椭圆,有人可以告诉我我的代码有什么问题吗? impor
是否可以在 Altair 图表内按照图表 x 和 y 变量的测量单位绘制线条和几何形状?图表可能是多面的,形状和线条取决于每个特定面中的数据。 可重现的示例: import pandas as pd
我有两个系列及其交点。我想在图表上有一个椭圆形(椭圆形),中心位于交叉点。应根据轴单位设置椭圆半径,以显示每个轴的感兴趣区域。 Highcharts.chart('container', {
有没有办法调整 Highcharts 中轴标签的行高?有时,对于断行标签,可能会出现重叠/间距问题,如果可以降低行高,这些问题会得到缓解。 正如您在下图中较长的红色标签中所见,自定义行高会很有帮助。有
我想在 android 中画一个椭圆/圆,但我无法让它显示出来。我可以使用低效的循环和 glVertex 在 C 的 OpenGL 中(而不是在 android 中)做得很好,但是 OpenGL ES
本文实例讲述了Android编程开发之在Canvas中利用Path绘制基本图形的方法。分享给大家供大家参考,具体如下: 在Android中绘制基本的集合图形,本程序就是自定义一个View组件,程序
<ellipse> 元素可以画一个椭圆 SVG 椭圆 - <ellipse> <ellipse> 元素可以画一个椭圆 椭圆与圆很相似。不同之处在于椭圆有不同的
我是一名优秀的程序员,十分优秀!