15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


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

Компилятор: Delphi

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

{ Добавьте 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;