Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как сделать hint на системных кнопках?

Delphi , Синтаксис , Hint подсказки

Как сделать hint на системных кнопках?

Довольно сложный вопрос. Так просто не сделаешь. Нужно отлавливать WM_NCMOUSEMOVE и WM_NCHITTEST в них блокировать системный хинт и отрисовывать свой. Нет временипример делать. Но тут еще одно - если ты их решил модифицировать, то тебе нужно еще и два системных меню русифицировать. то которое в заголовке формы и то которое в тулбаре внизу. Это на порядок проще и делается вот таким кодом:

Code:

unit Unit1;

 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
 
type
TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure ChangeMenuLanguage(AHandle: THandle);
const
RusTranscriptionCount = 6;
SysMenuID: array [0..RusTranscriptionCount - 1] of UINT =
   (SC_RESTORE, SC_MOVE, SC_SIZE, SC_MINIMIZE, SC_MAXIMIZE, SC_CLOSE);
RusTranscription: array [0..RusTranscriptionCount - 1] of String =
   ( '&Восстановить', '&Переместить', '&Размер', '&Свернуть',
     'Р&азвернуть', '&Закрыть'#9'Alt+F4');
var
SysMenu: HMENU;
MenuItem: TMenuItemInfo;
ItemCount, I, A: Integer;
MenuString: array [0..MAXCHAR - 1] of Char;
begin
SysMenu := GetSystemMenu(AHandle, False);
if SysMenu <> 0 then
begin
   ItemCount := GetMenuItemCount(SysMenu);
   for I := 0 to ItemCount - 1 do
   begin
     ZeroMemory(@MenuItem, SizeOf(TMenuItemInfo));
     MenuItem.cbSize := SizeOf(TMenuItemInfo);
     MenuItem.fMask := MIIM_ID or MIIM_STRING or MIIM_BITMAP;
     MenuItem.dwTypeData := MenuString;
     MenuItem.cch := MAXCHAR;
     if GetMenuItemInfo(SysMenu, I, True, MenuItem) then
       for A := 0 to RusTranscriptionCount - 1 do
         if SysMenuID[A] = MenuItem.wID then
         begin
           MenuItem.dwTypeData := PChar(RusTranscription[A]);
           MenuItem.cch := Length(RusTranscription[A]);
           if not SetMenuItemInfo(SysMenu, I, True, MenuItem) then RaiseLastOSError;
         end;
   end;
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
ChangeMenuLanguage(Handle);
ChangeMenuLanguage(Application.Handle);
end;

Взято из http://forum.sources.ru

Автор: Rouse_

Для создания подсказки на системных кнопках вам нужно поймать сообщения WM_NCMOUSEMOVE и WM_NCHITTEST в цикле обработки сообщений формы. В этих сообщениях вы должны блокировать системную подсказку и рисовать свою.

Вот пример, как это сделать:

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure WndProc(var Message: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_WNDPROC, @WndProc);
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
  if (Message.Msg = WM_NCHITTEST) or (Message.Msg = WM_NCMMOUSEMOVE) then
  begin
    // ваш код для рисования подсказки здесь
    Result := HTNOWHERE;
  end
  else
    inherited WndProc(Message);
end;

В этом примере мы переопределяем метод WndProc формы и проверяем, если сообщение равно WM_NCHITTEST или WM_NCMMOUSEMOVE. Если это так, мы рисуем свою подсказку (в этом случае просто возвращаем HTNOWHERE, чтобы указать, что нет системной подсказки).

Обратите внимание, что вам нужно использовать SetWindowLong в обработчике события FormCreate, чтобы заменить процедуру окна формы на вашу.

Также, как упоминалось в кодовом фрагменте от Rouse_, если вы хотите модифицировать системные меню (например, меню, которое появляется при правом клике на панели инструментов или в заголовке окна), вам нужно использовать процедуру ChangeMenuLanguage и предоставить свои переводы для пунктов меню.

Данный код на языке Delphi позволяет изменить текст системных меню в заголовке формы и в тулбаре внизу, для этого необходимо отловить события WM_NCMOUSEMOVE и WM_NCHITTEST, а также блокировать системный хинт и отрисовывать свой.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Hint подсказки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:59:41/0.0058948993682861/1