<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=253816&amp;view=findpost&amp;p=2096073</guid>
        <pubDate>Tue, 21 Oct 2008 14:54:46 +0000</pubDate>
        <title>TextEdgewise</title>
        <link>https://forum.sources.ru/index.php?showtopic=253816&amp;view=findpost&amp;p=2096073</link>
        <description><![CDATA[andrew.virus: Вот так можно форматировать тект, выравнивания его по ширине, для некоторых стандартных компонентов Delphi ...<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function TextEdgewiseLabel(TEL: TLabel): string;</div><div class="code_line">{------------------------------------------------}</div><div class="code_line">{--- Выравнивание текста по ширине для TLabel ---}</div><div class="code_line">{------------------------------------------------}</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;fSectionSpaceWidth, // Ширина пробела</div><div class="code_line">&nbsp;&nbsp;fTextWidth, &nbsp; &nbsp; &nbsp; &nbsp; // Ширина текста</div><div class="code_line">&nbsp;&nbsp;fDeltaWidth, &nbsp; &nbsp; &nbsp; &nbsp;// Разница между шириной компонента TLabel ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ... и шириной введеного текста</div><div class="code_line">&nbsp;&nbsp;fCountSpaceNeed, &nbsp; &nbsp;// Число пробелов нужных для заполнения пустого ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ... пространства</div><div class="code_line">&nbsp;&nbsp;fCountSpace, &nbsp; &nbsp; &nbsp; &nbsp;// Число пробелов в строке</div><div class="code_line">&nbsp;&nbsp;fCountWord, &nbsp; &nbsp; &nbsp; &nbsp; // Число слов в строке</div><div class="code_line">&nbsp;&nbsp;fSpaceBlock, &nbsp; &nbsp; &nbsp; &nbsp;// Число пробелов между словами</div><div class="code_line">&nbsp;&nbsp;i, j: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;result:=&#39;&#39;;</div><div class="code_line">&nbsp;&nbsp;// определение базовых характеристик: ...</div><div class="code_line">&nbsp;&nbsp;// ... ширины пробела</div><div class="code_line">&nbsp;&nbsp;fSectionSpaceWidth:=TEL.Canvas.TextWidth(&#39; &#39;);</div><div class="code_line">&nbsp;&nbsp;// ... ширины всего текста</div><div class="code_line">&nbsp;&nbsp;fTextWidth:=TEL.Canvas.TextWidth(TEL.Caption);</div><div class="code_line">&nbsp;&nbsp;// ... разницы между шириной компонента и текта</div><div class="code_line">&nbsp;&nbsp;fDeltaWidth:=TEL.Width - fTextWidth;</div><div class="code_line">&nbsp;&nbsp;// ... число требуемых пробелов для выполнения выравнивания</div><div class="code_line">&nbsp;&nbsp;fCountSpaceNeed:=fDeltaWidth div fSectionSpaceWidth;</div><div class="code_line">&nbsp;&nbsp;// ... числа слов в строке</div><div class="code_line">&nbsp;&nbsp;fCountWord:=WordCount(TEL.Caption);</div><div class="code_line">&nbsp;&nbsp;// ... числа пробелов в строке</div><div class="code_line">&nbsp;&nbsp;fCountSpace:=fCountWord - 1;</div><div class="code_line">&nbsp;&nbsp;//-------------------------------</div><div class="code_line">&nbsp;&nbsp;// обработка строки с текстом ...</div><div class="code_line">&nbsp;&nbsp;fSpaceBlock:=(fCountSpaceNeed div fCountSpace) + 1;</div><div class="code_line">&nbsp;&nbsp;for i:=1 to (fCountWord-1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;result:=result + GetWord(TEL.Caption, i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for j:=1 to fSpaceBlock do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;result:=result + &#39; &#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;result:=result + GetWord(TEL.Caption, fCountWord)</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TextEdgewiseMemo(TEM: TMemo);</div><div class="code_line">{-----------------------------------------------}</div><div class="code_line">{--- Выравнивание текста по ширине для TMemo ---}</div><div class="code_line">{-----------------------------------------------}</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;tmpLabel: TLabel;</div><div class="code_line">&nbsp;&nbsp;i: integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;tmpLabel:=TLabel.Create(TEM);</div><div class="code_line">&nbsp;&nbsp;tmpLabel.Parent:=TEM;</div><div class="code_line">&nbsp;&nbsp;tmpLabel.AutoSize:=false;</div><div class="code_line">&nbsp;&nbsp;tmpLabel.Visible:=false;</div><div class="code_line">&nbsp;&nbsp;tmpLabel.Width:=TEM.Width - 4; // учет ширины границы компонента</div><div class="code_line">&nbsp;&nbsp;// обработка содержимого TMemo построчно ...</div><div class="code_line">&nbsp;&nbsp;// ... используя временный элемент TLabel</div><div class="code_line">&nbsp;&nbsp;for i:=0 to TEM.Lines.Count-1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;tmpLabel.Caption:=TEM.Lines.Strings[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;tmpLabel.Caption:=TextEdgewiseLabel(tmpLabel);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TEM.Lines.Strings[i]:=tmpLabel.Caption</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;tmpLabel.Free</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
э.ы.: для остальных компонентов можно выполнять обработку аналочично .... ;) .... в архиве пример использования данных методов и код всех используемых методов используемых для обработки текста (последние построены на базе примеров из DRKB)]]></description>
        <author>andrew.virus</author>
        <category>Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	