Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Многострочный текст в Hint


Автор: Нитонисе 23.8.2012, 11:08
Мне нужно выводить многострочный текст в Hint. Перевод строки (\n) в стандартном Hint не работает. Значит надо делать специальную форму для моих всплывающих подсказок? Это было бы удобно, с точки зрения размещения на ней элементов (Label), где бы я хотел отображать свои подсказки. Но возникают два вопроса:
1. Как сделать, чтобы при Hint->Show() форма с подсказкой не имела фокуса и не могла его получить? То есть надо чтобы всегда в фокусе было основное окно.
2. Как сделать визуальный эффект затенения под формой, как это есть в оригинальном Hint?

Автор: artsb 23.8.2012, 13:21
Код

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Button1->Hint = L"line1\nline2";
}

В дизайнере не получится из-за кривизны среды. В BCB6 можно было делать переносы по Ctrl+Enter, или если поставить обновление, то возле поля ввода появлялась кнопочка "...", при нажатии на которую, можно было писать многострочный текст. Но потом такого уже не было...

Автор: Нитонисе 23.8.2012, 13:38
А как сделать следующее - мне нужно чтобы подсказка бежала за курсором, пока я веду курсор по TImage, но не всегда, при определенных условиях она не должна отображаться. То есть было бы неплохо иметь некую функцию TImage->ShowHint(), но таковой нет, насколько я знаю. В результате на Image эта подсказка появляется с задержкой и не двигается за курсором, что неприемлемо. 

Автор: Нитонисе 23.8.2012, 16:54
Пытаюсь испольтзовать Application->ActivateHint(TPoint&), но что-то не выходит.
Код

void __fastcall TFMain::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    Image1->ShowHint = true;
    TPoint pt = Image1->ClientToScreen(TPoint(X,Y));
    Application->ActivateHint(pt);
}
//---------------------------------------------------------------------------
void __fastcall TFMain::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    Image1->ShowHint = false;
}
//---------------------------------------------------------------------------
void __fastcall TFMain::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if(Shift.Contains(ssLeft))
    {
        TPoint pt = Image1->ClientToScreen(TPoint(X,Y));
        Application->ActivateHint(pt);
    }
}

При нажатии мыши ничего не происходит. При ее движении подсказка появляется мгновенно и носится за курсором. При отпускании мыши подсказка исчезает. Все хорошо, за исключением того, что подсказка сразу не появляется при нажатии мыши. Непонятно почему, ведь директива есть. Собственна точно такая же директива в OnMouseMove и она работает. Почему же она не работает в OnMouseDown?

Автор: Dem_max 27.8.2012, 12:15
Побаловаться значениями
Код

    Application->HintPause = 0;
    Application->HintShortPause = 0;
    Application->HintHidePause = 0;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)