Форум: "Media";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Внизперенос строки в 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 вся ветка
Форум: "Media";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c