Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi GdipDrawLine的奇怪行为_Delphi_Gdi+_Gdi - Fatal编程技术网

Delphi GdipDrawLine的奇怪行为

Delphi GdipDrawLine的奇怪行为,delphi,gdi+,gdi,Delphi,Gdi+,Gdi,我发现GDI+有一个奇怪的行为(我尝试了GdipDrawLine)。我有一个简单的表单,上面有一个画框,在OnPaint事件中有一个简单的代码 procedure TForm1.pbPaint(Sender: TObject); var Pen: GPPEN; GDIDC: GPGRAPHICS; Brush: HBrush; R: TRect; begin Brush := CreateSolidBrush(TColorRec.ColorToRGB(TColorRec.Gr

我发现GDI+有一个奇怪的行为(我尝试了GdipDrawLine)。我有一个简单的表单,上面有一个画框,在OnPaint事件中有一个简单的代码

procedure TForm1.pbPaint(Sender: TObject);
var
  Pen: GPPEN;
  GDIDC: GPGRAPHICS;
  Brush: HBrush;
  R: TRect;
begin
  Brush := CreateSolidBrush(TColorRec.ColorToRGB(TColorRec.Green));
  R := Rect(0, 0, pb.Width, pb.Height);
  FrameRect(pb.Canvas.Handle, R, Brush);

  GdipCreateFromHDC(pb.Canvas.Handle, GDIDC);
  GdipCreatePen1(ColorRefToARGB(TColorRec.ColorToRGB(TColorRec.Red)), 3, UnitPixel, Pen);
  GdipSetPenDashStyle(Pen, DashStyleSolid);
  GdipDrawLine(GDIDC, Pen, 10, 10, 200, 200);

  TextOut(pb.Canvas.Handle, 10, 10, 'Text', 4);
  FrameRect(pb.Canvas.Handle, R, Brush);
  GdipDeletePen(Pen);
  GdipDeleteGraphics(GDIDC);
end;    
这段代码生成了下面的图片,看起来很奇怪,我们有两个参数相同的FrameRect,它们生成了不同的输出,所以一些函数偏移了图形输出,让我们尝试注释GdipDrawLine,我们得到一个Ups,看起来很正常。所以GdipDrawLine偏移了一个GDI输出,我试着他们只偏移了一个GDI输出,而不是GDI+


所以我有一个问题。首先,它是正常的和有记录的吗?我查看了一个GdipDrawLine Microsoft帮助,发现没有关于偏移量的信息。第二,如何禁用这个偏移。< /P>我不使用Delphi,但是如果我把代码转换成C++,我就不能重现你的问题,它正常工作:我可以用Delphi Xe7确认结果,但是我不能解释它,否则混合GDI和GDI+设备上下文似乎是原因。如果移动行`GdipDeletePen(Pen);GdipDeleteGraphics(GDIDC);`在代码< >代码> >代码> >调用之前,结果是你想要的。事实上,GDI和GDI+之间的互操作性警告是我不使用Delphi,但是如果我把代码转换成C++,我就不能重现你的问题,它正常工作:我可以用Delphi XE7确认结果,但我不能解释它,除非混合GDI和GDI+设备上下文似乎是原因。如果移动行`GdipDeletePen(Pen);GdipDeleteGraphics(GDIDC);`在其他
Gdip…
调用之前,也就是
TextOut()
调用之前,结果就是您想要的。事实上,GDI和GDI+之间的互操作性警告是