Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.46 MB
Время: 0.013 c
1-1132911148
_dimka
2005-11-25 12:32
2005.12.18
закрытие MDI Форм


14-1132924328
_Seldon_
2005-11-25 16:12
2005.12.18
как обмануть фильтр на прокси сервере


14-1132747769
DiamondShark
2005-11-23 15:09
2005.12.18
Клиенты ICQ


1-1132904035
psa247
2005-11-25 10:33
2005.12.18
Application.Hint


2-1133648336
Fl@sh
2005-12-04 01:18
2005.12.18
Rave Report + BD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский