我编了一段程序,后来需要在某个按钮的onclick事件中画出一段直线。但是同样一段画直线的代码,如果直接在form的onpaint事件中可以出现直线,如果放在button的onclick事件中就没有直线出来。
我另外新建一个project,就可以在onclick事件中把直线画出来。是因为我原来程序中有的form的oncreat或者onpaint事件对在onclick事件画直线造成了影响吗?
请问是怎么回事呢?实在想不明白。
我另外新建一个project,就可以在onclick事件中把直线画出来。是因为我原来程序中有的form的oncreat或者onpaint事件对在onclick事件画直线造成了影响吗?
请问是怎么回事呢?实在想不明白。
解决方案 »
- 大家帮帮忙呀.
- delphi中怎么嵌入 XML
- 一个新手的问题——AdoQuery组件使用Insert命令的疑问??
- 请教byte数组的异或校验和
- 我现正在做一个c/s模式的考试系统,有没有人做过有关这方面的东西呀?急救!!!!!
- 怎样创建对象属性?怎样设置属性的默认值?
- 帮忙!!!! 服务器SQL sever2000连接不上......
- 怎样将表(TABLE)和dbgrid的数据保存为EXCEL文件
- 屏蔽Delphi的所有错误信息!
- 紧急求救!!!!!!!!!!!!!!!!!!!!!
- 请问dbedit+ADOQuery保存是\时,怎样过滤空格?
- rxRichEdit是否可以代码赋值字符串并且加上格式?
你在新的项目中画的线,不在paint 中画的, 用别的窗口挡一下,线也会看不到的,
我注释掉onpaint的代码,还是画不出直线。
稍微复杂一点的方法是做一个单独的画图函数,OnPaint和Button的OnClick都调用它。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Label3: TLabel;
Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
FPaintList: TList;
{ Private declarations }
public
{ Public declarations }
end;
type
PPaintRecord =^TPaintRecord;
TPaintRecord=record
sX,sY :Integer;
eX,eY :Integer;
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
FPaintList:=TList.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
while FPaintList.Count >0 do
begin
Dispose(PPaintRecord(FPaintList[0]));
FPaintList.Delete(0);
end;
FPaintList.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
var p:PPaintRecord;
begin
New(P);
P.sX :=StrToInt(Edit1.Text);
P.sY :=StrToInt(Edit2.Text);
P.eX :=StrToInt(Edit3.Text);
P.eY :=StrToInt(Edit4.Text);
FPaintList.Add(P);
self.Repaint;
end;procedure TForm1.FormPaint(Sender: TObject);
var i:Integer;
begin
for i:=0 to FPaintList.Count-1 do
begin
self.Canvas.MoveTo(PPaintRecord(FPaintList[i]).sX,PPaintRecord(FPaintList[i]).sY);
self.Canvas.LineTo(PPaintRecord(FPaintList[i]).eX,PPaintRecord(FPaintList[i]).eY);
end;end;end.