Перейти к содержанию
Fire Monkey от А до Я
  • 0

Конфликт Hint и BorderStyle


Maximus

Вопрос

День добрый. Возникла следующая проблема. Если свойству формы BorderStyle поставить любое значение (кроме Sizeable), все подсказки Hint компонентов этой формы перестают отображаться. Аналогично дело обстоит с BorderIcons, стоит убрать хотя бы одну кнопку, как Hint сразу перестаёт работать.

Это нормальное поведение или ошибка? И можно ли как-то это обойти?

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

Рекомендуемые сообщения

  • 0

Поддержу вопрос, но немного его перефразирую. У меня вообще какой то затык с этим Hint-ом! Как приложение я пишу уже полгода (начал с DelphiEX7), бинт появился только сейчас, то я его добавил только сейчас, но не тут то было! Он вообще не отображается нигде ни при каких обстоятельствах!!!! Что делать? С кем то конфликтует?

Ссылка на комментарий
  • 0

Поддержу вопрос, но немного его перефразирую. У меня вообще какой то затык с этим Hint-ом! Как приложение я пишу уже полгода (начал с DelphiEX7), бинт появился только сейчас, то я его добавил только сейчас, но не тут то было! Он вообще не отображается нигде ни при каких обстоятельствах!!!! Что делать? С кем то конфликтует?

В пустом проекте хоть отображается?

Изменено пользователем Maximus
Ссылка на комментарий
  • 0

 

Поддержу вопрос, но немного его перефразирую. У меня вообще какой то затык с этим Hint-ом! Как приложение я пишу уже полгода (начал с DelphiEX7), бинт появился только сейчас, то я его добавил только сейчас, но не тут то было! Он вообще не отображается нигде ни при каких обстоятельствах!!!! Что делать? С кем то конфликтует?

В пустом проекте хоть отображается?

 

Если с нуля пустой проект, то да, отображается!

Ссылка на комментарий
  • 0

 

 

А если BorderStyle=None?

Хмм... так хинты высвечиваются только при использовании обычного VCL

 

А причём тут VCL?

 

Если создать простой проект VCL Form Application, все работает и со свойством формы BorderStyle = None, хинты высвечиваются, все корректно. А если создать кроссплатформенный проект - хинты с этим свойством не работают.

Ссылка на комментарий
  • 0

Друзья, привет!

Вопрос так и остался актуальным. В случае, если свойства формы BorderStyle = None, то Hint'ы не отображаются!

Собственно это больше вопрос к нашим гуру. Что делать и как быть?

Ссылка на комментарий
  • 0
39 минут назад, AlexG сказал:

Друзья, привет!

Вопрос так и остался актуальным. В случае, если свойства формы BorderStyle = None, то Hint'ы не отображаются!

Собственно это больше вопрос к нашим гуру. Что делать и как быть?

Не только BorderStyle, но еще что то. А что, я так и не выяснил. Потому что в моем проекте, нет BorderStyle в none, но хинты так и не отображаются!

Ссылка на комментарий
  • 0
1 минуту назад, Vitaldj сказал:

Не только BorderStyle, но еще что то. А что, я так и не выяснил. Потому что в моем проекте, нет BorderStyle в none, но хинты так и не отображаются!

Думаю, что еще и свойство Transparency, при определенных условиях.

Ссылка на комментарий
  • 2
  • Модераторы

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

  • копируем в проект и открываем FMX.Forms.pas
  • Ctrl+F -> procedure TCommonCustomForm.SetShowHint(const Value: Boolean);

 

procedure TCommonCustomForm.SetShowHint(const Value: Boolean);
begin
  FShowHint := Value;
  ReleaseLastHinted;

  // ZuBy ***
  if (not(csDesigning in ComponentState)) then
  begin
    FreeAndNil(FSharedHint);
    FSharedHint := THint.CreateNewInstance(Handle);
  end;
  // *** ZuBy
end;
  • сохраняем
  • в событии OnCreate, OnShow пишем
ShowHint := true;
  • Готово!

 

Ссылка на комментарий
  • 0
3 минуты назад, Равиль Зарипов (ZuBy) сказал:

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

  • копируем в проект и открываем FMX.Forms.pas
  • Ctrl+F -> procedure TCommonCustomForm.SetShowHint(const Value: Boolean);

 


procedure TCommonCustomForm.SetShowHint(const Value: Boolean);
begin
  FShowHint := Value;
  ReleaseLastHinted;

  // ZuBy ***
  if (not(csDesigning in ComponentState)) then
  begin
    FreeAndNil(FSharedHint);
    FSharedHint := THint.CreateNewInstance(Handle);
  end;
  // *** ZuBy
end;
  • сохраняем
  • в событии OnCreate, OnShow пишем

ShowHint := true;
  • Готово!

 

Хотелось бы без костылей((

Ссылка на комментарий
  • 0
  • Модераторы
Только что, Vitaldj сказал:

Хотелось бы без костылей((

без костылей никак, т.к. этот код не вызывается повторно.

почему повторно? потому что форма создается всегда со стилем Sizeble, потом если стиль другой (например None), то вызывается пересоздание окна (не формы!!) где выставляются стили (винапи). и так как форма создана, то повторно событие где вызывается этот код не происходит

надеюсь понятно написал)

Ссылка на комментарий
  • 0
6 минут назад, Равиль Зарипов (ZuBy) сказал:

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

  • копируем в проект и открываем FMX.Forms.pas
  • Ctrl+F -> procedure TCommonCustomForm.SetShowHint(const Value: Boolean);

 


procedure TCommonCustomForm.SetShowHint(const Value: Boolean);
begin
  FShowHint := Value;
  ReleaseLastHinted;

  // ZuBy ***
  if (not(csDesigning in ComponentState)) then
  begin
    FreeAndNil(FSharedHint);
    FSharedHint := THint.CreateNewInstance(Handle);
  end;
  // *** ZuBy
end;
  • сохраняем
  • в событии OnCreate, OnShow пишем

ShowHint := true;
  • Готово!

 

Работает!

А то, что это "костыль" - пофигу! Если бы он был одним единственным... А так - это решение вполне устраивает!

Спасибо!

Ссылка на комментарий
  • 0
  • Модераторы

ну и кому хочется сделать Ballon, а не прямоугольник

  • копируем в проект и открываем FMX.Controls.Win.pas
  • Ctrl+F -> constructor TWindowsHint.Create(const AHandle: TWindowHandle);
FToolTipHandle := CreateWindowEx(0, TOOLTIPS_CLASS, nil, WS_POPUP or TTS_ALWAYSTIP or TTS_BALLOON, 
   0, 0, 300, 300, FNativeControlHandle, 0, hInstance, nil);
  • TTS_BALLON - сделает закругленные подсказки со стрелкой
  • сохраняем
  • Готово!

 

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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...