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

Восстановление предыдущего текста в StatusBar при срабатывании события OnHideHint в TAction в Delphi XE2

Delphi , Компоненты и Классы , TStatusBar

В статье мы рассмотрим вопрос восстановления предыдущего текста в StatusBar при срабатывании события OnHideHint в TAction в Delphi XE2. Мы рассмотрим причину проблемы, а также два возможных решения: использование события OnHint в TApplicationEvents и модификацию поведения TStatusBar с помощью интерфейса.

Причина проблемы

TAction имеет событие OnHint, но, к сожалению, не имеет события OnHideHint. Это приводит к следующей проблеме: при наведении курсора мыши на ToolButton или другой контроль, связанный с действием, подсказка действия отображается в StatusBar (при условии, что свойство AutoHint StatusBar установлено в True). Однако когда курсор мыши покидает ToolButton, предыдущий пользовательский текст в StatusBar (который не является подсказкой) не восстанавливается автоматически.

Решение 1: Использование события OnHint в TApplicationEvents

Чтобы автоматически восстанавливать предыдущий текст в StatusBar при срабатывании события OnHideHint, можно использовать событие OnHint в компоненте TApplicationEvents. Ниже приведен пример кода, который демонстрирует, как это сделать:

var
  OriginalPanelText : String = 'BLA';

procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
  if StatusBar1.SimplePanel or (StatusBar1.Panels.Count = 0) then
    if Application.Hint <> '' then
      StatusBar1.SimpleText := Application.Hint
    else
      StatusBar1.SimpleText := OriginalPanelText
  else
    if Application.Hint <> '' then
      StatusBar1.Panels[0].Text := Application.Hint
    else
      StatusBar1.Panels[0].Text := OriginalPanelText;
end;

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

Решение 2: Модификация поведения TStatusBar с помощью интерфейса

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

type
  TStatusBar = class(ComCtrls.TStatusBar)
  private
    FRestoreTextAfterHintAction: string;
  public
    function ExecuteAction(Action: TBasicAction): Boolean; override;
  end;

function TStatusBar.ExecuteAction(Action: TBasicAction): Boolean;
var
  HintText: string;
begin
  if AutoHint and not (csDesigning in ComponentState) and
     (Action is THintAction) and not DoHint then begin
    HintText := THintAction(Action).Hint;
    if SimplePanel or (Panels.Count=0) then begin
      if HintText='' then begin
        SimpleText := FRestoreTextAfterHintAction;
      end else begin
        FRestoreTextAfterHintAction := SimpleText;
        SimpleText := HintText;
      end;
    end else begin
      if HintText='' then begin
        Panels[0].Text := FRestoreTextAfterHintAction;
      end else begin
        FRestoreTextAfterHintAction := Panels[0].Text;
        Panels[0].Text := HintText;
      end;
    end;
    Result := True;
  end else begin
    Result := inherited ExecuteAction(Action);
  end;
end;

В этом примере мы используем интерфейс для переопределения поведения TStatusBar. Мы храним текст, который нужно восстановить, в переменной FRestoreTextAfterHintAction. В методе ExecuteAction мы проверяем, есть ли подсказка для отображения, и если нет, восстанавливаем сохраненный текст.

Заключение

В этой статье мы рассмотрели проблему восстановления предыдущего текста в StatusBar при срабатывании события OnHideHint в TAction в Delphi XE2. Мы предложили два решения: использование события OnHint в TApplicationEvents и модификацию поведения TStatusBar с помощью интерфейса. Каждое решение имеет свои преимущества и недостатки, и выбор между ними зависит от конкретной ситуации и предпочтений разработчика.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема восстановления предыдущего текста в StatusBar при срабатывании события OnHideHint в TAction в Delphi XE2 и предлагаются два решения: использование события OnHint в TApplicationEvents и модификация поведения TStatusBar с п


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

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




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


:: Главная :: TStatusBar ::


реклама


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

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