是一个关于以当前屏幕为画布画画的程序,添加有popmenu的,可不知为什么右击鼠标不起作用,还有初始化的背景也不是桌面...看了半天都不明白...unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,StdCtrls,ExtCtrls;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N6: TMenuItem;
N11: TMenuItem;
N31: TMenuItem;
N51: TMenuItem;
N101: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
procedure MenuExitClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ColorClick(Sender: TObject);
procedure WidthClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormPaint(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
FclColor: TColor;
FnWidth: integer;
bStartDraw: boolean;
ptStart,ptEnd: TPoint;
rectWork: TRect;
CanvasWork: TCanvas;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MenuExitClick(Sender: TObject);
begin
Close;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,0);
CanvasWork.Free;
end;procedure TForm1.FormCreate(Sender: TObject);var
ScreenCanvas: TCanvas;
ScreenBitmap: TBitmap;
dc: HDC;
bmpWork: HBITMAP;
dcWork: HDC;
begin
FnWidth:= 1;
FclColor:= clRed;
Sleep(300);
rectWork:= Rect(0,0,Screen.Width,Screen.Height);
ScreenCanvas:= TCanvas.Create;
CanvasWork:= TCanvas.Create;
ScreenBitmap:= TBitmap.Create;
ScreenBitmap.Width:= Screen.Width;
ScreenBitmap.Height:= Screen.Height;
dc:= GetDC(0);
ScreenCanvas.Handle:= dc;
ScreenBitmap.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),ScreenCanvas,
Rect(0,0,Screen.Width,Screen.Height));
dcWork:= CreateCompatibleDC(Canvas.Handle);
bmpWork:= CreateCompatibleBitmap(Canvas.Handle,Screen.Width,Screen.Height);
SelectObject(dcWork,bmpWork);
SelectPalette(dcWork,ScreenBitmap.Palette,false);
CanvasWork.Handle:= dcWork;
CanvasWork.Pen.Width:= FnWidth;
CanvasWork.Pen.Color:= FclColor;
RealizePalette(CanvasWork.Handle);
Canvas.CopyRect(rectWork,CanvasWork,rectWork);
ReleaseDC(0,dc);
ScreenBitmap.Free;
ScreenCanvas.Free;
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,nil,0);
end;procedure TForm1.ColorClick(Sender: TObject);
begin
TMenuItem(Sender).Checked:= true;
case TMenuItem(Sender).Tag of
1001: FclColor:= clRed;
1002: FclColor:= clGreen;
1003: FclColor:= clBlue;
1004: FclColor:= clYellow;
1005: FclColor:= clBlack;
1006: FclColor:= clFuchsia;
end;
CanvasWork.Pen.Color:= FclColor;
end;procedure TForm1.WidthClick(Sender: TObject);
begin
TMenuItem(Sender).Checked:= true;
case TMenuItem(Sender).Tag of
1101: FnWidth:= 1;
1102: FnWidth:= 3;
1103: FnWidth:= 5;
1104: FnWidth:= 10;
end;
CanvasWork.Pen.Width:= FnWidth;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button in [mbLeft] then
begin
bStartDraw:= true;
ptStart.X:= x;
ptStart.Y:= y;
end;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if bStartDraw= true then
begin
ptEnd.X:= x;
ptEnd.y:= y;
CanvasWork.MoveTo(ptStart.x,ptStart.y);
CanvasWork.LineTo(ptEnd.X, ptEnd.y);
ptStart:= ptEnd;
RealizePalette(CanvasWork.Handle);
Canvas.CopyRect(rectWork,CanvasWork,rectWork);
end;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
RealizePalette(CanvasWork.Handle);
Canvas.CopyRect(rectWork,CanvasWork,rectWork);
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button in [mbLeft] then
bStartDraw:= false;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,StdCtrls,ExtCtrls;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N6: TMenuItem;
N11: TMenuItem;
N31: TMenuItem;
N51: TMenuItem;
N101: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
procedure MenuExitClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ColorClick(Sender: TObject);
procedure WidthClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormPaint(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
FclColor: TColor;
FnWidth: integer;
bStartDraw: boolean;
ptStart,ptEnd: TPoint;
rectWork: TRect;
CanvasWork: TCanvas;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MenuExitClick(Sender: TObject);
begin
Close;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,0);
CanvasWork.Free;
end;procedure TForm1.FormCreate(Sender: TObject);var
ScreenCanvas: TCanvas;
ScreenBitmap: TBitmap;
dc: HDC;
bmpWork: HBITMAP;
dcWork: HDC;
begin
FnWidth:= 1;
FclColor:= clRed;
Sleep(300);
rectWork:= Rect(0,0,Screen.Width,Screen.Height);
ScreenCanvas:= TCanvas.Create;
CanvasWork:= TCanvas.Create;
ScreenBitmap:= TBitmap.Create;
ScreenBitmap.Width:= Screen.Width;
ScreenBitmap.Height:= Screen.Height;
dc:= GetDC(0);
ScreenCanvas.Handle:= dc;
ScreenBitmap.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),ScreenCanvas,
Rect(0,0,Screen.Width,Screen.Height));
dcWork:= CreateCompatibleDC(Canvas.Handle);
bmpWork:= CreateCompatibleBitmap(Canvas.Handle,Screen.Width,Screen.Height);
SelectObject(dcWork,bmpWork);
SelectPalette(dcWork,ScreenBitmap.Palette,false);
CanvasWork.Handle:= dcWork;
CanvasWork.Pen.Width:= FnWidth;
CanvasWork.Pen.Color:= FclColor;
RealizePalette(CanvasWork.Handle);
Canvas.CopyRect(rectWork,CanvasWork,rectWork);
ReleaseDC(0,dc);
ScreenBitmap.Free;
ScreenCanvas.Free;
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,nil,0);
end;procedure TForm1.ColorClick(Sender: TObject);
begin
TMenuItem(Sender).Checked:= true;
case TMenuItem(Sender).Tag of
1001: FclColor:= clRed;
1002: FclColor:= clGreen;
1003: FclColor:= clBlue;
1004: FclColor:= clYellow;
1005: FclColor:= clBlack;
1006: FclColor:= clFuchsia;
end;
CanvasWork.Pen.Color:= FclColor;
end;procedure TForm1.WidthClick(Sender: TObject);
begin
TMenuItem(Sender).Checked:= true;
case TMenuItem(Sender).Tag of
1101: FnWidth:= 1;
1102: FnWidth:= 3;
1103: FnWidth:= 5;
1104: FnWidth:= 10;
end;
CanvasWork.Pen.Width:= FnWidth;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button in [mbLeft] then
begin
bStartDraw:= true;
ptStart.X:= x;
ptStart.Y:= y;
end;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if bStartDraw= true then
begin
ptEnd.X:= x;
ptEnd.y:= y;
CanvasWork.MoveTo(ptStart.x,ptStart.y);
CanvasWork.LineTo(ptEnd.X, ptEnd.y);
ptStart:= ptEnd;
RealizePalette(CanvasWork.Handle);
Canvas.CopyRect(rectWork,CanvasWork,rectWork);
end;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
RealizePalette(CanvasWork.Handle);
Canvas.CopyRect(rectWork,CanvasWork,rectWork);
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button in [mbLeft] then
bStartDraw:= false;
end;end.
不过快捷菜单可以这么设:
form的PopupMenu设为PopupMenu1