屏幕关灯

https://files.cnblogs.com/xe2011/ScreenLight_pas.rar

 

窗体文件

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 220
  ClientWidth = 447
  Color = clBtnFace
  TransparentColor = True
  TransparentColorValue = clPurple
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  FormStyle = fsStayOnTop
  OldCreateOrder = False
  PopupMenu = PopupMenu1
  OnCloseQuery = FormCloseQuery
  OnCreate = FormCreate
  OnMouseDown = FormMouseDown
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13
  object Panel1: TPanel
    AlignWithMargins = True
    Left = 32
    Top = 47
    Width = 345
    Height = 74
    BevelOuter = bvNone
    Caption = 'Panel1'
    ParentBackground = False
    ShowCaption = False
    TabOrder = 0
    OnMouseDown = Panel1MouseDown
    OnMouseLeave = Panel1MouseLeave
    OnMouseMove = Panel1MouseMove
    DesignSize = (
      345
      74)
    object Panel2: TPanel
      Left = 6
      Top = 6
      Width = 334
      Height = 63
      Anchors = [akLeft, akTop, akRight, akBottom]
      BevelOuter = bvNone
      Color = clPurple
      ParentBackground = False
      TabOrder = 0
    end
  end
  object TrayIcon1: TTrayIcon
    PopupMenu = PopupMenu1
    Visible = True
    OnClick = Hide1Click
    Left = 296
    Top = 160
  end
  object PopupMenu1: TPopupMenu
    Left = 344
    Top = 160
    object Hide1: TMenuItem
      Caption = #38544#34255'(&H)'
      ShortCut = 32881
      OnClick = Hide1Click
    end
    object N2: TMenuItem
      Caption = '-'
    end
    object Color1: TMenuItem
      Caption = #39068#33394'(&C)'
      OnClick = Color1Click
    end
    object Transparent1: TMenuItem
      AutoCheck = True
      Caption = #21322#36879#26126'(&T)'
    end
    object Reset1: TMenuItem
      Caption = #37325#35774'(&R)'
      OnClick = Reset1Click
    end
    object N1: TMenuItem
      Caption = '-'
    end
    object Exit1: TMenuItem
      Caption = #36864#20986'(&E)'
      ShortCut = 16465
      OnClick = Exit1Click
    end
  end
end

 

 

 

