Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение длинны текста, в пикселях. [D7, XP]


San_pancho ©   (2006-03-14 21:05:00) 

Уважаемые мастера подскажите пожалуйста.
Нужна процедура которая по заданному стилю строки, ее размеру, и ширене области (в пикселях), в которую будет вписана это строка, определила количество занимаемых ей строк.
Или какую-нибудь функцию которую можно полезно использовать для написания этой функции.


ЮЮ   (2006-03-16 03:34:00) [1]

>А как задать длину зоны?

в передаваемом параметре Rect

procedure DrawTextOnCanvas(
 Canvas: TCanvas; const Text: string; var ARect: TRect;Alignment: TAlignment;
 Calculate: boolean = false; WordWrap: boolean = true
);
const
 AlignFlags: array [TAlignment] of Integer =
   (DT_LEFT or DT_EXPANDTABS or DT_NOPREFIX,
    DT_RIGHT or DT_EXPANDTABS or DT_NOPREFIX,
    DT_CENTER or DT_EXPANDTABS or DT_NOPREFIX);
var
 flags: integer;
begin
 flags := AlignFlags[Alignment];
 if WordWrap then flags := flags + DT_WORDBREAK;
 if Calculate then flags := flags + DT_CALCRECT;
 DrawText(
   Canvas.Handle,
   PChar(Text),
   length(Text),
    ARect,
   flags
  );
end;

procedure TfrmTest.CalculateGridRowHeights;
var
 i: integer;
 r: TRect;
begin
 Grid.Canvas.Font.Assign(Grid.Font);
 Grid.Canvas.Font.Style := [fsBold];
 for i := 0 to Grid.RowCount - 1 do begin
    r := Rect(0, 0, Grid.ColWidths[Grid.ColCount - 1] - 4, Grid.DefaultRowHeight);
   DrawTextOnCanvas(
     Grid.Canvas, Grid.Cells[Grid.ColCount - 1, i], r, taLeftJustify, true
   );
   Grid.RowHeights[i] := r.Bottom + 4;
 end;
end;


san_pancho   (2006-03-14 21:41:00) [2]

А как задать длину зоны?
Можете маленький пример набросать?


Desdechado   (2006-03-14 21:38:00) [3]

можно
высоту зоны поделить на полную высоту шрифта


san_pancho   (2006-03-14 21:35:00) [4]

А как-нибудь количество строк подсчитать можно?


Desdechado   (2006-03-14 21:24:00) [5]

DrawText ( CALC_RECT )


Джо   (2006-03-14 21:23:00) [6]

У Canvas есть методы TextWidth, TextHeight.


san_pancho   (2006-03-14 21:22:00) [7]

Компонент Мемо это же делает как-то.


Наверх

Титульная страница Поиск, карта сайта Написать письмо