На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > TextEdgewise , Выравнивание текста по ширине в стандартных компонентах Delphi
      Вот так можно форматировать тект, выравнивания его по ширине, для некоторых стандартных компонентов Delphi ...

      ExpandedWrap disabled
        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)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0229 ]   [ 16 queries used ]   [ Generated: 16.04.24, 23:05 GMT ]