Unit1单元

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    TrayIcon1: TTrayIcon;
    PopupMenu1: TPopupMenu;
    Hide1: TMenuItem;
    N2: TMenuItem;
    Reset1: TMenuItem;
    Color1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Transparent1: TMenuItem;
    procedure Hide1Click(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Reset1Click(Sender: TObject);
    procedure Color1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure Panel1MouseLeave(Sender: TObject);
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    procedure SaveConfig(fileName: string);
    procedure LoadConfig(fileName: string);
    procedure HideShell_TrayWnd;
    procedure ShowShell_TrayWnd;

    procedure HotKeyDown(var Msg: TMessage);
    message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  HotKeyId: Integer;

implementation

uses CtrlDesign;
{$R *.dfm}

procedure TForm1.Color1Click(Sender: TObject);
begin
  with TColorDialog.Create(nil) do
  begin
    if Execute then
    begin
      Form1.Color := Color;
      Panel1.Color := Color;
    end;
  end;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.HotKeyDown(var Msg: TMessage);
begin
  if (Msg.LparamLo = MOD_ALT) and (Msg.LParamHi = VK_F2) then
  begin
    Hide1.Click;
  end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  SaveConfig('Screen.ini');
  ShowShell_TrayWnd;

  UnRegisterHotKey(Handle, HotKeyId); // 注销HotKey, 释放资源。
  DeleteAtom(HotKeyId);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Panel1
  //

  LoadConfig('Screen.ini');
  Panel1.Color := Form1.Color;
  Panel1.BevelInner := BvNone;
  // Form1
  BorderStyle := BsNone;
  FormStyle := fsStayOnTop;
  WindowState := wsMaximized;

  HotKeyId := GlobalAddAtom('MyHotKey') - $C000;
  RegisterHotKey(Handle, HotKeyId, MOD_ALT, VK_F2); { alt+F2 }
  HideShell_TrayWnd;

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    if Transparent1.Checked then
    begin
      Form1.AlphaBlend := True;
      Form1.AlphaBlendValue := 120;
    end;

  ReleaseCapture;
  SendMessage(Panel1.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

  Form1.AlphaBlend := False;
  Form1.AlphaBlendValue := 255;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
end;

procedure TForm1.Hide1Click(Sender: TObject);
begin
  if Hide1.Caption = '隐藏(&H)' then
  begin
    Hide;
    Hide1.Caption := '显示(&S)';
    ShowShell_TrayWnd;
  end
  else
  begin
    Show;
    Hide1.Caption := '隐藏(&H)';
    HideShell_TrayWnd;
  end;
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  CtrlCursorMouseDown(Panel1, Button, Shift, X, Y);
end;

procedure TForm1.Panel1MouseLeave(Sender: TObject);
begin
  Panel1.Color := Form1.Color;
  Panel1.BevelInner := BvNone;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  CtrlCursorMouseMove(Panel1, Shift, X, Y);
  Panel1.Color := clSilver;
  Panel1.BevelInner := bvRaised;
end;

procedure TForm1.Reset1Click(Sender: TObject);
begin
  Panel1.Width := 345;
  Panel1.Height := 74;
  Panel1.Left := ClientWidth div 2 - Panel1.Width div 2;
  Panel1.Top := ClientHeight div 2 - Panel1.Height div 2;
  Form1.Color := clBlack;
end;

procedure TForm1.SaveConfig(fileName: string);
var
  f: string;
begin
  f := ExtractFilePath(Application.ExeName) + fileName;
  with TIniFile.Create(f) do
  begin
    WriteString('MainForm', 'Color', ColorToString(Form1.Color));
    WriteInteger('MainForm', 'PanelLeft', Panel1.Left);
    WriteInteger('MainForm', 'PanelTop', Panel1.Top);
    WriteInteger('MainForm', 'PanelWidth', Panel1.Width);
    WriteInteger('MainForm', 'PanelHeight', Panel1.Height);
  end;
end;

procedure TForm1.LoadConfig(fileName: string);
var
  s: string;
  f: string;
begin
  f := ExtractFilePath(Application.ExeName) + fileName;
  with TIniFile.Create(f) do
  begin
    s := ReadString('MainForm', 'Color', 'clBlack');
    Form1.Color := StringToColor(s);
    // Panel1.COLOR := StringToColor(s);

    Panel1.Left := ReadInteger('MainForm', 'PanelLeft', 0);
    Panel1.Top := ReadInteger('MainForm', 'PanelTop', 0);
    Panel1.Width := ReadInteger('MainForm', 'PanelWidth', Panel1.Width);
    Panel1.Height := ReadInteger('MainForm', 'PanelHeight', Panel1.Height);
  end;
end;

procedure TForm1.HideShell_TrayWnd;
var
  h: HWND;
begin
  h := FindWindow('Shell_TrayWnd', nil);
  if IsWindowVisible(h) then
    ShowWindow(h, SW_HIDE)
end;

procedure TForm1.ShowShell_TrayWnd;
var
  h: HWND;
begin
  h := FindWindow('Shell_TrayWnd', nil);
  if not IsWindowVisible(h) then
    ShowWindow(h, SW_SHOW);
end;

end.

 

其他 单元

unit CtrlDesign;


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

procedure CtrlCursorMouseDown(Ctrl: TWinControl; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
procedure CtrlCursorMouseMove(Ctrl: TWinControl;Shift: TShiftState;X, Y: Integer);


implementation

//CtrlMouseMove(Panel1, Shift, X, Y);
procedure CtrlCursorMouseMove(Ctrl: TWinControl; Shift: TShiftState;X, Y: Integer);
begin
   with Ctrl do
   begin
      if (X >= 0) and (X <= 3) then
      begin
        if (Y >= 0) and (Y <= 3)                then  Cursor := crSizeNWSE;
        if (Y > 3) and (Y < Height - 3)         then  Cursor := cRsizewe;
        if (Y >= Height - 3) and (Y <= Height)  then  Cursor := crSizeNESW;
      end
      else if (X > 3) and (X < Width - 3) then
      begin
        if (Y >= 0) and (Y <= 3)                then  Cursor := crSizeNS;
        if (Y > 3) and (Y < Height - 3)         then  Cursor := cRarrow;
        if (Y >= Height - 3) and (Y <= Width)   then  Cursor := crSizeNS;
      end
      else if (X >= Width - 3) and (X <= Width) then
      begin
        if (Y >= 0) and (Y <= 3)                then  Cursor := crSizeNESW;
        if (Y > 3) and (Y < Height - 3)         then  Cursor := cRsizewe;
        if (Y >= Height - 3) and (Y <= Width)   then  Cursor := crSizeNWSE;
      end;
   end;
end;


// CtrlCursorMouseDown(Panel1,Button,Shift,X,Y);
procedure CtrlCursorMouseDown(Ctrl: TWinControl; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
var
  WParam: Integer;
begin
  with Ctrl do
  begin
    if (X >= 0) and (X <= 3) then
    begin
      if (Y >= 0) and (Y <= 3)                 then  WParam:=$F004;
      if (Y > 3)  and (Y < Height - 3)         then  WParam:=$F001;
      if (Y >= Height - 3) and (Y <= Height)   then  WParam:=$F007;
    end
    else if (X > 3) and (X < Width - 3) then
    begin
      if (Y >= 0) and (Y <= 3)                 then  WParam:=$F003;
      if (Y > 3) and (Y < Height - 3)          then  WParam:=$F012;
      if (Y >= Height - 3) and (Y <= Width)    then  WParam:=$F006;
    end
    else if (X >= Width - 3) and (X <= Width)  then
    begin
      if (Y >= 0) and (Y <= 3)                 then  WParam:=$F005;
      if (Y > 3) and (Y < Height - 3)          then  WParam:=$F002;
      if (Y >= Height - 3) and (Y <= Width)    then  WParam:=$F008;
    end;
   ReleaseCapture;
   SendMessage(Handle,WM_SYSCOMMAND,WParam,0);
  end;
end;


end.

 

posted @ 2013-11-16 18:43  XE2011  阅读(377)  评论(0编辑  收藏  举报