<?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=415665&amp;view=findpost&amp;p=3809848</guid>
        <pubDate>Tue, 10 Sep 2019 06:45:15 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809848</link>
        <description><![CDATA[DimaBr: Ну вот я о том же. Есть 2 компонента, к которым прицеплен один редактор, с сохранением по SetByOk. Что сохранится в конечном итоге ?<br><br>Лучшим решением было бы сделать DB контролы + TKRIniConfig=class(TDataSource)<br>1. Можно читать/писать данные в Dataset через обычный TDataSource<br>2. Ваш TKRIniConfig (с внутренним Dataset-ом) умел бы писать/читать INIфайл]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809838</guid>
        <pubDate>Mon, 09 Sep 2019 23:29:00 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809838</link>
        <description><![CDATA[kandiral: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>То есть изменение в компоненте сразу же сохраняется в Ini файле ? А как же процедуры Ok / Cancel о которых говорится в видео ?</div></div><br>
У компонентов есть свойство SetByOk. Если оно выключено, а по умолчанию оно выключено, то изменения сохраняются сразу и во всех других компонентах значение обновится. Если свойство SetByOk включить, то для сохранения значения нужно вызвать метод OK, об этом тоже говорится в видео.]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809836</guid>
        <pubDate>Mon, 09 Sep 2019 23:16:18 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809836</link>
        <description><![CDATA[DimaBr: То есть изменение в компоненте сразу же сохраняется в Ini файле ? А как же процедуры Ok / Cancel о которых говорится в видео ?]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809832</guid>
        <pubDate>Mon, 09 Sep 2019 20:42:46 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809832</link>
        <description><![CDATA[kandiral: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Можно ли ОДИН параметр прицепить к двум компонентам, и что при этом будет сохраняться ?</div></div><br>
Если один и тот же параметр прикрепить к разным компонентам, то при изменении значения в одном компоненте оно поменяется и во втором.<br>
То есть например возьмем два выпадающих списка KRComboBox с одним и тем же конфигурационном параметром и в первом списке мы изменим выбранный элемент, то во втором списке сразу изменится значение на соответствующее. При этом сохранятся будет номер выбранного элемента. При этом не имеет значение сколько компонентов с одинаковым параметром два или более, все синхронно будут изменятся.]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809795</guid>
        <pubDate>Mon, 09 Sep 2019 19:25:00 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809795</link>
        <description><![CDATA[DimaBr: Можно ли ОДИН параметр прицепить к двум компонентам, и что при этом будет сохраняться ?]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809744</guid>
        <pubDate>Mon, 09 Sep 2019 12:49:46 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809744</link>
        <description><![CDATA[kandiral: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>За желание обнародовать свою работу - хвала, но в таком виде неюзабельно имхо.</div></div><br>
В данном примере это конечно сильно круто использовать столько объектов для такой простой задачи. Но это был всего лишь пример для демонстрации.<br>
Но представьте, мы имеем большой проект, множество форм и нам нужен параметр из файла, который используется в нескольких формах(объектах). Я решаю такую задачу, создав TKRIniConfig с параметрами на главной форме и все другие формы(объекты) используют эти параметры. То есть больше ни где не нужно подключатся к конфигурационному файлу, не нужно где-то хранить имена параметров и секций, мы просто обращаемся к объекту из главной формы MainForm.Param1 <br>
Мне это сильно упростило жизнь и я решил поделится эти.<br>
<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Ну и ini файлы это прошлый век, как насчет json, xml?</div></div><br>
Не скажите. Сделайте поиск с маской *.ini в папке Windows и посчитайте сколько там таких файлов. Формат хранения не особо важен, при желании можно доработать этот компонент и сохранять данные в json или xml. Суть в способе использования конфигурационных параметров из файла как отдельный объект. Плюс я уже пошел дальше и эти объект использую в других компонентах как показано в примере на сайте]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809739</guid>
        <pubDate>Mon, 09 Sep 2019 12:11:32 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809739</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415665&view=findpost&p=3809341'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>kandiral &#064; <time class="tag-quote__quoted-time" datetime="2019-09-05T13:37:48+00:00">05.09.19, 13:37</time></span><div class='quote '><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">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;KRIniConfig1: TKRIniConfig;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFLeft: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFTop: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFHeight: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFWidth: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFIsMaximized: TKRIniCfgParam;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script></div></div><br>
ОМГ.<br>
За желание обнародовать свою работу - хвала, но в таком виде неюзабельно имхо. Ну и ini файлы это прошлый век, как насчет json, xml?]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809362</guid>
        <pubDate>Thu, 05 Sep 2019 20:09:15 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809362</link>
        <description><![CDATA[DimaBr: Мой код не длиннее вашего и без использования компонент. Где автоматизация ?<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><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">procedure TForm1.FormActivate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if isActivated then exit;</div><div class="code_line">&nbsp;&nbsp;with TIniFile.Create(ExtractFilePath(Application.ExeName)+&#39;config.ini&#39;) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Left := ReadInteger(&#39;Section&#39;,&#39;Left&#39;,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Top := ReadInteger(&#39;Section&#39;,&#39;Top&#39;,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Width := ReadInteger(&#39;Section&#39;,&#39;Width&#39;,0);;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Height := ReadInteger(&#39;Section&#39;,&#39;Height&#39;,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ReadBoolean(&#39;Section&#39;,&#39;Max&#39;,false) then WindowState:=wsMaximized;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;isActivated:=true;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;FormResize(Sender);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;isActivated:=false;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormResize(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if not isActivated then exit;</div><div class="code_line">&nbsp;&nbsp;with TIniFile.Create(ExtractFilePath(Application.ExeName)+&#39;config.ini&#39;) do begin</div><div class="code_line">&nbsp;&nbsp; if WindowState&#60;&#62;wsMaximized then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; WriteInteger(&#39;Section&#39;,&#39;Left&#39;,Left);</div><div class="code_line">&nbsp;&nbsp; &nbsp; WriteInteger(&#39;Section&#39;,&#39;Top&#39;,Left);</div><div class="code_line">&nbsp;&nbsp; &nbsp; WriteInteger(&#39;Section&#39;,&#39;Width&#39;,Width);</div><div class="code_line">&nbsp;&nbsp; &nbsp; WriteInteger(&#39;Section&#39;,&#39;Height&#39;,Heigth);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; WriteBoolean(&#39;Section&#39;,&#39;Max&#39;,WindowState&#60;&#62;wsMaximized);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div></div></div><br>
<br>
Вы продолжаете игнорировать вопросы. Особенно № 10. Можно ли ОДИН параметр прицепить к двум компонентам, и что при этом будет сохраняться ?<br>
Если количество параметров (TKRIniCfgParam) всегда равно количеству компонентов, то какой в них вообще смысл ?]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809341</guid>
        <pubDate>Thu, 05 Sep 2019 13:37:48 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809341</link>
        <description><![CDATA[kandiral: Я не знаю как до Вас донести задачу моего компонента. <br>
Вот пример сохранения состояния формы в ini файл.<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">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, KRComponentCollection, KRIniConfig;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;KRIniConfig1: TKRIniConfig;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFLeft: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFTop: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFHeight: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFWidth: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFIsMaximized: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormResize(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormActivate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;isActivated: boolean;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormActivate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if isActivated then exit;</div><div class="code_line">&nbsp;&nbsp;Left:=cfgMFLeft.Value;</div><div class="code_line">&nbsp;&nbsp;Top:=cfgMFTop.Value;</div><div class="code_line">&nbsp;&nbsp;Width:=cfgMFWidth.Value;</div><div class="code_line">&nbsp;&nbsp;Height:=cfgMFHeight.Value;</div><div class="code_line">&nbsp;&nbsp;if cfgMFIsMaximized.Value then WindowState:=wsMaximized;</div><div class="code_line">&nbsp;&nbsp;isActivated:=true;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if WindowState&#60;&#62;wsMaximized then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFLeft.Value:=Left;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFTop.Value:=Top;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFIsMaximized.Value:=false;</div><div class="code_line">&nbsp;&nbsp;end else cfgMFIsMaximized.Value:=true;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;isActivated:=false;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormResize(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if not isActivated then exit;</div><div class="code_line">&nbsp;&nbsp;if WindowState&#60;&#62;wsMaximized then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFLeft.Value:=Left;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFTop.Value:=Top;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFWidth.Value:=Width;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cfgMFHeight.Value:=Height;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><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">object Form1: TForm1</div><div class="code_line">&nbsp;&nbsp;Left = 0</div><div class="code_line">&nbsp;&nbsp;Top = 0</div><div class="code_line">&nbsp;&nbsp;Caption = &#39;Form1&#39;</div><div class="code_line">&nbsp;&nbsp;ClientHeight = 282</div><div class="code_line">&nbsp;&nbsp;ClientWidth = 418</div><div class="code_line">&nbsp;&nbsp;Color = clBtnFace</div><div class="code_line">&nbsp;&nbsp;Font.Charset = DEFAULT_CHARSET</div><div class="code_line">&nbsp;&nbsp;Font.Color = clWindowText</div><div class="code_line">&nbsp;&nbsp;Font.Height = -11</div><div class="code_line">&nbsp;&nbsp;Font.Name = &#39;Tahoma&#39;</div><div class="code_line">&nbsp;&nbsp;Font.Style = []</div><div class="code_line">&nbsp;&nbsp;OldCreateOrder = False</div><div class="code_line">&nbsp;&nbsp;OnActivate = FormActivate</div><div class="code_line">&nbsp;&nbsp;OnCloseQuery = FormCloseQuery</div><div class="code_line">&nbsp;&nbsp;OnCreate = FormCreate</div><div class="code_line">&nbsp;&nbsp;OnResize = FormResize</div><div class="code_line">&nbsp;&nbsp;PixelsPerInch = 96</div><div class="code_line">&nbsp;&nbsp;TextHeight = 13</div><div class="code_line">&nbsp;&nbsp;object KRIniConfig1: TKRIniConfig</div><div class="code_line">&nbsp;&nbsp; &nbsp;FileName = &#39;config.ini&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Left = 144</div><div class="code_line">&nbsp;&nbsp; &nbsp;Top = 64</div><div class="code_line">&nbsp;&nbsp; &nbsp;object cfgMFLeft: TKRIniCfgParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Section = &#39;MainForm&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ValueType = icvtInteger</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DefaultValue = &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Encrypt = False</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;object cfgMFTop: TKRIniCfgParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Section = &#39;MainForm&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ValueType = icvtInteger</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DefaultValue = &#39;0&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Encrypt = False</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;object cfgMFHeight: TKRIniCfgParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Section = &#39;MainForm&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ValueType = icvtInteger</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DefaultValue = &#39;320&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Encrypt = False</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;object cfgMFWidth: TKRIniCfgParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Section = &#39;MainForm&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ValueType = icvtInteger</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DefaultValue = &#39;400&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Encrypt = False</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;object cfgMFIsMaximized: TKRIniCfgParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Section = &#39;MainForm&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ValueType = icvtBool</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DefaultValue = &#39;False&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Encrypt = False</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">end</div></ol></div></div></div></div><br>
<br>
Содержимое ini файла<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">[MainForm]</div><div class="code_line">cfgMFHeight=188</div><div class="code_line">cfgMFWidth=234</div><div class="code_line">cfgMFLeft=720</div><div class="code_line">cfgMFTop=154</div><div class="code_line">cfgMFIsMaximized=0</div></ol></div></div></div></div><br>
<span class="b-attach" data-size="86678" data-hits="1274" data-attach-id="60932" data-attach-post-id="3809341">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3809341&amp;attach_id=60932' title='Скачать файл' target='_blank'>FormPosToFile.zip</a> (, : 1274)
		</span>]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809340</guid>
        <pubDate>Thu, 05 Sep 2019 12:58:17 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809340</link>
        <description><![CDATA[DimaBr: &quot;Вы, наверно, не правильно поняли цель моего компонента. Цель не сохранение значения свойства какого либо объекта, а цель сохранение конфигурационных данных программы. &quot;<br>
А размеры компонентов на форме - это не конфигурационные данные ?<br>
Или ваш компонент умеет сохранять только Edit.Text и ничего более ?<br>
<br>
Если уж так пошло, то какой смысл во внешних компонентах TKRIniCfgParam, если каждый их них соответствуют отдельному CheckBox-у. Уж проще в сам CheckBox добавить свойство Config: TKRIniConfig; <br>
И сразу избавиться от огромного количества невидимых компонентов на форме (и в описании формы)<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">TKRBKCheckBox = class(TCheckBox)</div><div class="code_line">&nbsp;&nbsp;property Config: TKRIniConfig read fConfig write SetConfig;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
или так<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">TSaveProp = class(TPersistent)</div><div class="code_line">&nbsp;&nbsp;property Config: TKRIniConfig read fConfig write SetConfig;</div><div class="code_line">&nbsp;&nbsp;property Encrypt .....;</div><div class="code_line">&nbsp;&nbsp;property DefaultValue ....;</div><div class="code_line">&nbsp;&nbsp;property TypProp .....;</div><div class="code_line">end;</div><div class="code_line">TKRBKCheckBox = class(TCheckBox)</div><div class="code_line">&nbsp;&nbsp;property Config: TSaveProp read fConfig write SetConfig;</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809333</guid>
        <pubDate>Thu, 05 Sep 2019 12:32:39 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809333</link>
        <description><![CDATA[kandiral: Вы, наверно, не правильно поняли цель моего компонента. Цель не сохранение значения свойства какого либо объекта, а цель сохранение конфигурационных данных программы. <br><br>Я думал делать аналогичный компонент и под реестр, но так как часто возникают проблемы доступа к реестру, я предпочитаю хранить все настройки в файлах.<br><br>8. Я имею ввиду код набранный вручную. В моем случае его явно меньше. Цель упростить работу программисту, а тот код про который Вы говорите генерируется автоматически.<br><br>9. Не вижу смысла хранить картинки в ini файле]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809324</guid>
        <pubDate>Thu, 05 Sep 2019 12:17:47 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809324</link>
        <description><![CDATA[DimaBr: 1. &quot;Создать два параметра, один строковый другой булевы&quot; - в вашем случае указывается имя компонента, который и является полем для сохранения в файл. Какое свойство компонента сохраняется в файл - НЕПОНЯТНО.<br>
<br>
5. Я пишу текст а Edit, нажимаю ENTER. Да я подтверждаю, что закончил ввод текста, но куда девается фокус ? Почему я не могу дальше редактировать текст. Раз уж на то пошло, то в DOSе нажание ENTER - это окончание редактирование и переход в следующее окно. А если подумать, то ENTER - переход в другое окно редактирования, а сам выход из текущего окна и есть окончание редактирования, поскольку перейти можно и мышкой.<br>
<br>
6. &quot;У меня возникла задача изменить способ ввода. Я ее решил таким путем и заказчика это устроило.&quot; - а причём тут заказчик ? Вы же толкаете свой продукт в массы. А в массах, выход с поля редактирование подразумевает окончание ввода.<br>
<br>
8 &quot;Допустим есть задача при запуске приложения прочитать один параметр из конфигурационного файла&quot;.<br>
Ну тут вы явно лукавите, в вашем случае строчек гораздо больше<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><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">with TIniFile.Create(ExtractFilePath(Application.ExeName)+&#39;config.ini&#39;) do begin</div><div class="code_line">&nbsp;&nbsp;param1 := ReadInteger(&#39;Section1&#39;,&#39;Param1&#39;,0);</div><div class="code_line">&nbsp;&nbsp;Free;</div><div class="code_line">end;</div></ol></div></div></div></div><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">TMyForm = class(TForm)</div><div class="code_line">&nbsp;&nbsp;KRIniConfig: TKRIniConfig;</div><div class="code_line">&nbsp;&nbsp;cfgParam1: TKRIniCfgParam;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;param1:=cfgParam1.Value;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
и плюс куча строк в dfm файле. Где выигрыш ?</div></div><br>
<br>
9. А что может понадобится сохранять из TImageList в ini файл?<br>
Картинки<br>
<br>
10. А как будет работать такой код ? Какой из CheckBox-ов сохраниться в файл ?<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">TMyForm = class(TForm)</div><div class="code_line">&nbsp;&nbsp;CheckBoxParam: TKRIniCfgParam;</div><div class="code_line">&nbsp;&nbsp;KRBKCheckBox1: TKRBKCheckBox;</div><div class="code_line">&nbsp;&nbsp;KRBKCheckBox2: TKRBKCheckBox;</div><div class="code_line">end;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;KRBKCheckBox1.CfgParam := CheckBoxParam;</div><div class="code_line">&nbsp;&nbsp;KRBKCheckBox2.CfgParam := CheckBoxParam;</div></ol></div></div></div></div><br>
<br>
11. Ваша &quot;сохранялка&quot; работает только с вашими компонентами. Подход неправильный. Нужно чтобы:<br>
a) сохранялка работала с любым компонентом<br>
б) можно было сохранять любое (хотя бы любое простое) свойство<br>
в) можно было добавить метод сохранения/чтения собственного типа<br>
г) сохранять на только в файл, но и в реестр<br>
д) удобный редактор, в котором можно выбрать компонент и какие свойства сохранять]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809306</guid>
        <pubDate>Thu, 05 Sep 2019 09:23:17 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809306</link>
        <description><![CDATA[kandiral: 1. Создать два параметра, один строковый другой булевы<br>
3. Я сделал доступ к TIniFile для того, чтобы при необходимости можно было с ним работать напрямую. Пока у меня возникает такая необходимость когда нужно работать с массивом параметров.<br>
4. Я в своих программах использую только свои конфигурационные параметры. И если один из параметров изменяется в одном месте, то при помощи мониторинг, другие объекты которые используют этот параметр будут знать об этом. Мониторинг это аналог события OnChange, только по событию можно вызвать один метод одного объекта, а в моем случае изменение могут видеть множество объектов<br>
5. Вы не правы. Окончание ввода подтверждается кнопкой Enter еще со времен доса. В Windows подтверждением вводя, в основном является кнопка &quot;Ok&quot;. Я делал независимый компонент, который при изменении должен выдать значение.<br>
6. У меня возникла задача изменить способ ввода. Я ее решил таким путем и заказчика это устроило.<br>
8. Допустим есть задача при запуске приложения прочитать один параметр из конфигурационного файла<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">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;cfg: TIniFile;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;cfg:=TIniFile.Create(ExtractFilePath(Application.ExeName)+&#39;config.ini&#39;);</div><div class="code_line">&nbsp;&nbsp;param1:=cfg.read(&#39;Section1&#39;,&#39;Param1&#39;,0);</div><div class="code_line">&nbsp;&nbsp;cfg.Free;</div><div class="code_line">end;</div></ol></div></div></div></div><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">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;param1:=cfgParam1.Value;</div><div class="code_line">end;</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-09-05T09:40:35+00:00">05.09.19, 09:40</time></span></span><br>
9. TMemo, TCheckListBox, TTreeView это сохранение массивов. Как я писал выше, сохранение массивов я и сам делаю напрямую через TIniFile. Я думаю, сделаю это в ближайшее время. TDateTimePicker - это double значение, вполне можно сохранить через мой компонент. А что может понадобится сохранять из TImageList в ini файл?]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809301</guid>
        <pubDate>Thu, 05 Sep 2019 08:41:56 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809301</link>
        <description><![CDATA[DimaBr: 1. Например сохранить Caption + Checked у CheckBox<br>3. &quot;Через свойство KRIniConfig.IniFile можно напрямую работать с ini файлом и сохранять все что угодно.&quot; - тогда в чём преимущество компонента, если кода для сохранения писать столько же ?<br>4. Всё равно не понятно зачем нужен монитор, если сторонние изменения никак не мониторятся<br>5. Окончание редактирования предполагает при потере фокуса. Это стандартное в любой программе. Зачем придумывать своё - непонятно.<br>6. Потеря фокуса и окончание редактирование не связано между собой<br>8. Повторяю, что количество строк кода не уменьшается, или я буду писать <br>Param1.Value:=123; Ini.WriteInteger(Section,&#39;Edit1&#39;,123); - одинаково<br>Если это делается в одном единственном месте программы, то где автоматизация ?<br>9. Как с помощью вашего компонента сохранить TMemo, TCheckListBox, TDateTimePicker, TTreeView, TImageList ?]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809289</guid>
        <pubDate>Thu, 05 Sep 2019 07:07:30 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809289</link>
        <description><![CDATA[kandiral: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>1. Как с помощью компонента сохранить другие свойства, кроме Value</div></div><br>
Какие другие свойства? Свойства Value принимает тип Variant и в зависимости от выставленного типа параметра можно устанавливать целочисленное, дробное, строковое или логическое значение<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>2. Где окно редактора компонента. Редактирование в Структуре весьма специфично.</div></div><br>
Окно редактирования я не делал, но если будет такая необходимость сделаю<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>3. Как с помощью компонента сохранить свойства произвольного компонента, а не только с вашей библиотеки.</div></div><br>
Мой компонент работает через TIniFile. Через свойство KRIniConfig.IniFile можно напрямую работать с ini файлом и сохранять все что угодно.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>4. &quot;Монитор параметров&quot; работает если мы вручную изменяем INI файл ?</div></div><br>
Нет. Мониторинг работает только если изменения производились через объект класса TKRIniCfgParam<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>5. &quot;Редактирование происходит по нажатию клавиши Enter&quot; - это вы свои правила редактирование придумали ?</div></div><br>
Это не относится к данной теме, так как это другой компонент KRValueEdit. Да это было моё решение, чтобы установка значения и последующее событие о его изменении генерировались один раз по завершению ввода, а не при добавлении каждого символа. <br>
Одному из заказчиков не понравилось, что нужно нажимать Enter, как и Вам. Тогда я сделал ввод по потере фокуса, то есть фокус перешел на другой визуальный элемент, обрабатывается значение. <br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>6. &quot;Нажали Enter&quot; и куда делся фокус с компонента ? Чтобы продолжить ввод, нужно снова кликать мышкой в компонент ?</div></div><br>
Это опять же вопрос по компоненту KRValueEdit. Нажатие Enter предполагает окончание ввода значения<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>7. &quot;Вводим двоечку, а Минимальный предел 100&quot;. После возвращение в редактирование компонента введённая &quot;Двоечка&quot; исчезла. А если я вводил 10ти значное число и оно не прошло по условию, мне опять его вводить ?</div></div><br>
И снова KRValueEdit. Да, на данный момент так. Это можно исправить. Я и выкладываю свои разработки для выявления ошибок и модернизации.<br>
<br>
8. Я преследую цель уменьшить количество кода при разработке программ. В случае с TIniFile Вам понадобится указать расположение файла, создать объект, удалить объект, сохранять имена параметров и секций(в противном случае будут проблемы при ошибке в одну букву или регистр символа). В моём примере форма настроек с сохранением данных в конфигурационный файл имеет всего один метод с двумя строками кода, а используя TIniFile и стандартные визуальные компоненты сколько строк кода нужно для реализации той же задачи?]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809285</guid>
        <pubDate>Thu, 05 Sep 2019 06:11:06 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809285</link>
        <description><![CDATA[DimaBr: 1. Как с помощью компонента сохранить другие свойства, кроме Value<br>
2. Где окно редактора компонента. Редактирование в Структуре весьма специфично.<br>
3. Как с помощью компонента сохранить свойства произвольного компонента, а не только с вашей библиотеки.<br>
4. &quot;Монитор параметров&quot; работает если мы вручную изменяем INI файл ?<br>
5. &quot;Редактирование происходит по нажатию клавиши Enter&quot; - это вы свои правила редактирование придумали ?<br>
6. &quot;Нажали Enter&quot; и куда делся фокус с компонента ? Чтобы продолжить ввод, нужно снова кликать мышкой в компонент ?<br>
7. &quot;Вводим двоечку, а Минимальный предел 100&quot;. После возвращение в редактирование компонента введённая &quot;Двоечка&quot; исчезла. А если я вводил 10ти значное число и оно не прошло по условию, мне опять его вводить ?<br>
8. <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">//Чем принципиально отличается</div><div class="code_line">Param1.Value:=123; // Запись значения 123 в параметр Param1</div><div class="code_line">i:=Param1.Value; // Чтение значения из параметра Param1 в переменную i</div><div class="code_line">// от</div><div class="code_line">Ini.WriteString(Section,&#39;Edit1&#39;,Edit.Text); // Запись значения 123 в параметр Param1</div><div class="code_line">Edit.Text := Ini.ReadString(Section,&#39;Edit1&#39;,&#39;&#39;); // Чтение значения из параметра</div></ol></div></div></div></div>]]></description>
        <author>DimaBr</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809217</guid>
        <pubDate>Wed, 04 Sep 2019 15:03:23 +0000</pubDate>
        <title>Работа с ini файлами в Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=415665&amp;view=findpost&amp;p=3809217</link>
        <description><![CDATA[kandiral: KRIniConfig - компонент для работы с ini файлами, представляет из себя коллекцию компонентов, где каждый компонент является параметром конфигурационного файла. Имя параметра является и именем компонента, что дает возможность обращаться к нему прямо из кода программы.<br>
<br>
Описание свойств и методов:<br>
<a class='tag-url' href='https://kandiral.ru/delphi/kriniconfig.pas.html' target='_blank'>https://kandiral.ru/delphi/kriniconfig.pas.html</a><br>
<br>
Пример использования с видеообзором:<br>
<a class='tag-url' href='https://kandiral.ru/delphi/primer_ispolzovaniya_kriniconfig.html' target='_blank'>https://kandiral.ru/delphi/primer_ispolzova...riniconfig.html</a>]]></description>
        <author>kandiral</author>
        <category>Delphi: Разработка компонентов</category>
      </item>
	
      </channel>
      </rss>
	