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

Показываем всплывающие подсказки в различных панелях StatusBar

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

Данный пример демонстрирует показ всплывающих подсказок для любой панели статусбара. Этот метод отличается от того, который использует событие MouseMove, и запускается только тогда, когда приложению необходимо показать всплывающие подсказки. В то время как при использовании MouseMove метод будет вызываться при каждом попадании курсора мышки на statusbar.

Code:

{ Добавьте CommCtrl в uses. }
{ в интерфейсе формы для статусбара }
private
   procedure AppShowHint(var HintStr: string; var CanShow: boolean;
     var HintInfo: THintInfo);
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnShowHint := AppShowHint;
end;
 
procedure TForm1.AppShowHint(var HintStr: string; var CanShow: boolean;
var HintInfo: THintInfo);
const
PanelHints: array [0..6] of string =
   ('Cursor position', 'Ascii char', 'Bookmarks', 'Caps lock',
   'Insert/Overwrite', 'File size', 'File name');
var
x: integer;
R: TRect;
begin
if HintInfo.HintControl = StatusBar1 then
begin
   for x := 0 to StatusBar1.Panels.Count-1 do
   begin
     SendMessage(StatusBar1.Handle, SB_GETRECT, x, Longint(@R));
     if PtInRect(R, HintInfo.CursorPos) then
     begin
       HintStr := PanelHints[x];
       InflateRect(R, 3, 3);
       { Устанавливаем CursorRect говоря системе проверить новые
       строки с подсказками, когда курсор покинет этот прямоугольник. }
       HintInfo.CursorRect := R;
       break;
     end;
   end;
end;
end;
Взято из http://forum.sources.ru

Программный код демонстрирует, как отображать подсказки для различных панелей в статус-баре приложения Delphi с помощью обработчика события AppShowHint.

Вот разбивка кода:

  1. Процедура AppShowHint зарегистрирована как обработчик события OnShowHint для объекта Application.
  2. В обработчике события FormCreate, процедура AppShowHint присваивается к событию OnShowHint.
  3. Процедура AppShowHint проверяет, является ли контроль, который инициировал отображение подсказки, статус-баром (StatusBar1). Если это так, она перебирает панели в статус-баре и проверяет, находится ли курсор внутри границ прямоугольника каждого панеля с помощью функции PtInRect.
  4. Если курсор находится внутри прямоугольника панели, процедура устанавливает параметр HintStr в соответствующее текстовое значение подсказки из массива (PanelHints) и обновляет свойство CursorRect с новым прямоугольником.

Код также включает комментарии, которые предоставляют дополнительную информацию о том, что каждый раздел кода делает.

Один потенциальный способ улучшения может быть добавлением более надежной обработки ошибок или проверки, чтобы убедиться, что курсор находится внутри валидной панели перед отображением подсказки. Кроме того, код использует функцию SendMessage для получения прямоугольника для каждой панели, что может не быть самым эффективным способом. Более современный подход может использовать метод GetPanelRect, предоставляемый компонентом TStatusBar.

Вот альтернативное решение, которое использует метод GetPanelRect и добавляет некоторые основные механизмы обработки ошибок:

procedure TForm1.AppShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
begin
  if HintInfo.HintControl = StatusBar1 then
  begin
    for x := 0 to StatusBar1.Panels.Count - 1 do
    begin
      try
        R := StatusBar1.GetPanelRect(x);
        if PtInRect(R, HintInfo.CursorPos) then
        begin
          HintStr := PanelHints[x];
          InflateRect(R, 3, 3);
          HintInfo.CursorRect := R;
          break;
        end;
      except
        on E: Exception do
          ShowMessage('Ошибка при получении прямоугольника панели: ' + E.Message);
      end;
    end;
  end;
end;

В этом коде используется метод GetPanelRect для получения прямоугольника для каждой панели, и добавлена основная механизм обработки ошибок с помощью блока try-except. Если возникает ошибка при получении прямоугольника панели, отображается сообщение об ошибке.

Показываем всплывающие подсказки в различных панелях статусбара, используя событие OnShowHint и метод SendMessage для определения позиции курсора мыши.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:45:26/0.0033447742462158/0