Главная страница
    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.45 MB
Время: 0.012 c
2-1133491380
Максим
2005-12-02 05:43
2005.12.18
Запутался в основах Delphi


3-1130856634
Mouse_Rat
2005-11-01 17:50
2005.12.18
Backup таблицы из FireBird


2-1133357948
Новичек
2005-11-30 16:39
2005.12.18
Небольшой вопрос относительно функции function recv.


2-1133431193
FShadow
2005-12-01 12:59
2005.12.18
Выбор дочерних MDI-окон с помощью набора закладок TabControl. Как


4-1129604342
Idx
2005-10-18 06:59
2005.12.18
Как добавить "LVS_..." style для ListView?





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