新手想大家问一个问题!为啥这条直线画不出来!(在线等!)

win20000 2004-01-23 11:26:06
我在onmousedown下写!
Var
a,b:TPoint;
begin
form1.Image1.Canvas.MoveTo(a.X,a.Y);
form1.Image1.Canvas.LineTo(b.X,b.Y);
end;
可就是画不出直线来!
...全文
48 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yayx 2004-01-23
  • 打赏
  • 举报
回复
看着!!!!!!!!!
书中出现这种代码真是不像话!!!!

onmousedown:
form1.Image1.Canvas.MoveTo(X,Y);

onmouseup:
form1.Image1.Canvas.LineTo(x,y);

最简单的就是这样了
Eastunfail 2004-01-23
  • 打赏
  • 举报
回复
你看的什么书???

很多书的作者都是不负责人的.看了还不如不看
win20000 2004-01-23
  • 打赏
  • 举报
回复
就为了画一直线我年前想到年后!
win20000 2004-01-23
  • 打赏
  • 举报
回复
ilovekof
说的对就是要随意画出直线!!!!
win20000 2004-01-23
  • 打赏
  • 举报
回复
我是想做一个类似画图一样的程序!
ilovekof 2004-01-23
  • 打赏
  • 举报
回复
赋了初值那还有什么意义,不能做到鼠标点到哪儿画到哪儿了。
应该在MouseDown里面记下鼠标位置,并设置标志位,然后在Mouseup里面检查标志位,如果为真,就绘制。
win20000 2004-01-23
  • 打赏
  • 举报
回复
我是提问的人
书上就是这样写的!
fsybaby 2004-01-23
  • 打赏
  • 举报
回复
同意Eastunfail,你都未对a,b付初值,
我试了,添加一段:a.X :=10;
a.Y:=10;
b.X:=100;
b.Y:=100;
肯定好使!!
Eastunfail 2004-01-23
  • 打赏
  • 举报
回复
寒... a和b的值未定义
flyforlove 2004-01-23
  • 打赏
  • 举报
回复
我没用过delphi画图,瞎作了一个,你参考一下吧。

var
Form1: TForm1;
md:boolean;
implementation

{$R *.dfm}

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if md then
form1.Image1.Canvas.LineTo(x,y);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
md:=true;
form1.Image1.Canvas.MoveTo(x,y);
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
md:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
md:=false;
end;

end.
myblind 2004-01-23
  • 打赏
  • 举报
回复
上面的代码不能吗?
delphi的实例:
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
MoveTo(0, 0);
LineTo(ClientWidth, ClientHeight);
MoveTo(0, ClientHeight);
LineTo(ClientWidth, 0);
end;
end;

我用的下面的(win32api):
var
h: hdc;

h := getdc(panel1.Handle);
MoveToEx(h, x, y, nil);
LineTo(h, x, y);
自己设置x,y
SydPink 2004-01-23
  • 打赏
  • 举报
回复
对了..还要个BOOLEAN变量,为真就画.在MOUSEDOWN中给真,MOUSEUP操作完后给假.MOUSEMOVE中判断,真就操作,OK
SydPink 2004-01-23
  • 打赏
  • 举报
回复
form1
..........
private
oldP,newP:TPoint;
......
procedre form1.onmousedown()...
begin
oldP:=Point(X,Y);
end;
procedure form1.onmouseMOVE()..
var
tempp:TPoint;
begin
tempP:=Point(X,Y);
with form1.canvas do begin
pen.mode;=ps_not;//这个自己看书,忘记是什么了.就是用反色笔画;
moveto(oldp);
lineto(tempp);//抹去旧的线;
pen.mode;=ps_not;//这个自己看书,忘记是什么了.就是用反色笔画;
moveto(oldp);
lineto(tempp);//这个是新的线;

end;
end;
procedure form1.onmouseup...
begin
newp:=point(x,y);
with form1.canvas do begin
pen.color:=youColor;
moveto(oldp);
lineTo(newP);
end;
end;

线是拉出来的......具体代码调试着看.我临时写的.
win20000 2004-01-23
  • 打赏
  • 举报
回复
像画图板一样画出一条直线谁能教我
像画图板一样画出一条直线谁能教我
像画图板一样画出一条直线谁能教我
像画图板一样画出一条直线谁能教我
win20000 2004-01-23
  • 打赏
  • 举报
回复
就是能看到过程
win20000 2004-01-23
  • 打赏
  • 举报
回复
可是书上的例子能拉出直线来!
而不是在两点点出直线来!

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