Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

перенос строки в canvas е   Найти похожие ветки 

 
zvb   (2005-07-13 09:56) [0]

работаю с canvas"ом
необходимо вывести некоторую заданную таблицу
сталкнулся с проблемой вывода длинных строк (как сделать перенос строки?)
textout - не подойдет
drawtext из winapi? может, у кого есть пример работы с этой функцией?


 
isasa ©   (2005-07-13 11:37) [1]

Попробу это

function TrprtForm.fmtLine(Wid: integer; s: string): string;
var lLen, i: integer;
begin
 Result:=s;
 lLen:=prPrev.Canvas.TextWidth(s);
 if lLen<Wid then exit;
 i:=length(s)*Wid div lLen;
 while not (s[i] in [" "]) do i:=i-1;
 Result:=copy(s, 1, i)+#$0A+fmtLine(Wid, copy(s, i+1, length(s)));
end;

prPrev - что-то с объектом Canvas


 
isasa ©   (2005-07-13 11:42) [2]

использование

...................
 buf:=fmtLine(repoRect.Right-repoRect.Left, buf);
 while length(buf)>0 do begin
   hpos:=Pos(#$0A, buf);
   if hpos=0 then begin
     Result:=prPrev.Canvas.TextWidth(buf);
 prPrev.Canvas.TextOut(x, curLine.Y, text);
     buf:="";
    end
   else begin
 prPrev.Canvas.TextOut(x, curLine.Y, text);
     buf:=copy(buf, hpos+1, length(buf));
     curLine.Y:=curLine.Y-prPrev.Canvas.Font.Height+interLine;
   end;
 end;
.................


 
isasa ©   (2005-07-13 11:46) [3]

виноват, отвлекли
.................
 buf:=fmtLine(repoRect.Right-repoRect.Left, buf);
 while length(buf)>0 do begin
   hpos:=Pos(#$0A, buf);
   if hpos=0 then begin
     prPrev.Canvas.TextOut(x, curLine.Y, buf);
     buf:="";
    end
   else begin
     prPrev.Canvas.TextOut(x, curLine.Y, buf);
     buf:=copy(buf, hpos+1, length(buf));
     curLine.Y:=curLine.Y-prPrev.Canvas.Font.Height+interLine;
   end;
 end;
.................


 
isasa ©   (2005-07-13 11:51) [4]

нет, это никогда не кончится ;)

else begin
    prPrev.Canvas.TextOut(x, curLine.Y, copy(buf, 1, hpos-1));
    buf:=copy(buf, hpos+1, length(buf));


 
WondeRu ©   (2005-07-13 13:18) [5]

isasa ©   (13.07.05 11:51) [4]
легких путей мы не ищем!!!

вот кусок одного исходника... принцип должен быть понятен
procedure TMultiLineDBGrid.DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
var

 Format: Word;
 C: array[0..255] of Char;
begin

 if LinesPerRow = 1 then
   Format := DT_SINGLELINE or DT_LEFT
 else
   Format := DT_LEFT or DT_WORDBREAK;

 Canvas.FillRect(Rect);

 StrPCopy(C, Field.AsString);
 WinProcs.DrawText(Canvas.Handle, C, StrLen(C), Rect, Format);
end;


 
zvb   (2005-07-15 07:17) [6]

очень благодарен!
пробую ;)



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
5-1116963546
w666w
2005-05-24 23:39
2005.12.18
Как в TListItem отрисовать TSpinEdit?


14-1132824008
Сержо
2005-11-24 12:20
2005.12.18
JavaScript: Перенос опций из одного select а в другой


4-1129817907
Максим
2005-10-20 18:18
2005.12.18
Определение старта процесса


2-1133406706
verok
2005-12-01 06:11
2005.12.18
Динам.изм. текста хранимой процедуры


10-1109635929
GanibalLector
2005-03-01 03:12
2005.12.18
утилита Tlibimp