代码如下。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 运行是显示如下然后将窗体拉大一些,发现颜色变了,并且并没有画出全部的矩形
请问是什么原因造成的问题??
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 运行是显示如下然后将窗体拉大一些,发现颜色变了,并且并没有画出全部的矩形
请问是什么原因造成的问题??
procedure TForm1.FormPaint(Sender: TObject);
begin
FGPG:=FGPG.FromHWND(Self.Handle); //加了这一句
FGPG.DrawRectangle(FGPPen,10,10,300,300);
end;但问题是, 这样的话会创建很多的对象。不应该有这样的问题啊。
begin
///FGPG:=TGPGraphics.Create(Self.Handle,False); 这句根本就不需要
FGPPen:=TGPPen.Create(MakeColor(100,255,0,0),3);
end;可以直接使用,不用创建,但看源代码FromHWND不是类方法啊。真搞明白它内部怎么实现的??