Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.96.146] |
|
Сообщ.
#1
,
|
|
|
Вот так можно форматировать тект, выравнивания его по ширине, для некоторых стандартных компонентов Delphi ...
function TextEdgewiseLabel(TEL: TLabel): string; {------------------------------------------------} {--- Выравнивание текста по ширине для TLabel ---} {------------------------------------------------} var fSectionSpaceWidth, // Ширина пробела fTextWidth, // Ширина текста fDeltaWidth, // Разница между шириной компонента TLabel ... // ... и шириной введеного текста fCountSpaceNeed, // Число пробелов нужных для заполнения пустого ... // ... пространства fCountSpace, // Число пробелов в строке fCountWord, // Число слов в строке fSpaceBlock, // Число пробелов между словами i, j: integer; begin result:=''; // определение базовых характеристик: ... // ... ширины пробела fSectionSpaceWidth:=TEL.Canvas.TextWidth(' '); // ... ширины всего текста fTextWidth:=TEL.Canvas.TextWidth(TEL.Caption); // ... разницы между шириной компонента и текта fDeltaWidth:=TEL.Width - fTextWidth; // ... число требуемых пробелов для выполнения выравнивания fCountSpaceNeed:=fDeltaWidth div fSectionSpaceWidth; // ... числа слов в строке fCountWord:=WordCount(TEL.Caption); // ... числа пробелов в строке fCountSpace:=fCountWord - 1; //------------------------------- // обработка строки с текстом ... fSpaceBlock:=(fCountSpaceNeed div fCountSpace) + 1; for i:=1 to (fCountWord-1) do begin result:=result + GetWord(TEL.Caption, i); for j:=1 to fSpaceBlock do result:=result + ' ' end; result:=result + GetWord(TEL.Caption, fCountWord) end; procedure TextEdgewiseMemo(TEM: TMemo); {-----------------------------------------------} {--- Выравнивание текста по ширине для TMemo ---} {-----------------------------------------------} var tmpLabel: TLabel; i: integer; begin tmpLabel:=TLabel.Create(TEM); tmpLabel.Parent:=TEM; tmpLabel.AutoSize:=false; tmpLabel.Visible:=false; tmpLabel.Width:=TEM.Width - 4; // учет ширины границы компонента // обработка содержимого TMemo построчно ... // ... используя временный элемент TLabel for i:=0 to TEM.Lines.Count-1 do begin tmpLabel.Caption:=TEM.Lines.Strings[i]; tmpLabel.Caption:=TextEdgewiseLabel(tmpLabel); TEM.Lines.Strings[i]:=tmpLabel.Caption end; tmpLabel.Free end; э.ы.: для остальных компонентов можно выполнять обработку аналочично .... .... в архиве пример использования данных методов и код всех используемых методов используемых для обработки текста (последние построены на базе примеров из DRKB) Прикреплённый файлTextEdgewise.zip (2.98 Кбайт, скачиваний: 172) |