Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как при переносе текста изменить '...' на какойто перенос. [D7, WinXP]


452 ©   (2008-02-23 23:06:00) 


procedure MyDrawText(DC: HDC; AR: TRect; {AWidth: Integer;} AStr: String);
var R: TRect; WR, WAR, HR, HAR: Integer;
begin
R:=AR;
//R.Right:=R.Left+AWidth;
DrawText(DC, PChar(AStr), -1, R, DT_CALCRECT or DT_WORDBREAK or DT_CENTER);
WAR:=AR.Right-AR.Left;
WR:=R.Right-R.Left;
HAR:=AR.Bottom-AR.Top;
HR:=R.Bottom-R.Top;
R.Left:=AR.Left+((WAR-WR) div 2);
R.Right:=R.Left+WR;
R.Top:=AR.Top+((HAR-HR) div 2);
R.Bottom:=R.Top+HR;
DrawText(DC, PChar(AStr), -1, R, DT_WORDBREAK or DT_CENTER);
end;

function GetLongStr(Str:String): String;
var N: Integer;
begin
for N:= 1 to StrToIntDef(Str, 10) do
Result:=Str;
end;

function DivStr(var S: String; R: TRect;bmm,bmdc:HDC): String;
var Flags: LongInt;
begin
Flags:=DT_WORDBREAK or DT_VCENTER or DT_CENTER or DT_MODIFYSTRING or DT_EDITCONTROL or DT_END_ELLIPSIS;
InflateRect(R,-9,-9);
Result:=Copy(S, 1, Length(S));
DrawText(bmdc, PChar(S), -1, R, Flags);
MyDrawText(bmm,R,PChar(S));
S:=StrPas(PChar(S));
if Length(Result)>=(Length(S)+3) then Delete(Result, 1, Length(S)-3) else Result:='';
end;

функцыи отображают текст посредине битмапа по горизонтали и вертикали и переносят текст на новый битмап (если мнгого текста)

repeat
PS:=DivStr('Text demo tttt', R,bitmaptest,bitmap)
until PS='';

нужно сделать умный перенос Русского текста на новий битмап.


452   (2008-02-24 19:10:00) [1]

Да Вижу никто ничево незнает. Или все заняты. Или просебя подумали да пошел он ...google.ru Там я ничево ненашел :)


452   (2008-02-24 11:14:00) [2]


Flags:=DT_WORDBREAK or DT_VCENTER or DT_CENTER or DT_MODIFYSTRING or DT_EDITCONTROL or DT_END_ELLIPSIS;
DrawText(bmdc, PChar(S), -1, R, Flags); //Здесь виртуально прорисовивается текст для нахождения eво R

Flags:= ... or DT_MODIFYSTRING or DT_EDITCONTROL or DT_END_ELLIPSIS;
ети флаги позволяют расчитать текст который поместится в заданых размерах если слово не помещается тогда происходит обрыв строки например Сообщени...на новом канвасе е
Нужно сделать перенос Русского текстаалгоритмы переноса я нашел вопрос в другом как ево интегрировать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо