Пацаны! Помогите пожалуйста скрыть (в лучшем случае заменить) системные тултипы (маленькие всплывающие подсказки "Закрыть", "Свернуть", "Развернуть").
Дело в том что я использую скин и мне удалось скрыть неактивную кнопку развернуть в правом верхнем углу формы таким образом:
1. Удаляем текстуру у кнопки свернуть и заменяем ею же кнопку развернуть- получаем 2 кнопки. Родную кнопку "Свернуть" делаем неактивной
2. При нажатии на кнопку свернуть(на самом деле развернуть) обнуляем сообщение wParam := 0 и посылаем форме сообщение свернуть.
3. Отлавливаем дополнительно двойной клик по заголовку окна и обнуляем, чтоб окно не развернулось на весь экран.
Всё это прекрасно работает, но но при наведении на новую кнопку свернуть всплывает подсказка от развернуть

вот здесь (Делфи)
http://forum.vingrad.ru/forum/topic-...-system/0.html
нашёл решение, портировал, но не работает. Получилось только отловить наведение мыши на кнопки
всё выше описанное реализовано на default window proc (
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx )
вот страница на МСДН о тултипах
http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx
вот здесь есть простенький код на C++
http://www.codeproject.com/Articles/...-More-Tooltips
вот всё что удалось сделать:
читать дальше »
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
WM_MOVE = $3;
GWL_WNDPROC = -4;
HTMAXBUTTON = 9;
WM_NCHITTEST = $0084;
HTMINBUTTON = 8;
WM_USER = $0400;
TTM_ACTIVATE = WM_USER + 1;
MAX_PATH = 260;
WM_CLOSE = $10;
HTCLOSE = 20;
type
LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;
var
OldWindowProc: Longint;
function IsWindowVisible(hWnd: HWND): BOOL; external 'IsWindowVisible@user32.dll stdcall';
function GetClassName(hWnd: HWND; lpClassName: PChar; nMaxCount: Integer): Integer; external 'GetClassName{#A}@user32.dll stdcall';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';
function EnumWindows(lpEnumFunc, lParam: Longint): BOOL; external 'EnumWindows@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function HideSystemTooltip(Wnd: HWND; lPrm: Longint): BOOL;
var
WndCl: String;
begin
Result := True;
if not IsWindowVisible(Wnd) then Exit;
SetLength(WndCl, MAX_PATH+1);
try
GetClassName(Wnd, WndCl, MAX_PATH+1);
finally
SetLength(WndCl, 0);
end;
end;
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL;
begin
MsgBox('OK', mbError, MB_OK);
SendMessage(hWnd, TTM_ACTIVATE, 0, 0);
end;
function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
case wParam of
HTCLOSE, HTMINBUTTON, HTMAXBUTTON: EnumWindows(CallbackAddr('EnumWindowsProc'), 0);
end;
Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;
procedure InitializeWizard();
begin
WizardForm.BorderIcons := [biSystemMenu, biMaximize];
OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;
procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
end;
Буду очень признателен за помощь!
