1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| procedure TfrmGen.ApplicationEventsHint(Sender: TObject); //Shai
var
i: Integer;
PM: TPoint;
HandleControl: HWND;
lpRes: array[0..255] of Char;
MenuRect: TRect;
HintForm: THintWindow;
HintRect: TRect;
begin
for i := ComponentCount - 1 downto 0 do
begin
if Components[i] is THintWindow then
begin
THintWindow(Components[i]).ReleaseHandle();
Components[i].Free();
end;
end;
if Application.Hint <> '' then
begin
if GetCursorPos(PM) then
begin
HandleControl := WindowFromPoint(PM);
if HandleControl > 0 then
begin
if GetClassName(HandleControl, lpRes, SizeOf(lpRes))<>0 then
begin
if SameText(StrPas(lpRes), '#32768') then
begin
if GetWindowRect(HandleControl, MenuRect) then
begin
MenuRect.Left := MenuRect.Right;
HintForm := THintWindow.Create(Self);
HintForm.Color := clYellow;
HintRect := HintForm.CalcHintRect(Screen.Width div 2, Application.Hint, nil);
// HintForm.ActivateHint(Rect(MenuRect.Left + 4, PM.y, MenuRect.Left + 4 + HintRect.Right - HintRect.Left, PM.y + HintRect.Bottom - HintRect.Top), Application.Hint);
// avec la ligne c-dessus le Hint se trouve entièrement caché sous le paneau du sous-menu lorsqu'il en existe un.
// Avec la ligne suivante le Hint est au moins visible dans la largeur du panneau du MenuItem coresspondant.
HintForm.ActivateHint(Rect(PM.x, PM.y+20, PM.x+HintRect.Right-HintRect.Left, PM.y + 20 + HintRect.Bottom - HintRect.Top), Application.Hint);
end;
end;
end;
end;
end;
end;
end;
procedure TfrmGen.FormCreate(Sender: TObject);
begin ...
Application.onHint:=ApplicationEventsHint;
Application.ShowHint:=true;
ShowHint:=true;
Application.HintHidePause:=10000;
Application.HintColor:=clYellow;
....
end; |
Partager