为什么运行时在Chart1看不到在Chart1上画的对角线?(50分)

  • 主题发起人 主题发起人 YL_YAN
  • 开始时间 开始时间
Y

YL_YAN

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的代码想在Chart1上画一条从左上角到右下角的对角线,可为什么运行时在Chart1看不到这线?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, WinTypes,WinProcs, StdCtrls,
Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, TeeProcs, TeEngine, Chart;

type
TForm1 = class(TForm)
Chart1: TChart;
procedure FormCreate(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
var
Chart1: TChart;

begin
With Chart1,Canvas do
begin
MoveTo(Chart1.Left,Chart1.Top);
LineTo(Chart1.Left+Chart1.Width,Chart1.Top-Chart1.Height);
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
Chart1: TChart;

begin
With Chart1,Canvas do
begin
MoveTo(0,0);
LineTo(Chart1.Width-1,Chart1.Height-1);
end;
end;
 
改成 MoveTo(0,0); LineTo(Chart1.Width-1,Chart1.Height-1),运行时还是在Chart1看不到从左上角到右下角的对角线,这是否和Unit1.dfm(代码如下)有关?
object Form1: TForm1
Left = 192
Top = 107
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Chart1: TChart
Left = 32
Top = 40
Width = 440
Height = 258
AllowZoom = False
BackWall.Brush.Color = clWhite
BackWall.Brush.Style = bsClear
MarginBottom = 0
MarginLeft = 0
MarginRight = 0
MarginTop = 0
Title.AdjustFrame = False
Title.Text.Strings = (
'TChart')
AxisVisible = False
View3D = False
View3DWalls = False
TabOrder = 0
end
end
 
是哪一个变量或属性没设置好, 从而造成错误? 如果线条的颜色和背景颜色一样, 那肯定是看不到对角线的.
 
很有可能是点的坐标(x,y)没搞清楚,如果画出的线在运行的Chart1上非常小,就会看不见;如果画出的线在运行的Chart1图框之外,当然看不见。
 
LineTo 和 MoveTo 的坐标系是不是屏幕坐标系(原点在屏幕左上角, X正向为向右, Y正向为向下)?
 
这个问题我已解决(运行时在Chart1看不到这线肯定和Chart有关, 把Chart换成Image,只要左上角和右下角的坐标正确,
运行时在Image1上就可看到这从左上角到右下角的对角线), 现再提出一个问题(如下), 还是50分:

在main.pas有以下定义:
uses unit3;
type
TMainForm = class(TForm)
MainMenu: TMainMenu;
Image1: TImage; {在MainForm上的Image1画图}
Timer1: TTimer;
..........................
在unit3.pas中有过程如下:
procedure write_string(x,y:real;s:string);(* x,y:显示字符串的Image坐标; s:字符串内容 *)
var
R:TRect;
begin
R:=Rect(x,y-13,x+l,y+4); { 擦除屏幕内容 }
With MainForm.Image1,Canvas do Textout(round(x+5),round(y),s);{}
end;


[Error] Undeclared identifier: 'MainForm',怎么办?
 
unit3.pas
加上
uses mainform;
 
接受答案了.
 
后退
顶部