Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Текст на кнопках


Автор: santilaas 9.10.2007, 15:18
Вопрос такой - если стандартная функция, которая проверяет длину текста и ширину компонента, скажем кнопки, и если текст длиннее, то в качестве Caption-а кнопки будет часть текста и точки, например, если "Delphi" не входит по ширине, будет написано "Del..." 
Заранее спасибо!

Автор: ivan219 9.10.2007, 15:53
Стандартных нет но можно свою состряпать.

Автор: Snowy 9.10.2007, 15:54
Да. DrawText.

Автор: Alix 9.10.2007, 16:15
К посту Snowy можно лишь добавить небольшой пример.
Код
        DrawText(canvas.handle, PAnsiChar(messageText),
                 length(messageText),
                 text_rect, 
                 DT_MODIFYSTRING or DT_END_ELLIPSIS or DT_NOPREFIX);

Там еще много забавных флагов есть, например DT_WORDBREAK.

Автор: Snowy 9.10.2007, 16:38
Код

var
  s: WideString;
  r: TRect;
begin
  s := 'Это очень длинная, ну просто ужасно длиннющая строка, которая не влезает на кнопку!';
  Button1.Hint := s; // Хинт при наведении
  r := Button1.BoundsRect; // размеры кнопки
  r := Rect(r.Left +4, r.Top +2, r.Right -4, r.Bottom -2); // делаем отступы от краёв
  DrawTextW(Canvas.Handle, PWideChar(s), Length(s), r, DT_END_ELLIPSIS or DT_MODIFYSTRING);
  Button1.Caption := PWideChar(s);
end;

Автор: santilaas 11.10.2007, 16:40
Snowy, большое спасибо за пример, получай репу

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