Title: IDE's Hint Window
Question: How to change the look of Hint window in Delphi IDE/ in your application
Answer:
You would all have seen the hint window that appears when you focus
your cursor on the controls in the Component pages in the delphi ide,
(and also in the editor window in case of delphi5 and above).
Here is a piece of code that u can use to change the look and
feel of the hint window that appears in the delphi ide. You can use this
in your application as well.
unit SNHintWindow;
interface
uses
Windows, Messages, Classes, Graphics, Controls, Forms;
type
TSNHintWindow = class(THintWindow)
private
{ Private declarations }
FRegion : THandle;
procedure FreeCurrentRegion;
public
{ Public declarations }
destructor Destroy; override;
procedure ActivateHint(Rect: TRect; const AHint: string); override;
procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Hint Window', [TSNHintWindow]);
end;
destructor TSNHintWindow.Destroy;
begin
FreeCurrentRegion;
inherited Destroy;
end;
procedure TSNHintWindow.FreeCurrentRegion;
{Regions like other API objects should be freed when we have
finished using them. However we cannot delete a region that is
currently set in a window. Therefore in this method I set
the window region to 0 before deleting the region object}
begin
if FRegion 0 then begin
SetWindowRgn(Handle,0,True);
DeleteObject(FRegion);
FRegion := 0;
end;
end;
procedure TSNHintWindow.ActivateHint(Rect: TRect; const AHint: string);
begin
with Rect do
begin
Left := Left + Canvas.TextWidth('SUBHA'); {Can be any text}
Right := Right + Canvas.TextWidth('SUBHA'); {Can be any text}
Bottom := Bottom + Canvas.TextHeight('Girija'); {Can be any text}
Top := Top + Canvas.TextHeight('Giri'); {Can be any text}
end;
BoundsRect := Rect;
FreeCurrentRegion;
with BoundsRect do
FRegion := CreateRoundRectRgn(0,0,width, height,width,height);
if FRegion 0 then
SetWindowRgn(Handle, FRegion, True);
inherited ActivateHint(Rect,AHint);
end;
procedure TSNHintWindow.CreateParams(var Params: TCreateParams);
{Here we remove the border created on the windows API-level
when the window is created}
begin
inherited CreateParams(Params);
Params.Style := Params.Style and not WS_BORDER;
end;
procedure TSNHintWindow.Paint;
{This methid gets called by wm_paint handler. It is responsible
for painting the hint window}
var r : TRect;
begin
r := ClientRect; {get bounding rectangle}
Inc(r.Left,1); {move left side slightly}
Canvas.Brush.Color := clAqua; {Set background color and font color}
Canvas.Font.Color := clFuchsia;
{paint string in the center of the round rect}
DrawText(Canvas.handle, PChar(Caption), Length(Caption), R,
DT_NOPREFIX or DT_WORDBREAK or DT_CENTER or DT_VCENTER);
end;
initialization
Application.ShowHint := False; // destroy old hint window
HintWindowClass := TSNHintWindow; // assign new hint window
Application.ShowHint := True; // create new hint window
end.