是一个关于以当前屏幕为画布画画的程序,添加有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.