BigHint.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:5k
- 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.