坐标系不见了(100分)

  • 主题发起人 主题发起人 highsnow
  • 开始时间 开始时间
H

highsnow

Unregistered / Unconfirmed
GUEST, unregistred user!
程序的目的是:窗体改变大小时自动修改坐标系。但当窗体便大时,坐标系画不全,窗体变小可以。为什么?

unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
procedure DrawCoordinate(CHeight,CWidth: Integer);
procedure ClearCanvas;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.DrawCoordinate(CHeight,CWidth: Integer);
var
x : Integer;
y : Integer;
begin
Canvas.Pen.Width:=1;
Canvas.Pen.Color := clRed;
x := 0;
y := Trunc(CHeight/2)-10;
Canvas.MoveTo(x,y);
x := CWidth;
Canvas.LineTo(x, y);

x := 0;
y := Trunc(CHeight/2);
Canvas.MoveTo(x,y);
x := CWidth;
Canvas.LineTo(x, y);

x := 0;
y := CHeight-10;
Canvas.MoveTo(x,y);
x := CWidth;
Canvas.LineTo(x, y);

x := CWidth-30;
y := 0;
Canvas.MoveTo(x,y);
y := CHeight;
Canvas.LineTo(x, y);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DrawCoordinate(Self.ClientHeight,Self.ClientWidth);
end;

procedure TForm1.ClearCanvas;
begin
with Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clWhite;
FillRect(ClientRect);
Canvas.Refresh;
end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
ClearCanvas;
DrawCoordinate(Self.ClientHeight,Self.ClientWidth);
end;

end.
 
我测试了你的代码,一起正常。
我的环境是xp ,D7
 
y := Trunc(CHeight/2)-10;
用float型精确计算,最后再转成整形,(我用C++)
 
投机取巧,Timer1.Interval=5:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
X,Y:Integer;
procedure DrawCoordinate(CHeight,CWidth: Integer);
procedure ClearCanvas;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.DrawCoordinate(CHeight,CWidth: Integer);
var
x : Integer;
y : Integer;
begin
Canvas.Pen.Width:=1;
Canvas.Pen.Color := clRed;
x := 0;
y := Trunc(CHeight/2)-10;
Canvas.MoveTo(x,y);
x := CWidth;
Canvas.LineTo(x, y);

x := 0;
y := Trunc(CHeight/2);
Canvas.MoveTo(x,y);
x := CWidth;
Canvas.LineTo(x, y);

x := 0;
y := CHeight-10;
Canvas.MoveTo(x,y);
x := CWidth;
Canvas.LineTo(x, y);

x := CWidth-30;
y := 0;
Canvas.MoveTo(x,y);
y := CHeight;
Canvas.LineTo(x, y);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DrawCoordinate(Self.ClientHeight,Self.ClientWidth);
end;

procedure TForm1.ClearCanvas;
begin
with Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clWhite;
FillRect(ClientRect);
Canvas.Refresh;
end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
ClearCanvas;
DrawCoordinate(Self.ClientHeight,Self.ClientWidth);
Timer1.Enabled:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
X:=Self.ClientWidth;
Y:=Self.ClientHeight;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (X<>Self.ClientWidth) or (Y<>Self.ClientHeight) then begin
X:=Self.ClientWidth;
Y:=Self.ClientHeight;
end else begin
ClearCanvas;
DrawCoordinate(Self.ClientHeight,Self.ClientWidth);
Timer1.Enabled:=False;
end;
end;

end.
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
588
import
I
I
回复
0
查看
627
import
I
I
回复
0
查看
733
import
I
后退
顶部