Изменение атрибутов текста, функция DrawText?

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

13 июл 2006, 16:48

Romeo прав, плюсы опасны, лучше не практиковать. Хотя в данном случае работает.
Но представим ситуацию, если случайно продублировали какой-нить флаг:
а) DT_RIGHT or DT_WORDBREAK or DT_WORDBREAK = DT_RIGHT or DT_WORDBREAK;
б) DT_RIGHT + DT_WORDBREAK + DT_WORDBREAK <> DT_RIGHT or DT_WORDBREAK, а равно DT_RIGHT or DT_SINGLELINE - не совсем то, что расчитывали получить, не так ли? ;)
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

13 июл 2006, 19:21

Vet_chv, по DrawText() в дельфовом хэлпе и нет ничего, т.к. это функция WinAPI, а по ним нужно смотреть MSDN. Там, правда, тоже далеко не для всех функций есть примеры.

По DrawText(), вот пример:

Код: Выделить всё

{ в обработчике события отрисовки формы OnPaint } 
procedure TForm1.FormPaint(Sender: TObject);
const vText: String = 'This is a text.';
var vRect: TRect;
begin
  vRect := Rect(10, 10, 70, 40); { задаем размеры прямоугольника, куда будет вписан текст }
  Font.Color := clRed;       { цвет текста }
  SetBkColor(Canvas.Handle,
    ColorToRGB(clWhite));    { цвет фона }
  SetBkMode(Canvas.Handle, OPAQUE); { режим фона: OPAQUE - будет заливать фон под текстом заданным цветом }
  DrawText(
    Canvas.Handle, { дескриптор канвы }
    PChar(vText),  { указатель на строку }
    -1,            { длина строки вычисляется автоматически }
    vRect,         { размер прямоугольника }
    DT_CENTER or DT_WORDBREAK { флаги, требующие выровнять текст по левому краю и автоматически переносить слова }
  );
  Font.Color := Self.Font.Color; { вернули старые значения }
end;
Ответить