procedure MyDrawText(DC: HDC; AR: TRect; AStr: String);
var R: TRect; WR, WAR, HR, HAR: Integer;
begin
R:=AR;
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='';
нужно сделать умный перенос Русского текста на новий битмап.