创建一个Canvas对象。然后让它的control属性指向Panel,在canvas表面画就行了
解决方案 »
- CreateThread中怎么把数据写入VCL中,好像有时候报错
- stringgrid如何设置某列不能获得焦点
- 让程序启动时装载启动画面同时判断数据库连接是否正常,如果连不上显示数据库设置窗体,怎样写代码.
- 真把我搞晕了,简单但奇怪的问题!
- 请教备份问题!我想将一个access数据库让作备份和数据导入!
- 求助有无DELPHI5下的SMTP发送功能的控件或方法
- 任何控制FORM的外观风格。让它不是立体的。还有。。
- 如何用Delphi操作远地的XML
- 怎样向指定的文件写记录,查找记录?
- 关于Webaction的pathinfo属性的问题:(
- 100分,请各位朋友帮忙,adotable这个mastersource和masterfields属性挡住我了
- 请问怎么获取用adotable1.filte筛选的每条记录的数据?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
private
{ Private declarations }
public
{ Public declarations }
procedure WMPaint(var Message: TWMPaint);message WM_PAINT;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WMPaint(var Message: TWMPaint);
var
c:TCanvas;
begin
c:=TControlCanvas.Create;
TControlCanvas(c).Control:=Panel1;
c.Pen.Color :=clBlue;
c.MoveTo(10,10);
c.LineTo(100,10);
c.LineTo(100,100);
c.LineTo(10,100);
c.LineTo(10,10);
c.Free;
end;end.
三个重要的属性:color,style,bitmap
color不用说了,style是形状,默认为bsSolid。bitmap指定一个位图,可以自定义图案为刷子背景。
但还是要以Tcanvas为画布
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
Drawing : boolean;
Origin, MovePt: TPoint; TempHandle: HWND;
TempCanvas: TCanvas;
procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
begin
with TempCanvas do
begin
Pen.Mode := AMode;
Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X,BottomRight.Y)
end;
end;procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Drawing := True;
TempCanvas := TCanvas.Create;
TempHandle := TPanel(Sender).Handle;
TempCanvas.Handle := GetWindowDC(TempHandle);
TempCanvas.MoveTo(X, Y);
Origin := Point(X, Y);
MovePt := Origin;
end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Drawing then
begin
with TempCanvas do
begin
Brush.Style := bsClear;
Pen.Color := clWhite;
Pen.Color := Clblack;
Pen.Style := psDot;
DrawShape(Origin, MovePt, pmNotXor);
MovePt := Point(X, Y);
DrawShape(Origin, MovePt, pmNotXor);
end;
end;
end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
iLoop : integer;
procedure SwapPoint(Var OP, LP : TPoint);
var
TempP : TPoint;
begin
if Op.y < Lp.y then
begin
TempP := Op;
Op := Lp;
Lp := TempP;
end;
end;
begin
if Drawing then
begin
with TempCanvas do
begin
DrawShape(Origin, Point(X, Y), pmNotXor);
Drawing := False;
TempHandle := 0;
ReleaseDC(0, TempHandle);
if TempCanvas <> nil then
FreeAndNil(TempCanvas);
MovePt := Point(X, Y);
with Panel1 do
begin
SwapPoint(Origin,MovePt);
For iLoop := 0 to ControlCount -1 do
begin
With Controls[iLoop] do
begin
if (Movept.y < Top + Height) and (Movept.x< Left + Width) then
begin
//加入您想要的操作
Showmessage(inttostr(top)+','+inttostr(Orign.y)+''+inttostr(Movept.y))
end;
end;
end;
end;
end;
end;
end;end.