Главная страница
    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.45 MB
Время: 0.013 c
1-1132587568
vecna
2005-11-21 18:39
2005.12.18
Handle + ReadOnly


6-1126172773
Dmitrij_K
2005-09-08 13:46
2005.12.18
Как декодировать такое =?koi8-r?B?VEMg8NLPxskubG5r?=


4-1129578400
leonidus
2005-10-17 23:46
2005.12.18
Как очистить клавиатурный буфер?


2-1133762488
XProger
2005-12-05 09:01
2005.12.18
Позиция курсора в консоли


14-1132627955
Рсдрп
2005-11-22 05:52
2005.12.18
Как проще откомпилировать программу на Си++?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский