delphi - 将 Delphi TPoint 转换为 C# Point

标签 delphi c#-4.0 graphics vcl delphi-6

我正在尝试转换一些 Delphi 代码,因为我们正在 .Net 中重写 Delphi 6.0 (VCL) 应用程序。我不确定也无法弄清楚 2 个 Delphi Tpoint(x,y) 与 C# Point(x,y) 之间的比较。

我试图在两点之间画一条线,但由于我不知道 Delphi 如何绘制它,所以我无法为其设置 C# 坐标。

Delphi 代码很简单:

Canvas.MoveTo(x, y - 128);    
Canvas.LineTo(x, y);

我知道 C# 坐标大约是每英寸 72 个点,并且需要计算像素密度。但我不确定德尔福 PPI。

任何人都将不胜感激。谢谢。

编辑:如果有人想知道我在说什么 TPoint,而我的代码片段中没有,Canvas.MoveTo 设置 Canvas 的 PenPos 属性,其类型为 TPoint强>.

最佳答案

我不确定这里问的确切问题是什么。您的代码片段中没有 Delphi TPoint;您只需拥有客户端矩形逻辑坐标即可。

原点位于X = 0, Y = 0,即客户区的左上角。增加X 将位置向右移动,增加Y 将位置向下移动。逻辑单位是像素,因此从 0, 0 原点开始,Canvas.MoveTo(10, 10) 将从左边缘 10 设置新的绘制位置从前 10 个像素开始向下移动,然后使用 Canvas.LineTo(20, 20) 将从 10, 10 处的点到 绘制一条线20, 20.

TCanvas.MoveToTCanvas.LineTo 只是底层 Windows GDI 函数的包装器 MoveToEx (带有始终 NULL 第三个参数)和 LineTo .

就 C# 等效项而言,如果您指的是 System.Drawing.Point,则使用的单位完全相同(尽管我不确定默认情况下原点位于何处) )。给定原点 0, 0System.Drawing.Point(10, 10) 应该与上述位置相同 - 距离左边缘 10 个像素,向下 10 个像素从顶部边缘开始。

快速检查确认 WinForms 应用程序中的原点实际上是客户区的左上角,使用:

// Delphi code
procedure TForm3.FormPaint(Sender: TObject);
begin
  Canvas.Pen.Color := clRed;
  Canvas.MoveTo(0, 0);
  Canvas.LineTo(100, 100);
end;

// C# code
private void Form1_Paint(object sender, PaintEventArgs e)
{
    Pen newPen = new System.Drawing.Pen(Color.Red);
    e.Graphics.DrawLine(newPen, new Point(0, 0), new Point(100, 100));
}

这会产生以下输出:

Side by side output comparison

关于delphi - 将 Delphi TPoint 转换为 C# Point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216243/

相关文章:

android - Delphi中如何读取JPendingIntent?

c#-4.0 - 不包含带有 0 个参数的构造函数

c# - 如何在 C# 中添加对程序集的引用?

c#-4.0 - 使用 FieldInfo.SetValue 和 DynamicObject 作为参数 2

asp.net-mvc - 如何外包 ASP.NET MVC 应用程序的设计?

graphics - 如何检查线段和从与水平面成一定角度的点发出的线射线之间的交点?

delphi - 如何在自定义样式所有者绘制 TComboBox 中检测 ODS_COMBOBOXEDIT

delphi - 相同的代码,缺少 qtintf70.dll

delphi - `at ReturnAddress`在Delphi中是什么意思?

c++ - 如何在 C++ 中获取 Mac OS X 中主显示器的分辨率?