代码如下。unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,GDIPAPI,GDIPOBJ;type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    FGPG:TGPGraphics;
    FGPPen:TGPPen;
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
  FGPG:=TGPGraphics.Create(Self.Handle,False);
  FGPPen:=TGPPen.Create(MakeColor(100,255,0,0),3);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FGPG.Free;
  FGPPen.Free;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
  FGPG.DrawRectangle(FGPPen,10,10,300,300);
end;end.将窗体大小设置为200X200 运行是显示如下然后将窗体拉大一些,发现颜色变了,并且并没有画出全部的矩形
请问是什么原因造成的问题??

解决方案 »

  1.   

    找到一个解决办法
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      FGPG:=FGPG.FromHWND(Self.Handle); //加了这一句
      FGPG.DrawRectangle(FGPPen,10,10,300,300);
    end;但问题是, 这样的话会创建很多的对象。不应该有这样的问题啊。
      

  2.   

    更奇怪的事情。procedure TForm1.FormShow(Sender: TObject);
    begin
      ///FGPG:=TGPGraphics.Create(Self.Handle,False); 这句根本就不需要
      FGPPen:=TGPPen.Create(MakeColor(100,255,0,0),3);
    end;可以直接使用,不用创建,但看源代码FromHWND不是类方法啊。真搞明白它内部怎么实现的??