两个小问题,100分. ( 积分: 100 )

  • 主题发起人 主题发起人 silaszhe
  • 开始时间 开始时间
S

silaszhe

Unregistered / Unconfirmed
GUEST, unregistred user!
1.在窗体上用Canvas.Lineto和Moveto画线,怎么擦掉.如果用窗体颜色覆盖的话那么其他的控件也会看不见了,请问有没有兼得的办法.又能擦掉又不盖住其他的控件.
2.如果我在窗体上用程序创建了两个Shape控件,它们的OnClick事件是一样的,点击一下变成蓝色,那么我如何判断点的是哪个Shape?不是放俩控件,而是用程序生成的..(不知道描述的是否清楚.)
望解答..谢谢.
 
1.在窗体上用Canvas.Lineto和Moveto画线,怎么擦掉.如果用窗体颜色覆盖的话那么其他的控件也会看不见了,请问有没有兼得的办法.又能擦掉又不盖住其他的控件.
2.如果我在窗体上用程序创建了两个Shape控件,它们的OnClick事件是一样的,点击一下变成蓝色,那么我如何判断点的是哪个Shape?不是放俩控件,而是用程序生成的..(不知道描述的是否清楚.)
望解答..谢谢.
 
1.self.refresh;
2.onclick(sender) sender 就是标志是哪个控件发过来的事件
 
1.在窗体上画线,如果你想让你所画的线始终在窗体上,那么需要在刷屏事件上去画线。反过来,如果你想擦去哪条线,那么只要在刷屏的时候不画那条线就行了。
然后再手动让窗体刷屏。
2.你可以让你手动创建的两个Shape的Tag拥有不同的值,然后在OnClick事件中,其中的Sender参数就是你点击的那个Shape,可以根据Tag将他们区分开来
 
給你來個詳細的.(好像TShape沒有onclick事件啊)!

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Draw: TButton;
Clear: TButton;
create: TButton;
procedure DrawClick(Sender: TObject);
procedure ClearClick(Sender: TObject);
procedure createClick(Sender: TObject);
procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DrawClick(Sender: TObject);
begin
self.Canvas.MoveTo(20,10);
self.Canvas.LineTo(50,40);
end;

procedure TForm1.ClearClick(Sender: TObject);
var
T:TRect;
TL:TPoint;
BR:TPoint;
begin
TL.X:=20;
TL.Y:=10;
BR.X:=50;
BR.Y:=40;
T.TopLeft:=TL;
T.BottomRight:=BR;
self.Canvas.FillRect(T);
end;

procedure TForm1.createClick(Sender: TObject);
var
S:TShape;
begin
S:=TShape.Create(Self);
S.Top:=60;
S.Left:=40;
S.Tag:=1;
S.Parent:=Self;
S.OnMouseDown:=ShapeMouseDown;
S:=TShape.Create(Self);
S.Top:=80;
S.Left:=150;
S.Tag:=2;
S.Parent:=Self;
S.OnMouseDown:=ShapeMouseDown;
end;

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
case (Sender as TShape).Tag of
1:showmessage('This is the First Shape!');
2:showmessage('This is the Secend Shape!');
end;
end;

end.
 
1、Refresh;
2、
procedure TForm1.ShapeClick(Sender: TObject);
begin
//click shape之后要做的事情。。。
end;

var
shape: TShape;
begin
Shape := TShape.Create(Self);
Shape.Parent := Self;
Shape.Left := xx;
Shape.Top := xx;
Shape.OnClick := ShapeClick;
end;
 
1.用背景颜色重新在同样坐标再画一次线,就可以了.
2.上面说得很清楚了,我就不说了
 
多谢各位解释..楼上的,也给你20.
 
多人接受答案了。
 
后退
顶部