Главная страница
    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.014 c
6-1125814498
murz
2005-09-04 10:14
2005.12.18
Символ


3-1130837150
Punch
2005-11-01 12:25
2005.12.18
Индекс на поле.


4-1129788953
Владимир
2005-10-20 10:15
2005.12.18
Как программно получить доступ к Event Log


3-1130820858
Карелин Артем
2005-11-01 07:54
2005.12.18
Сколько _Recordset возвращает запрос в ADO?


14-1133159215
Ega23
2005-11-28 09:26
2005.12.18
С днем рождения! 28 ноября





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