Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Пацаны! Помогите пожалуйста скрыть (в лучшем случае заменить) системные тултипы (маленькие всплывающие подсказки "Закрыть", "Свернуть", "Развернуть").
Дело в том что я использую скин и мне удалось скрыть неактивную кнопку развернуть в правом верхнем углу формы таким образом:
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;


Буду очень признателен за помощь!

Отправлено: 13:18, 02-02-2013 | #1606