Карта сайтаСсылкиКонтакты

Хостинг


Отображение пользовательских подсказок для панелей StatusBar

PDF Печать
Статьи

Осуществление TStatusPanel.Hint для каждой панели на StatusBar.

Управление TStatusBar отображает строку панелей, которые обычно располагаются внизу формы. Свойство Panels управления TStatusBar это коллекция объектов TStatusPanel.

Подсказка для каждой панели

TStatusBar обеспечивает показ подсказки, когда мышь задерживается над управлением, но не может отображать для каждой панели ее собственную подсказку.

Когда указатель мыши перемещается поверх управления или меню, которое может отображать подсказку, происходит событие OnHint TApplicationEvents.

Компонент TApplicationEvents может использоваться, чтобы прервать события глобального объекта Application.

Когда свойство ShowHint установлено в True для строки состояния и мышь находится над строкой состояния, TApplicationEvents вызывает событие OnShowHint - непосредственно перед тем, как подсказка будет отображена.

Вы можете использовать это событие, чтобы изменить вид и появление подсказки.

Чтобы посмотреть, как работает событие OnShowHint, выполните следующее:

Поместите TStatusBar на форму, оставьте имя по умолчанию StatusBar1. Обратите внимание, что во время проектирования компонент будет выровнен снизу формы.

  • Добавьте несколько панелей на панель состояния при помощи свойства Panels.
  • Поместите компонент TApplicationEvents на форму, оставьте имя, заданное по умолчанию - ApplicationEvents1.
  • Удостоверьтесь, что свойство ShowHint строки состояния установлено в True.
  • Обработайте событие OnShowHint:

//Handles ApplicationEvents1.OnShowHint
procedure TStatusForm.ApplicationEvents1ShowHint(
  var HintStr: string;
  var CanShow: Boolean;
  var HintInfo: THintInfo) ;
var
  r: TRect;
  idx: integer;
begin
  if (HintInfo.HintControl = StatusBar1) AND 
      (NOT StatusBar1.SimplePanel) then
  begin
    r := StatusBar1.ClientRect;
    r.Right := StatusBar1.Panels[0].Width;

    //на какой панели находится мышь
    for idx := 0 to -1 + Statusbar1.Panels.Count do
    begin
      if r.Right > HintInfo.CursorPos.X then
      begin
        HintInfo.CursorRect := r;
        //обеспечиваем подсказку для панели, где мышь
        HintStr := 'Подсказка для ' + Statusbar1.Panels[idx].Text;
        Exit;
      end;
      OffsetRect(r, Statusbar1.Panels[idx].Width, 0) ;
    end;
  end;
end;

Теперь каждая панель на строке состояния отображает свою собственную подсказку.


 

Добавить комментарий


Защитный код
Обновить