⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bighint.pas

📁 delphi换肤控件2.0破解版,虽然版本不高但相当好用的。
💻 PAS
字号:
unit BigHint;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, CoolTrayIcon, TextTrayIcon, Menus, ExtCtrls, StdCtrls;

type
  TTiledHintWindow = class(THintWindow)
  private
    Bmp: TBitmap;
    procedure TileImage(Bitmap: TBitmap; R: TRect);
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

  TForm1 = class(TForm)
    TextTrayIcon1: TTextTrayIcon;
    PopupMenu1: TPopupMenu;
    Regular1: TMenuItem;
    Custom1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Timer1: TTimer;
    Timer2: TTimer;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure TextTrayIcon1MouseExit(Sender: TObject);
    procedure TextTrayIcon1MouseEnter(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure TextTrayIcon1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure Regular1Click(Sender: TObject);
    procedure Custom1Click(Sender: TObject);
  private
    HintWindow1: THintWindow;
    HintWindow2: TTiledHintWindow;
    CurrentHintWindow: THintWindow;
    LastMouse, LastHint: TPoint;
    Hint: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R 'images.res'}

{------------------------ TForm1 ----------------------}

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  HintWindow1 := THintWindow.Create(Self);
  HintWindow1.Color := clAqua;
  HintWindow1.Canvas.Font.Style := [fsBold];
  HintWindow1.Canvas.Font.Size := 10;

  HintWindow2 := TTiledHintWindow.Create(Self);
  HintWindow2.Canvas.Font.Color := clWhite;

  Timer1.Interval := Application.HintPause;
  Timer2.Interval := Application.HintHidePause;

  Hint := Hint + 'This is a BIG hint!'+#13;
  for I := 1 to 30 do
  begin
    Hint := Hint + 'abc - 0123456789 - 0123456789 - 0123456789 - 0123456789 - def';
    if I <> 30 then
      Hint := Hint + #13;
  end;

  Regular1Click(Self);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  HintWindow1.Free;
  HintWindow2.Free;
end;

procedure TForm1.TextTrayIcon1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  LastMouse.X := X;
  LastMouse.Y := Y;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  HintRect: TRect;
begin
  Timer1.Enabled := False;
  if (LastHint.X <> LastMouse.X) or (LastHint.Y <> LastMouse.Y) then
  begin
    if not Timer2.Enabled then
    begin
      HintRect := CurrentHintWindow.CalcHintRect(Screen.Width, Hint, nil);
      CurrentHintWindow.ActivateHint(Rect(LastMouse.X - HintRect.Right,
               LastMouse.Y - HintRect.Bottom, LastMouse.X, LastMouse.Y), Hint);
    end;
    LastHint.X := LastMouse.X;
    LastHint.Y := LastMouse.Y;
  end;
  Timer2.Enabled := true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  CurrentHintWindow.ReleaseHandle;
  Timer2.Enabled := False;
end;

procedure TForm1.Regular1Click(Sender: TObject);
begin
  Regular1.Checked := True;
  CurrentHintWindow := HintWindow1;
end;

procedure TForm1.Custom1Click(Sender: TObject);
begin
  Custom1.Checked := True;
  CurrentHintWindow := HintWindow2;
end;

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

procedure TForm1.TextTrayIcon1MouseExit(Sender: TObject);
begin
  CurrentHintWindow.ReleaseHandle;
  Timer1.Enabled := False;
  Timer2.Enabled := False;
  Timer1.Interval := Application.HintPause;
  Timer2.Interval := 5000;        // Seems to be the time a tooltip is open
end;

procedure TForm1.TextTrayIcon1MouseEnter(Sender: TObject);
begin
  if not Timer1.Enabled then
    Timer1.Enabled := True;
end;

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

{------------------ TTiledHintWindow ------------------}

constructor TTiledHintWindow.Create(AOwner: TComponent);
var
  H: HBITMAP;
begin
  inherited Create(AOwner);
  Bmp := TBitmap.Create;
  H := LoadBitmap(HINSTANCE, 'BACKGROUND');
  Bmp.Handle := H;
end;

destructor TTiledHintWindow.Destroy;
begin
  Bmp.Free;
  inherited Destroy;
end;

procedure TTiledHintWindow.Paint;
var
  R: TRect;
begin
  R := ClientRect;
  Inc(R.Left, 2);
  Inc(R.Top, 2);
  TileImage(Bmp, R);
  DrawText(Canvas.Handle, PChar(Caption), -1, R, DT_LEFT or DT_NOPREFIX or
           DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly);
end;

procedure TTiledHintWindow.TileImage(Bitmap: TBitmap; R: TRect);
var
  X, Y: Integer;
begin
  try
    for X := 0 to (R.Right-R.Left) div Bitmap.Width do
      for Y := 0 to (R.Bottom-R.Top) div Bitmap.Height do
        Canvas.Draw(X * Bitmap.Width, Y * Bitmap.Height, Bitmap);
  finally
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -