Показать сообщение отдельно
  #9  
Старый 25.12.2011, 22:02
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Обычно делал так:
Код:
...
  private
    { Private declarations }
    procedure ShowHint(Sender: TObject);
    procedure OnShowHint(var HintStr: string;
			 var CanShow: Boolean;
			 var HintInfo: THintInfo);
    procedure AppIdle(Sender: TObject; var Done: Boolean);
...
  end;

function FindStatusBar(var SB : TStatusBar) : Boolean;
begin
  // ищем наш StatusBar на активной форме
  SB := TStatusBar(Screen.ActiveForm.FindComponent('StatusBar'));
  // если не найден -- ищем на основной форме
  if not Assigned(SB) then
    SB := TStatusBar(Application.MainForm.FindComponent('StatusBar'));
  Result := SB <> NIL;  
end;

procedure TMainForm.ShowHint(Sender: TObject);
var
  SB	: TStatusBar;
begin
  // если что-то обнаружено -- рисуем на нем наш текст
  if FindStatusBar(SB) and Assigned(SB) then
    SB.SimpleText := Application.Hint;
end;

// меняем цвет и ширину стандартной подсказки.
procedure TMainForm.OnShowHint(var HintStr: string;
			       var CanShow: Boolean;
			       var HintInfo: THintInfo);
begin
  with HintInfo do
  begin
    HintMaxWidth := 250;
    HintColor    := clAqua;
  end;
end;

procedure TMainForm.AppIdle(Sender: TObject; var Done: Boolean);
var
  S	: String;
  SB	: TStatusBar;
begin
  S := Screen.ActiveControl.Hint;

  // если что-то обнаружено -- рисуем на нем наш текст
  if (not Screen.ActiveControl.ShowHint) and (FindStatusBar(SB)) and (Assigned(SB)) then
  begin
    if S <> '' then
      SB.SimpleText := S
    else
      SB.SimpleText := '';
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
...
  Application.OnHint := ShowHint;
  Application.OnShowHint := OnShowHint; // Установка обработчика
  Application.OnIdle := AppIdle;
...
end;
саму подсказку можно писать как обычно или делать двойную разделенную символом |.
Код:
  Подсказка
  Подсказка|Очень длинная подсказка.
В первом случае одна и та же подсказка выведется у контрола и в StatusBar-е, во-втором, в StatusBar выведется текст после символа |.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием