Разные вопросы Delphi — среда быстрой разработки, где в качестве языка программирования используется Object Pascal. На сегодняшний день позволяет разрабатывать ПО для Microsoft Windows, Mac OS, iOS и Android и входит в состав Embarcadero RAD Studio https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy.feed 2022-09-13T05:00:16+07:00 Delphi help info@delphi-hlp.ru Joomla! - Open Source Content Management Вызов процедуры, имя которой содержится в переменной 2013-08-19T19:04:34+07:00 2013-08-19T19:04:34+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/vyzov-protsedury-imya-kotoroj-soderzhitsya-v-peremennoj.html Super User toto44@inbox.ru <p><span style="font-style: italic; color: #000000;">Как я могу вызвать процедуру, чье имя хранится в таблице, списке, и т.п.? Другими словами, я хочу сохранить имя процедуры в переменной и для ее вызова обращаться к значению этой переменной. Какие предложения? </span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">unit</span><span class="f_CodeExample" style="color: #000000;"> ProcDict;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span><span class="f_CodeExample" style="color: #000000;"> MyProc = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;">(s: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> RegisterProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; proc: MyProc);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> ExecuteProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; arg: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> Classes;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> ProcDict: TStringList;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> RegisterProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; proc: MyProc);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict.AddObject(procName, TObject(@proc));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> ExecuteProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; arg: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;">: Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;"> := ProcDict.IndexOf(ProcName);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;"> &gt;= </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> MyProc(ProcDict.objects[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;">])(arg);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Можно вставить обработку исключительной ситуации - сообщение об ошибке</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">initialization</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict := TStringList.Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict.Sorted := true;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finalization</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict.Free;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 10pt;">вы могли бы создать StringList как показано ниже:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StringList.Create; StringList.AddObject(</span><span class="f_CodeExample" style="color: #ff0000;">'Proc1'</span><span class="f_CodeExample" style="color: #000000;">,@Proc1);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StringList.AddObject(</span><span class="f_CodeExample" style="color: #ff0000;">'Proc2'</span><span class="f_CodeExample" style="color: #000000;">,@Proc2); </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 10pt;">и затем реализовать это в вашей программе:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">myFunc: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> Stringlist.indexof(S) = -</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> MessageDlg(</span><span class="f_CodeExample" style="color: #ff0000;">'Не понял процедуру '</span><span class="f_CodeExample" style="color: #000000;"> + S, mtError, [mbOk], </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">else</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> @myFunc := Stringlist.Objects[Stringlist.indexof(S)];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> myFunc;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p><span style="color: #000000;">RAM </span></p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> <p><span style="font-style: italic; color: #000000;">Как я могу вызвать процедуру, чье имя хранится в таблице, списке, и т.п.? Другими словами, я хочу сохранить имя процедуры в переменной и для ее вызова обращаться к значению этой переменной. Какие предложения? </span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">unit</span><span class="f_CodeExample" style="color: #000000;"> ProcDict;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span><span class="f_CodeExample" style="color: #000000;"> MyProc = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;">(s: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> RegisterProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; proc: MyProc);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> ExecuteProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; arg: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> Classes;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> ProcDict: TStringList;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> RegisterProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; proc: MyProc);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict.AddObject(procName, TObject(@proc));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> ExecuteProc(procName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; arg: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;">: Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;"> := ProcDict.IndexOf(ProcName);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;"> &gt;= </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> MyProc(ProcDict.objects[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">index</span><span class="f_CodeExample" style="color: #000000;">])(arg);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Можно вставить обработку исключительной ситуации - сообщение об ошибке</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">initialization</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict := TStringList.Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict.Sorted := true;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finalization</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ProcDict.Free;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 10pt;">вы могли бы создать StringList как показано ниже:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StringList.Create; StringList.AddObject(</span><span class="f_CodeExample" style="color: #ff0000;">'Proc1'</span><span class="f_CodeExample" style="color: #000000;">,@Proc1);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StringList.AddObject(</span><span class="f_CodeExample" style="color: #ff0000;">'Proc2'</span><span class="f_CodeExample" style="color: #000000;">,@Proc2); </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 10pt;">и затем реализовать это в вашей программе:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">myFunc: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> Stringlist.indexof(S) = -</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> MessageDlg(</span><span class="f_CodeExample" style="color: #ff0000;">'Не понял процедуру '</span><span class="f_CodeExample" style="color: #000000;"> + S, mtError, [mbOk], </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">else</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> @myFunc := Stringlist.Objects[Stringlist.indexof(S)];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> myFunc;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p><span style="color: #000000;">RAM </span></p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> Выполнение процедуры по адресу 2013-08-19T19:05:36+07:00 2013-08-19T19:05:36+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/vypolnenie-protsedury-po-adresu.html Super User toto44@inbox.ru <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> F: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;">(x, y: double);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">@F := GetProcAddress(hDLL, </span><span class="f_CodeExample" style="color: #ff0000;">'SOMEPROC'</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">F(</span><span class="f_CodeExample" style="color: #800000;">3</span><span class="f_CodeExample" style="color: #000000;">, </span><span class="f_CodeExample" style="color: #800000;">4</span><span class="f_CodeExample" style="color: #000000;">);</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="color: #000000;">Ключом здесь является использование оператора @, располагаемого с левой части процедурной переменной. Он говорит компилятору: "Не волнуйтесь здесь о совместимости типов, просто присвойте полученный в правой части выражения адрес переменной в левой части выражения (и процедурные переменные являются переменными-указателями).</span></p> <p> </p> <p><span style="color: #000000;">- Peter Below </span></p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> F: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;">(x, y: double);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">@F := GetProcAddress(hDLL, </span><span class="f_CodeExample" style="color: #ff0000;">'SOMEPROC'</span><span class="f_CodeExample" style="color: #000000;">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">F(</span><span class="f_CodeExample" style="color: #800000;">3</span><span class="f_CodeExample" style="color: #000000;">, </span><span class="f_CodeExample" style="color: #800000;">4</span><span class="f_CodeExample" style="color: #000000;">);</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="color: #000000;">Ключом здесь является использование оператора @, располагаемого с левой части процедурной переменной. Он говорит компилятору: "Не волнуйтесь здесь о совместимости типов, просто присвойте полученный в правой части выражения адрес переменной в левой части выражения (и процедурные переменные являются переменными-указателями).</span></p> <p> </p> <p><span style="color: #000000;">- Peter Below </span></p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> Информация о TClass 2013-08-19T19:06:38+07:00 2013-08-19T19:06:38+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/informatsiya-o-tclass.html Super User toto44@inbox.ru <p><span style="color: #000000;">TObject - "корневой" объект.</span></p> <p> </p> <p><span style="color: #000000;">TClass определен как Class of TObject. Переменная Class НЕ является указателем на экземпляр объекта. Это указатель на *ТИП* объекта Class.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Obj1: TWinControl;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Class1: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">of</span><span class="f_CodeExample" style="color: #000000;"> TWinControl;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 9pt;">Class1 := TWinControl</span><span style="color: #000000;"> - правильное присваивание. Мы не распределяем память, у нас нет экземпляра TWinControl, мы не можем вызвать Class1.OnClick.</span></p> <p> </p> <p><span style="color: #000000;">Class1 - это *тип* TWinControl с тем же контекстом использования, что и "TWinControl".</span></p> <p> </p> <p><span style="color: #000000;">Поскольку мы можем использовать TWinControl.Create, то также мы можем использовать и Class1.Create, при этом создавая новый экземпляр TWinControl.</span></p> <p> </p> <p><span style="color: #000000;">С тех пор как TEdit - наследник TWinControl, </span><span style="font-family: 'Courier New'; font-size: 9pt;">Class1 := TEdit</span><span style="color: #000000;"> правильное присваивание и Class1.Create создает экземпляр TEdit.</span></p> <p> </p> <p><span style="color: #000000;">Если у меня имеется переменная Obj2: TWinControl, и даже если я присвоил экземпляр TListbox Obj2, я не могу ссылаться на Obj2.Items, поскольку Obj2 определен как TWinControl, а TWinControl не имеет свойства Items.</span></p> <p> </p> <p><span style="color: #000000;">Те же характеристики верны и для Class1. Class1 определен как Class of TWinControl, поэтому они имеют общий конструктор, определенный в классе TWinControl.</span></p> <p> </p> <p><span style="color: #000000;">Это не пугает меня при создании дополнительных типов:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyObj1 = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TEdit)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> CreateMagic; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">virtual</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyObj2 = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TMyObj1)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> CreateMagic; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyClass = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">of</span><span class="f_CodeExample" style="color: #000000;"> TMyObj;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj1: TMyObj1;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj2: TMyObj2;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> MakeAnother(AClass: TMyClass): TMyObj1;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := AClass.CreateMagic;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj2 := TMyObj2.CreateMagic;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj1 := MakeAnother(MyObj2.ClassType);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> <p><span style="color: #000000;">TObject - "корневой" объект.</span></p> <p> </p> <p><span style="color: #000000;">TClass определен как Class of TObject. Переменная Class НЕ является указателем на экземпляр объекта. Это указатель на *ТИП* объекта Class.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Obj1: TWinControl;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Class1: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">of</span><span class="f_CodeExample" style="color: #000000;"> TWinControl;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 9pt;">Class1 := TWinControl</span><span style="color: #000000;"> - правильное присваивание. Мы не распределяем память, у нас нет экземпляра TWinControl, мы не можем вызвать Class1.OnClick.</span></p> <p> </p> <p><span style="color: #000000;">Class1 - это *тип* TWinControl с тем же контекстом использования, что и "TWinControl".</span></p> <p> </p> <p><span style="color: #000000;">Поскольку мы можем использовать TWinControl.Create, то также мы можем использовать и Class1.Create, при этом создавая новый экземпляр TWinControl.</span></p> <p> </p> <p><span style="color: #000000;">С тех пор как TEdit - наследник TWinControl, </span><span style="font-family: 'Courier New'; font-size: 9pt;">Class1 := TEdit</span><span style="color: #000000;"> правильное присваивание и Class1.Create создает экземпляр TEdit.</span></p> <p> </p> <p><span style="color: #000000;">Если у меня имеется переменная Obj2: TWinControl, и даже если я присвоил экземпляр TListbox Obj2, я не могу ссылаться на Obj2.Items, поскольку Obj2 определен как TWinControl, а TWinControl не имеет свойства Items.</span></p> <p> </p> <p><span style="color: #000000;">Те же характеристики верны и для Class1. Class1 определен как Class of TWinControl, поэтому они имеют общий конструктор, определенный в классе TWinControl.</span></p> <p> </p> <p><span style="color: #000000;">Это не пугает меня при создании дополнительных типов:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyObj1 = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TEdit)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> CreateMagic; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">virtual</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyObj2 = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TMyObj1)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> CreateMagic; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyClass = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">of</span><span class="f_CodeExample" style="color: #000000;"> TMyObj;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj1: TMyObj1;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj2: TMyObj2;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> MakeAnother(AClass: TMyClass): TMyObj1;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := AClass.CreateMagic;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj2 := TMyObj2.CreateMagic;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObj1 := MakeAnother(MyObj2.ClassType);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> Как внести изменения в код VCL? 2013-08-19T17:09:01+07:00 2013-08-19T17:09:01+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/kak-vnesti-izmeneniya-v-kod-vcl.html Super User toto44@inbox.ru <p><span style="color: #000000;">Примечание: внесение изменений в VCL не поддерживается Borland или Borland Developer Support.</span></p> <p><span style="color: #000000;">-Но если Вы решили сделать это...</span></p> <p><span style="color: #000000;">Изменения в код VCL никогда не должны вносится в секцию "interface" модуля - только в секцию "implimentation". Наиболее безопасный способ внести изменения в VCL - создать новый каталог названный "исправленный VCL". Скопируйте файл VCL который Вы хотите изменить в этот каталог. Внесите изменения (лучше прокомментировать их) в этот файл. Затем добавьте путь к Вашему каталогу "исправленный VCL" в самое начало "library path". Перезапустите Delphi/C++ Builder и перекомпилируйте Ваш проект. "library path" можно изменить в меню: </span></p> <p> </p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 1 : Options | Environment | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 2 : Tools | Options | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 3 : Tools | Environment Options | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 4 : Tools | Environment Options | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">C++ Builder : Options | Environment | Library</span></p> <p><span style="color: #000000;">Примечание: внесение изменений в VCL не поддерживается Borland или Borland Developer Support.</span></p> <p><span style="color: #000000;">-Но если Вы решили сделать это...</span></p> <p><span style="color: #000000;">Изменения в код VCL никогда не должны вносится в секцию "interface" модуля - только в секцию "implimentation". Наиболее безопасный способ внести изменения в VCL - создать новый каталог названный "исправленный VCL". Скопируйте файл VCL который Вы хотите изменить в этот каталог. Внесите изменения (лучше прокомментировать их) в этот файл. Затем добавьте путь к Вашему каталогу "исправленный VCL" в самое начало "library path". Перезапустите Delphi/C++ Builder и перекомпилируйте Ваш проект. "library path" можно изменить в меню: </span></p> <p> </p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 1 : Options | Environment | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 2 : Tools | Options | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 3 : Tools | Environment Options | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">Delphi 4 : Tools | Environment Options | Library</span></p> <p><span style="font-family: 'Courier New'; color: #000000; font-size: 9pt;">C++ Builder : Options | Environment | Library</span></p> Как забыть о необходимости разрушать объекты? 2013-08-19T19:08:27+07:00 2013-08-19T19:08:27+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/kak-zabyt-o-neobkhodimosti-razrushat-ob-ekty.html Super User toto44@inbox.ru <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ISelfDestroy = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//forget about GUID, if you are not using COM</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TSelfDestroy = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TInterfacedObject, ISelfDestroy)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FObject: TObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(AObject: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TSelfDestroy.Create(AObject: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FObject := AObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TSelfDestroy.Destroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FreeAndNil(FObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// So when you use, just do like this...</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObject: TMyObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SelfDestroy: TSelfDestroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObject := TMyObject.Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SelfDestroy := TSelfDestroy.Create(MyObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// The MyObject will free automatically as soon as TSelfDestroy</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// goes out of scope.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Carry on your code here...</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с сайта</span>https://www.swissdelphicenter.ch/en/tipsindex</p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ISelfDestroy = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//forget about GUID, if you are not using COM</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TSelfDestroy = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TInterfacedObject, ISelfDestroy)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FObject: TObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(AObject: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TSelfDestroy.Create(AObject: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FObject := AObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TSelfDestroy.Destroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FreeAndNil(FObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// So when you use, just do like this...</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObject: TMyObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SelfDestroy: TSelfDestroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyObject := TMyObject.Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SelfDestroy := TSelfDestroy.Create(MyObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// The MyObject will free automatically as soon as TSelfDestroy</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// goes out of scope.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Carry on your code here...</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с сайта</span>https://www.swissdelphicenter.ch/en/tipsindex</p> Как можно работать с объектами не заботясь об их разрушении? 2013-08-19T17:01:39+07:00 2013-08-19T17:01:39+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/kak-mozhno-rabotat-s-ob-ektami-ne-zabotyas-ob-ikh-razrushenii.html Super User toto44@inbox.ru <p><span style="color: #000000;">Вначале сделаем интерфейс для нашего объекта:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">IAutoClean = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> [</span><span class="f_CodeExample" style="color: #ff0000;">'{61D9CBA6-B1CE-4297-9319-66CC86CE6922}'</span><span class="f_CodeExample" style="color: #000000;">]</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TAutoClean = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TInterfacedObject, IAutoClean)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FObj: TObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(AObj: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TAutoClean.Create(AObj: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FObj := AObj;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TAutoClean.Destroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FreeAndNil(FObj);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="color: #000000;">А теперь будем использовать его вместо объекта:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">a: IAutoClean;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//must declare as local variable, so when this procedure finished, it's out of scope</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">o: TOpenDialog; </span><span class="f_CodeExample" style="color: #000080;">//any component</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">o := TOpenDialog.Create(self);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">a := TAutoClean.Create(o);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> o.Execute </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ShowMessage(o.FileName);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с Delphi Knowledge Base: </span>https://www.baltsoft</p> <p><span style="color: #000000;">Вначале сделаем интерфейс для нашего объекта:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">IAutoClean = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> [</span><span class="f_CodeExample" style="color: #ff0000;">'{61D9CBA6-B1CE-4297-9319-66CC86CE6922}'</span><span class="f_CodeExample" style="color: #000000;">]</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TAutoClean = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TInterfacedObject, IAutoClean)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FObj: TObject;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(AObj: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TAutoClean.Create(AObj: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FObj := AObj;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TAutoClean.Destroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FreeAndNil(FObj);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="color: #000000;">А теперь будем использовать его вместо объекта:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">a: IAutoClean;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//must declare as local variable, so when this procedure finished, it's out of scope</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">o: TOpenDialog; </span><span class="f_CodeExample" style="color: #000080;">//any component</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">o := TOpenDialog.Create(self);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">a := TAutoClean.Create(o);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> o.Execute </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ShowMessage(o.FileName);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с Delphi Knowledge Base: </span>https://www.baltsoft</p> Как создать компонент во время выполнения приложения? 2013-08-19T17:06:34+07:00 2013-08-19T17:06:34+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/kak-sozdat-komponent-vo-vremya-vypolneniya-prilozheniya.html Super User toto44@inbox.ru <p><span style="font-family: 'Times New Roman'; color: #000000;">При создании визуальных контролов в runtime, важным моментом является назначение родительских свойств и использование метода SetBounds, чтобы этот контрол стал видимы.</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TForm1 = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TForm) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> MyLabel: TLabel; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> LabelClick(Sender: TObject); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> CreateControl; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.LabelClick(Sender: TObject); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Label</span><span class="f_CodeExample" style="color: #000000;">).Caption := ... </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.CreateControl; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ALeft, ATop, AWidth, AHeight: Integer; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ALeft := </span><span class="f_CodeExample" style="color: #800000;">10</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ATop := </span><span class="f_CodeExample" style="color: #800000;">10</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">AWidth := </span><span class="f_CodeExample" style="color: #800000;">50</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">AHeight := </span><span class="f_CodeExample" style="color: #800000;">13</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel := TLabel.Create(Self); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.Parent := Self; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">:=</span><span class="f_CodeExample" style="color: #ff0000;">'LabelName'</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.SetBounds(ALeft, ATop, AWidth, AHeight); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.OnClick := LabelClick; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">https://forum.sources</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">При создании визуальных контролов в runtime, важным моментом является назначение родительских свойств и использование метода SetBounds, чтобы этот контрол стал видимы.</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TForm1 = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TForm) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> MyLabel: TLabel; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> LabelClick(Sender: TObject); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> CreateControl; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.LabelClick(Sender: TObject); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Label</span><span class="f_CodeExample" style="color: #000000;">).Caption := ... </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.CreateControl; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ALeft, ATop, AWidth, AHeight: Integer; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ALeft := </span><span class="f_CodeExample" style="color: #800000;">10</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ATop := </span><span class="f_CodeExample" style="color: #800000;">10</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">AWidth := </span><span class="f_CodeExample" style="color: #800000;">50</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">AHeight := </span><span class="f_CodeExample" style="color: #800000;">13</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel := TLabel.Create(Self); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.Parent := Self; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">:=</span><span class="f_CodeExample" style="color: #ff0000;">'LabelName'</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.SetBounds(ALeft, ATop, AWidth, AHeight); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MyLabel.OnClick := LabelClick; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">https://forum.sources</span></p> Как создать копию произвольного компонента? 2013-08-19T17:09:40+07:00 2013-08-19T17:09:40+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/kak-sozdat-kopiyu-proizvolnogo-komponenta.html Super User toto44@inbox.ru <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{ </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">Здесь пpоцедypа CreateClone, котоpая кpеатит компонентy ОЧЕHЬ ПОХОЖУЮ на </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">входнyю. С такими же значениями свойств. Пpисваивается все, кpоме методов. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">}</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> CreateClone(Src: TComponent): TComponent; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">F: TStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">F := </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">nil</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F.WriteComponent(Src); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> RegisterClass(TComponentClass(Src.ClassType)); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F.Position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := F.ReadComponent(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">nil</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{ </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">Здесь пpоцедypа CreateClone, котоpая кpеатит компонентy ОЧЕHЬ ПОХОЖУЮ на </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">входнyю. С такими же значениями свойств. Пpисваивается все, кpоме методов. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">}</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> CreateClone(Src: TComponent): TComponent; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">F: TStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">F := </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">nil</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F.WriteComponent(Src); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> RegisterClass(TComponentClass(Src.ClassType)); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F.Position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := F.ReadComponent(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">nil</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> F.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> Клонирование объектов 2013-08-19T19:11:28+07:00 2013-08-19T19:11:28+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/klonirovanie-ob-ektov.html Super User toto44@inbox.ru <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Создать</span><span style="font-family: 'Times New Roman'; color: #000000;">копию</span><span style="font-family: 'Times New Roman'; color: #000000;">объекта</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi </span><span style="font-family: 'Times New Roman'; color: #000000;">очень</span><span style="font-family: 'Times New Roman'; color: #000000;">просто</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Конвертируем</span><span style="font-family: 'Times New Roman'; color: #000000;">объект</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">затем</span><span style="font-family: 'Times New Roman'; color: #000000;"> - </span><span style="font-family: 'Times New Roman'; color: #000000;">обратно</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">При</span><span style="font-family: 'Times New Roman'; color: #000000;">этом</span><span style="font-family: 'Times New Roman'; color: #000000;">будут</span><span style="font-family: 'Times New Roman'; color: #000000;">продублированы</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">свойства</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">кроме</span><span style="font-family: 'Times New Roman'; color: #000000;">ссылок</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчики</span><span style="font-family: 'Times New Roman'; color: #000000;">событий</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Для</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразования</span><span style="font-family: 'Times New Roman'; color: #000000;">компонента</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">обратно</span><span style="font-family: 'Times New Roman'; color: #000000;">нам</span><span style="font-family: 'Times New Roman'; color: #000000;">понадобятся</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;">потоков</span><span style="font-family: 'Times New Roman'; color: #000000;"> WriteComponent(TComponent) </span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;"> ReadComponent(TComponent). </span><span style="font-family: 'Times New Roman'; color: #000000;">При</span><span style="font-family: 'Times New Roman'; color: #000000;">этом</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">поток</span><span style="font-family: 'Times New Roman'; color: #000000;">записывается</span><span style="font-family: 'Times New Roman'; color: #000000;">двоичный</span><span style="font-family: 'Times New Roman'; color: #000000;">ресурс</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Последний</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">помощью</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;"> ObjectBinaryToText </span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразовать</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Создадим</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">основе</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразования</span><span style="font-family: 'Times New Roman'; color: #000000;">:</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> ComponentToString(Component: TComponent): </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ss: TStringStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ss := TStringStream.Create(</span><span class="f_CodeExample" style="color: #ff0000;">' '</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.WriteComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectBinaryToText(ms, ss); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ss.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := ss.DataString; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ss.free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> StringToComponent(Component: TComponent; Value: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StrStream:TStringStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StrStream := TStringStream.Create(Value); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectTextToBinary(StrStream, ms); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.ReadComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> StrStream.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p style="margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">С</span><span style="font-family: 'Times New Roman'; color: #000000;">помощью</span><span style="font-family: 'Times New Roman'; color: #000000;">пары</span><span style="font-family: 'Times New Roman'; color: #000000;">этих</span><span style="font-family: 'Times New Roman'; color: #000000;">функций</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">можем</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразовать</span><span style="font-family: 'Times New Roman'; color: #000000;">любой</span><span style="font-family: 'Times New Roman'; color: #000000;">компонент</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">затем</span><span style="font-family: 'Times New Roman'; color: #000000;">проинициализировать</span><span style="font-family: 'Times New Roman'; color: #000000;">другой</span><span style="font-family: 'Times New Roman'; color: #000000;">компонент</span><span style="font-family: 'Times New Roman'; color: #000000;">того</span><span style="font-family: 'Times New Roman'; color: #000000;">же</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;">этими</span><span style="font-family: 'Times New Roman'; color: #000000;">данными</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Ниже</span><span style="font-family: 'Times New Roman'; color: #000000;">приведен</span><span style="font-family: 'Times New Roman'; color: #000000;">ресурс</span><span style="font-family: 'Times New Roman'; color: #000000;">формы</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">одной</span><span style="font-family: 'Times New Roman'; color: #000000;">кнопкой</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчика</span><span style="font-family: 'Times New Roman'; color: #000000;">нажатия</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">эту</span><span style="font-family: 'Times New Roman'; color: #000000;">кнопку</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">object</span><span class="f_CodeExample" style="color: #000000;"> Form1: TForm1 </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Left = </span><span class="f_CodeExample" style="color: #800000;">262</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Top = </span><span class="f_CodeExample" style="color: #800000;">129</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Width = </span><span class="f_CodeExample" style="color: #800000;">525</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Height = </span><span class="f_CodeExample" style="color: #800000;">153</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Caption = </span><span class="f_CodeExample" style="color: #ff0000;">'Form1'</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Color = clBtnFace </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Charset = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">DEFAULT</span><span class="f_CodeExample" style="color: #000000;">_CHARSET </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Color = clWindowText </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Height = -</span><span class="f_CodeExample" style="color: #800000;">11</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> = </span><span class="f_CodeExample" style="color: #ff0000;">'MS Sans Serif'</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Style = [] </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">OldCreateOrder = False </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Scaled = False </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">PixelsPerInch = </span><span class="f_CodeExample" style="color: #800000;">96</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TextHeight = </span><span class="f_CodeExample" style="color: #800000;">13</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">object</span><span class="f_CodeExample" style="color: #000000;"> Button1: TButton </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Left = </span><span class="f_CodeExample" style="color: #800000;">16</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Top = </span><span class="f_CodeExample" style="color: #800000;">32</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Width = </span><span class="f_CodeExample" style="color: #800000;">57</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Height = </span><span class="f_CodeExample" style="color: #800000;">49</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Caption = </span><span class="f_CodeExample" style="color: #ff0000;">'Caption'</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TabOrder = </span><span class="f_CodeExample" style="color: #800000;">0</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> OnClick = Button1Click </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button: TButton; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">OldName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button := TButton.Create(self); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...сохраняем имя компонента </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">OldName := (Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton).</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...стираем имя компонента, чтобы избежать конфликта имен.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...После этого Button1 станет = nil. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton).</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> := </span><span class="f_CodeExample" style="color: #ff0000;">''</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...преобразуем в текст и обратно </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StringToComponent( Button, ComponentToString(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton) ); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...дадим компоненту уникальное(?) имя </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> := </span><span class="f_CodeExample" style="color: #ff0000;">'Button'</span><span class="f_CodeExample" style="color: #000000;"> + IntToStr(random(</span><span class="f_CodeExample" style="color: #800000;">1000</span><span class="f_CodeExample" style="color: #000000;">)); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...вернем исходному компоненту имя.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...После этого Button1 станет снова указывать на объект. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton).</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> := OldName; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...размещаем новую кнопку справа от исходной </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button.parent := self; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button1.Tag := Button1.Tag + </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button.Left := Button.Left + Button.Width * Button1.Tag + </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p style="margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Приведенный</span><span style="font-family: 'Times New Roman'; color: #000000;">метод</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">дублирует</span><span style="font-family: 'Times New Roman'; color: #000000;">указатели</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчики</span><span style="font-family: 'Times New Roman'; color: #000000;">событий</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Однако</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">если</span><span style="font-family: 'Times New Roman'; color: #000000;">таким</span><span style="font-family: 'Times New Roman'; color: #000000;">образом</span><span style="font-family: 'Times New Roman'; color: #000000;">дублировать</span><span style="font-family: 'Times New Roman'; color: #000000;">формы</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">то</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">дочерние</span><span style="font-family: 'Times New Roman'; color: #000000;">компоненты</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчики</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранятся</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: right; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">составление</span><span style="font-family: 'Times New Roman'; color: #000000;">статьи</span><span style="font-family: 'Times New Roman'; color: #000000;">: </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Андрей</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Чудин</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ЦПР</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ТД</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Библио</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">-</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Глобус</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из  https://delphi.chertenok</span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Создать</span><span style="font-family: 'Times New Roman'; color: #000000;">копию</span><span style="font-family: 'Times New Roman'; color: #000000;">объекта</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi </span><span style="font-family: 'Times New Roman'; color: #000000;">очень</span><span style="font-family: 'Times New Roman'; color: #000000;">просто</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Конвертируем</span><span style="font-family: 'Times New Roman'; color: #000000;">объект</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">затем</span><span style="font-family: 'Times New Roman'; color: #000000;"> - </span><span style="font-family: 'Times New Roman'; color: #000000;">обратно</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">При</span><span style="font-family: 'Times New Roman'; color: #000000;">этом</span><span style="font-family: 'Times New Roman'; color: #000000;">будут</span><span style="font-family: 'Times New Roman'; color: #000000;">продублированы</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">свойства</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">кроме</span><span style="font-family: 'Times New Roman'; color: #000000;">ссылок</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчики</span><span style="font-family: 'Times New Roman'; color: #000000;">событий</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Для</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразования</span><span style="font-family: 'Times New Roman'; color: #000000;">компонента</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">обратно</span><span style="font-family: 'Times New Roman'; color: #000000;">нам</span><span style="font-family: 'Times New Roman'; color: #000000;">понадобятся</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;">потоков</span><span style="font-family: 'Times New Roman'; color: #000000;"> WriteComponent(TComponent) </span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;"> ReadComponent(TComponent). </span><span style="font-family: 'Times New Roman'; color: #000000;">При</span><span style="font-family: 'Times New Roman'; color: #000000;">этом</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">поток</span><span style="font-family: 'Times New Roman'; color: #000000;">записывается</span><span style="font-family: 'Times New Roman'; color: #000000;">двоичный</span><span style="font-family: 'Times New Roman'; color: #000000;">ресурс</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Последний</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">помощью</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;"> ObjectBinaryToText </span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразовать</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Создадим</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">основе</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразования</span><span style="font-family: 'Times New Roman'; color: #000000;">:</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> ComponentToString(Component: TComponent): </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ss: TStringStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ss := TStringStream.Create(</span><span class="f_CodeExample" style="color: #ff0000;">' '</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.WriteComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectBinaryToText(ms, ss); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ss.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Result := ss.DataString; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ss.free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> StringToComponent(Component: TComponent; Value: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StrStream:TStringStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StrStream := TStringStream.Create(Value); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectTextToBinary(StrStream, ms); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.ReadComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> StrStream.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p style="margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">С</span><span style="font-family: 'Times New Roman'; color: #000000;">помощью</span><span style="font-family: 'Times New Roman'; color: #000000;">пары</span><span style="font-family: 'Times New Roman'; color: #000000;">этих</span><span style="font-family: 'Times New Roman'; color: #000000;">функций</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">можем</span><span style="font-family: 'Times New Roman'; color: #000000;">преобразовать</span><span style="font-family: 'Times New Roman'; color: #000000;">любой</span><span style="font-family: 'Times New Roman'; color: #000000;">компонент</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">затем</span><span style="font-family: 'Times New Roman'; color: #000000;">проинициализировать</span><span style="font-family: 'Times New Roman'; color: #000000;">другой</span><span style="font-family: 'Times New Roman'; color: #000000;">компонент</span><span style="font-family: 'Times New Roman'; color: #000000;">того</span><span style="font-family: 'Times New Roman'; color: #000000;">же</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;">этими</span><span style="font-family: 'Times New Roman'; color: #000000;">данными</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Ниже</span><span style="font-family: 'Times New Roman'; color: #000000;">приведен</span><span style="font-family: 'Times New Roman'; color: #000000;">ресурс</span><span style="font-family: 'Times New Roman'; color: #000000;">формы</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">одной</span><span style="font-family: 'Times New Roman'; color: #000000;">кнопкой</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">текст</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчика</span><span style="font-family: 'Times New Roman'; color: #000000;">нажатия</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">эту</span><span style="font-family: 'Times New Roman'; color: #000000;">кнопку</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">object</span><span class="f_CodeExample" style="color: #000000;"> Form1: TForm1 </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Left = </span><span class="f_CodeExample" style="color: #800000;">262</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Top = </span><span class="f_CodeExample" style="color: #800000;">129</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Width = </span><span class="f_CodeExample" style="color: #800000;">525</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Height = </span><span class="f_CodeExample" style="color: #800000;">153</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Caption = </span><span class="f_CodeExample" style="color: #ff0000;">'Form1'</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Color = clBtnFace </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Charset = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">DEFAULT</span><span class="f_CodeExample" style="color: #000000;">_CHARSET </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Color = clWindowText </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Height = -</span><span class="f_CodeExample" style="color: #800000;">11</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> = </span><span class="f_CodeExample" style="color: #ff0000;">'MS Sans Serif'</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Font.Style = [] </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">OldCreateOrder = False </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Scaled = False </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">PixelsPerInch = </span><span class="f_CodeExample" style="color: #800000;">96</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TextHeight = </span><span class="f_CodeExample" style="color: #800000;">13</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">object</span><span class="f_CodeExample" style="color: #000000;"> Button1: TButton </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Left = </span><span class="f_CodeExample" style="color: #800000;">16</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Top = </span><span class="f_CodeExample" style="color: #800000;">32</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Width = </span><span class="f_CodeExample" style="color: #800000;">57</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Height = </span><span class="f_CodeExample" style="color: #800000;">49</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Caption = </span><span class="f_CodeExample" style="color: #ff0000;">'Caption'</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TabOrder = </span><span class="f_CodeExample" style="color: #800000;">0</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> OnClick = Button1Click </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button: TButton; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">OldName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button := TButton.Create(self); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...сохраняем имя компонента </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">OldName := (Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton).</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...стираем имя компонента, чтобы избежать конфликта имен.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...После этого Button1 станет = nil. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton).</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> := </span><span class="f_CodeExample" style="color: #ff0000;">''</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...преобразуем в текст и обратно </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">StringToComponent( Button, ComponentToString(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton) ); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...дадим компоненту уникальное(?) имя </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> := </span><span class="f_CodeExample" style="color: #ff0000;">'Button'</span><span class="f_CodeExample" style="color: #000000;"> + IntToStr(random(</span><span class="f_CodeExample" style="color: #800000;">1000</span><span class="f_CodeExample" style="color: #000000;">)); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...вернем исходному компоненту имя.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...После этого Button1 станет снова указывать на объект. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">(Sender </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">as</span><span class="f_CodeExample" style="color: #000000;"> TButton).</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> := OldName; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...размещаем новую кнопку справа от исходной </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button.parent := self; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button1.Tag := Button1.Tag + </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Button.Left := Button.Left + Button.Width * Button1.Tag + </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p style="margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Приведенный</span><span style="font-family: 'Times New Roman'; color: #000000;">метод</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">дублирует</span><span style="font-family: 'Times New Roman'; color: #000000;">указатели</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчики</span><span style="font-family: 'Times New Roman'; color: #000000;">событий</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Однако</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">если</span><span style="font-family: 'Times New Roman'; color: #000000;">таким</span><span style="font-family: 'Times New Roman'; color: #000000;">образом</span><span style="font-family: 'Times New Roman'; color: #000000;">дублировать</span><span style="font-family: 'Times New Roman'; color: #000000;">формы</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">то</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">дочерние</span><span style="font-family: 'Times New Roman'; color: #000000;">компоненты</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">обработчики</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранятся</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: right; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">составление</span><span style="font-family: 'Times New Roman'; color: #000000;">статьи</span><span style="font-family: 'Times New Roman'; color: #000000;">: </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Андрей</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Чудин</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ЦПР</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ТД</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Библио</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">-</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Глобус</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из  https://delphi.chertenok</span></p> Работа метода Assign 2013-08-19T19:07:31+07:00 2013-08-19T19:07:31+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/rabota-metoda-assign.html Super User toto44@inbox.ru <p><span style="color: #000000;">В общем случае, утверждение "Destination := Source" не идентично утверждению "Destination.Assign(Source)".</span></p> <p> </p> <p><span style="color: #000000;">Утверждение "Destination := Source" принуждает Destination ссылаться на тот же объект, что и Source, а "Destination.Assign(Source)" копирует содержание объектных ссылок Source в объектные ссылки Destination.</span></p> <p> </p> <p><span style="color: #000000;">Если Destination является свойством некоторого объекта (тем не менее, и свойство не является ссылкой на другой объект, как, например, свойство формы ActiveControl, или свойство DataSource элементов управления для работы с базами данных), тогда утверждение "Destination := Source" идентично утверждению "Destination.Assign(Source)". Это объясняет, почему LB.Items := MemStr работает, когда MemStr := LB.Items нет. </span></p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> <p><span style="color: #000000;">В общем случае, утверждение "Destination := Source" не идентично утверждению "Destination.Assign(Source)".</span></p> <p> </p> <p><span style="color: #000000;">Утверждение "Destination := Source" принуждает Destination ссылаться на тот же объект, что и Source, а "Destination.Assign(Source)" копирует содержание объектных ссылок Source в объектные ссылки Destination.</span></p> <p> </p> <p><span style="color: #000000;">Если Destination является свойством некоторого объекта (тем не менее, и свойство не является ссылкой на другой объект, как, например, свойство формы ActiveControl, или свойство DataSource элементов управления для работы с базами данных), тогда утверждение "Destination := Source" идентично утверждению "Destination.Assign(Source)". Это объясняет, почему LB.Items := MemStr работает, когда MemStr := LB.Items нет. </span></p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из Советов по Delphi от </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">Валентина Озерова</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Сборник Kuliba</span></p> Сгруппировать свойства наподобие Font 2013-08-19T19:10:14+07:00 2013-08-19T19:10:14+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/sgruppirovat-svojstva-napodobie-font.html Super User toto44@inbox.ru <p><span style="color: #000000;">...чтобы сгруппировать свойства наподобие Font, вам необходимо создать наследника (подкласс) TPersistent. Например:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TBoolList = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TPersistent)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FValue1: Boolean;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FValue2: Boolean</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Value1: Boolean </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FValue1 </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FValue1;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Value2: Boolean </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FValue2 </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FValue2;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="color: #000000;">Затем, в вашем новом компоненте, для этого подкласса необходимо создать ivar. Чтобы все работало правильно, вам необходимо перекрыть конструктор.</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyPanel = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TCustomPanel)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FBoolList: TBoolList;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create( AOwner: TComponent ); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> BoolList: TBoolList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FBoolList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FBoolLisr;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="color: #000000;">Затем добавьте следующий код в ваш конструктор:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TMyPanel.Create( AOwner: TComponent );</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create( AOwner );</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FBoolList := TBoolList.Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с </span>https://delphiworld.narod</p> <p><span style="color: #000000;">...чтобы сгруппировать свойства наподобие Font, вам необходимо создать наследника (подкласс) TPersistent. Например:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TBoolList = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TPersistent)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FValue1: Boolean;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FValue2: Boolean</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Value1: Boolean </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FValue1 </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FValue1;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Value2: Boolean </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FValue2 </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FValue2;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="color: #000000;">Затем, в вашем новом компоненте, для этого подкласса необходимо создать ivar. Чтобы все работало правильно, вам необходимо перекрыть конструктор.</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMyPanel = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TCustomPanel)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FBoolList: TBoolList;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create( AOwner: TComponent ); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> BoolList: TBoolList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FBoolList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FBoolLisr;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="color: #000000;">Затем добавьте следующий код в ваш конструктор:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TMyPanel.Create( AOwner: TComponent );</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create( AOwner );</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FBoolList := TBoolList.Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с </span>https://delphiworld.narod</p> Сохранение и загрузка данных в объекты на примере коллекций. 2013-08-19T19:12:45+07:00 2013-08-19T19:12:45+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/sokhranenie-i-zagruzka-dannykh-v-ob-ekty-na-primere-kollektsij.html Super User toto44@inbox.ru <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Если</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">Вашей</span><span style="font-family: 'Times New Roman'; color: #000000;">программе</span><span style="font-family: 'Times New Roman'; color: #000000;">используются</span><span style="font-family: 'Times New Roman'; color: #000000;">классы</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">описания</span><span style="font-family: 'Times New Roman'; color: #000000;">объектов</span><span style="font-family: 'Times New Roman'; color: #000000;">некоторой</span><span style="font-family: 'Times New Roman'; color: #000000;">предметной</span><span style="font-family: 'Times New Roman'; color: #000000;">области</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">то</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">инициализирующие</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">хранить</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">базе</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Но</span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">выбрать</span><span style="font-family: 'Times New Roman'; color: #000000;">гораздо</span><span style="font-family: 'Times New Roman'; color: #000000;">более</span><span style="font-family: 'Times New Roman'; color: #000000;">продуктивный</span><span style="font-family: 'Times New Roman'; color: #000000;">подход</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">который</span><span style="font-family: 'Times New Roman'; color: #000000;">доступен</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi/C++ Builder. </span><span style="font-family: 'Times New Roman'; color: #000000;">Среда</span><span style="font-family: 'Times New Roman'; color: #000000;">разработки</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi/C++ Builder </span><span style="font-family: 'Times New Roman'; color: #000000;">хранит</span><span style="font-family: 'Times New Roman'; color: #000000;">ресурсы</span><span style="font-family: 'Times New Roman'; color: #000000;">всех</span><span style="font-family: 'Times New Roman'; color: #000000;">форм</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">двоичных</span><span style="font-family: 'Times New Roman'; color: #000000;">или</span><span style="font-family: 'Times New Roman'; color: #000000;">текстовых</span><span style="font-family: 'Times New Roman'; color: #000000;">файлах</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">эта</span><span style="font-family: 'Times New Roman'; color: #000000;">возможность</span><span style="font-family: 'Times New Roman'; color: #000000;">доступна</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">разрабатываемых</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">ее</span><span style="font-family: 'Times New Roman'; color: #000000;">помощью</span><span style="font-family: 'Times New Roman'; color: #000000;">программ</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">данном</span><span style="font-family: 'Times New Roman'; color: #000000;">случае</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">оценки</span><span style="font-family: 'Times New Roman'; color: #000000;">удобств</span><span style="font-family: 'Times New Roman'; color: #000000;">такого</span><span style="font-family: 'Times New Roman'; color: #000000;">подхода</span><span style="font-family: 'Times New Roman'; color: #000000;">лучше</span><span style="font-family: 'Times New Roman'; color: #000000;">всего</span><span style="font-family: 'Times New Roman'; color: #000000;">рассмотреть</span><span style="font-family: 'Times New Roman'; color: #000000;">конкретный</span><span style="font-family: 'Times New Roman'; color: #000000;">пример</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Необходимо</span><span style="font-family: 'Times New Roman'; color: #000000;">реализовать</span><span style="font-family: 'Times New Roman'; color: #000000;">хранение</span><span style="font-family: 'Times New Roman'; color: #000000;">информации</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">некоей</span><span style="font-family: 'Times New Roman'; color: #000000;">службе</span><span style="font-family: 'Times New Roman'; color: #000000;">рассылки</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">ее</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиках</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Будем</span><span style="font-family: 'Times New Roman'; color: #000000;">хранить</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">почтовом</span><span style="font-family: 'Times New Roman'; color: #000000;">сервере</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиков</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Каждая</span><span style="font-family: 'Times New Roman'; color: #000000;">запись</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчике</span><span style="font-family: 'Times New Roman'; color: #000000;">хранит</span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">личные</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">адрес</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">тем</span><span style="font-family: 'Times New Roman'; color: #000000;">(</span><span style="font-family: 'Times New Roman'; color: #000000;">или</span><span style="font-family: 'Times New Roman'; color: #000000;">каталогов</span><span style="font-family: 'Times New Roman'; color: #000000;">), </span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">которые</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">подписан</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Как</span><span style="font-family: 'Times New Roman'; color: #000000;">большие</span><span style="font-family: 'Times New Roman'; color: #000000;">поклонники</span><span style="font-family: 'Times New Roman'; color: #000000;">Гради</span><span style="font-family: 'Times New Roman'; color: #000000;">Буча</span><span style="font-family: 'Times New Roman'; color: #000000;"> (Grady Booch), </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">будучи</span><span style="font-family: 'Times New Roman'; color: #000000;">заинтересованы</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">удобной</span><span style="font-family: 'Times New Roman'; color: #000000;">организации</span><span style="font-family: 'Times New Roman'; color: #000000;">кода</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">организуем</span><span style="font-family: 'Times New Roman'; color: #000000;">информацию</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиках</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">виде</span><span style="font-family: 'Times New Roman'; color: #000000;">объектов</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">данной</span><span style="font-family: 'Times New Roman'; color: #000000;">задачи</span><span style="font-family: 'Times New Roman'; color: #000000;">идеально</span><span style="font-family: 'Times New Roman'; color: #000000;">подходит</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollection, </span><span style="font-family: 'Times New Roman'; color: #000000;">реализующий</span><span style="font-family: 'Times New Roman'; color: #000000;">всю</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимую</span><span style="font-family: 'Times New Roman'; color: #000000;">функциональность</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">работы</span><span style="font-family: 'Times New Roman'; color: #000000;">со</span><span style="font-family: 'Times New Roman'; color: #000000;">списками</span><span style="font-family: 'Times New Roman'; color: #000000;">типизированных</span><span style="font-family: 'Times New Roman'; color: #000000;">объектов</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Для</span><span style="font-family: 'Times New Roman'; color: #000000;">этого</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">наследуемся</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollection, </span><span style="font-family: 'Times New Roman'; color: #000000;">называя</span><span style="font-family: 'Times New Roman'; color: #000000;">новый</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList - </span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">рассылки</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">создаем</span><span style="font-family: 'Times New Roman'; color: #000000;">наследника</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollectionItem - TMailClient - </span><span style="font-family: 'Times New Roman'; color: #000000;">адресат</span><span style="font-family: 'Times New Roman'; color: #000000;">рассылки</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Последний</span><span style="font-family: 'Times New Roman'; color: #000000;">будет</span><span style="font-family: 'Times New Roman'; color: #000000;">содержать</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимые</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчике</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">реализовывать</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимые</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">работы</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">ним</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Саму</span><span style="font-family: 'Times New Roman'; color: #000000;">коллекцию</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиками</span><span style="font-family: 'Times New Roman'; color: #000000;">нам</span><span style="font-family: 'Times New Roman'; color: #000000;">нужно</span><span style="font-family: 'Times New Roman'; color: #000000;">будет</span><span style="font-family: 'Times New Roman'; color: #000000;">поместить</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">некий</span><span style="font-family: 'Times New Roman'; color: #000000;">базовый</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">который</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">будем</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранять</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">загружать</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">На</span><span style="font-family: 'Times New Roman'; color: #000000;">роль</span><span style="font-family: 'Times New Roman'; color: #000000;">такового</span><span style="font-family: 'Times New Roman'; color: #000000;">подходит</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailer - </span><span style="font-family: 'Times New Roman'; color: #000000;">почтовый</span><span style="font-family: 'Times New Roman'; color: #000000;">клиент</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Начнем</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailClient.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMailClient = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TCollectionItem) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FAddress: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FEnabled: boolean; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FFolders: TStringList; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Files: TStringList; </span><span class="f_CodeExample" style="color: #000080;">// список файлов к рассылке. заполняется в run-time. Сохранению не подлежит </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(Collection: TCollection); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> PickFiles; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FName </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FName; </span><span class="f_CodeExample" style="color: #000080;">// имя адресата </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Address: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FAddress </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FAddress; </span><span class="f_CodeExample" style="color: #000080;">// почтовый адрес </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Enabled: boolean </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FEnabled </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FEnabled </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">default</span><span class="f_CodeExample" style="color: #000000;"> true;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Folders: TStringList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FFolders </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FFolders; </span><span class="f_CodeExample" style="color: #000080;">// список папок (тем) подписки </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p style="margin: 7px 0px;"><br /><span style="font-family: 'Times New Roman'; color: #000000;">Класс</span><span style="font-family: 'Times New Roman'; color: #000000;">содержит</span><span style="font-family: 'Times New Roman'; color: #000000;">сведения</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">имени</span><span style="font-family: 'Times New Roman'; color: #000000;">клиента</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">адресе</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">статусе</span><span style="font-family: 'Times New Roman'; color: #000000;">(Enabled), </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">каталогов</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">которые</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">подписан</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Процедура</span><span style="font-family: 'Times New Roman'; color: #000000;"> PickFiles </span><span style="font-family: 'Times New Roman'; color: #000000;">составляет</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">файлов</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">отправке</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">сохраняет</span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">свойстве</span><span style="font-family: 'Times New Roman'; color: #000000;"> Files</span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList, </span><span style="font-family: 'Times New Roman'; color: #000000;">хранящий</span><span style="font-family: 'Times New Roman'; color: #000000;">объекты</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailClient, </span><span style="font-family: 'Times New Roman'; color: #000000;">приведен</span><span style="font-family: 'Times New Roman'; color: #000000;">ниже</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMailList = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TCollection) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer): TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer; Value: TMailClient); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Add: TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Items[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer]: TMailClient </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetMailClient </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetMailClient; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">default</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Теперь</span><span style="font-family: 'Times New Roman'; color: #000000;">поместим</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList </span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailer. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">него</span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">будет</span><span style="font-family: 'Times New Roman'; color: #000000;">потом</span><span style="font-family: 'Times New Roman'; color: #000000;">включить</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">параметрах</span><span style="font-family: 'Times New Roman'; color: #000000;">доступа</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">почтовому</span><span style="font-family: 'Times New Roman'; color: #000000;">серверу</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">отправки</span><span style="font-family: 'Times New Roman'; color: #000000;">почты</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Он</span><span style="font-family: 'Times New Roman'; color: #000000;">мог</span><span style="font-family: 'Times New Roman'; color: #000000;">бы</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">отправлять</span><span style="font-family: 'Times New Roman'; color: #000000;">почту</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">но</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">данном</span><span style="font-family: 'Times New Roman'; color: #000000;">примере</span><span style="font-family: 'Times New Roman'; color: #000000;">это</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">использовано</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">дабы</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">перегружать</span><span style="font-family: 'Times New Roman'; color: #000000;">код</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">То</span><span style="font-family: 'Times New Roman'; color: #000000;">есть</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">нашем</span><span style="font-family: 'Times New Roman'; color: #000000;">примере</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">выполняет</span><span style="font-family: 'Times New Roman'; color: #000000;">только</span><span style="font-family: 'Times New Roman'; color: #000000;">роль</span><span style="font-family: 'Times New Roman'; color: #000000;">носителя</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиках</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">подписке</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TComponent, </span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;">которого</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">наследуется</span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранить</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">то</span><span style="font-family: 'Times New Roman'; color: #000000;">время</span><span style="font-family: 'Times New Roman'; color: #000000;">как</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollection </span><span style="font-family: 'Times New Roman'; color: #000000;">самостоятельно</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранится</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Только</span><span style="font-family: 'Times New Roman'; color: #000000;">если</span><span style="font-family: 'Times New Roman'; color: #000000;">она</span><span style="font-family: 'Times New Roman'; color: #000000;">агрегирована</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;"> TComponent. </span><span style="font-family: 'Times New Roman'; color: #000000;">Именно</span><span style="font-family: 'Times New Roman'; color: #000000;">это</span><span style="font-family: 'Times New Roman'; color: #000000;">у</span><span style="font-family: 'Times New Roman'; color: #000000;">нас</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">реализовано</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMailer = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TComponent) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FMailList: TMailList; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(AOwner: TComponent); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> MailList: TMailList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FMailList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FMailList; </span><span class="f_CodeExample" style="color: #000080;">// коллекция - список рассылки. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// здесь можно поместить, к примеру, данные о соединении с почтовым сервером </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="margin: 7px 0px;"><br /><span style="font-family: 'Times New Roman'; color: #000000;">Повторюсь</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">данном</span><span style="font-family: 'Times New Roman'; color: #000000;">случае</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">наследуемся</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;"> TComponent, </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">того</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">чтобы</span><span style="font-family: 'Times New Roman'; color: #000000;">была</span><span style="font-family: 'Times New Roman'; color: #000000;">возможности</span><span style="font-family: 'Times New Roman'; color: #000000;">записи</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">объекта</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Свойство</span><span style="font-family: 'Times New Roman'; color: #000000;"> MailList </span><span style="font-family: 'Times New Roman'; color: #000000;">содержит</span><span style="font-family: 'Times New Roman'; color: #000000;">уже</span><span style="font-family: 'Times New Roman'; color: #000000;">объект</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList. </span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Реализация</span><span style="font-family: 'Times New Roman'; color: #000000;">всех</span><span style="font-family: 'Times New Roman'; color: #000000;">приведенных</span><span style="font-family: 'Times New Roman'; color: #000000;">классов</span><span style="font-family: 'Times New Roman'; color: #000000;">приведена</span><span style="font-family: 'Times New Roman'; color: #000000;">ниже</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TMailClient.Create(Collection: TCollection); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Folders := TStringList.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Files := TStringList.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FEnabled := true; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TMailClient.Destroy; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Folders.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Files.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// здесь во всех каталогах Folders ищем файлы для рассылки и помещаем их в Files. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TMailClient.PickFiles; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> i: integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> i:=</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Folders.Count-</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span><span class="f_CodeExample" style="color: #000000;"> CreateFileList(Files, Folders[i]); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Стандартный код при наследовании от класса коллекции: переопределяем тип </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> TMailList.GetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer): TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := TMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Items[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">]); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Стандартный код при наследовании от класса коллекции </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TMailList.SetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer; Value: TMailClient); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Items[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">].Assign(Value); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Стандартный код при наследовании от класса коллекции: переопределяем тип </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> TMailList.Add: TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := TMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Add); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// создаем коллекцию адресатов рассылки TMailList </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TMailer.Create(AOwner: TComponent); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create(AOwner); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MailList := TMailList.Create(TMailClient); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TMailer.Destroy; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MailList.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//--------------------- </span></p> </td> </tr> </tbody> </table> </div> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Функция</span><span style="font-family: 'Times New Roman'; color: #000000;"> CreateFileList </span><span style="font-family: 'Times New Roman'; color: #000000;">создает</span><span style="font-family: 'Times New Roman'; color: #000000;">по</span><span style="font-family: 'Times New Roman'; color: #000000;">каким</span><span style="font-family: 'Times New Roman'; color: #000000;">-</span><span style="font-family: 'Times New Roman'; color: #000000;">либо</span><span style="font-family: 'Times New Roman'; color: #000000;">правилам</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">файлов</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">основе</span><span style="font-family: 'Times New Roman'; color: #000000;">переданного</span><span style="font-family: 'Times New Roman'; color: #000000;">ей</span><span style="font-family: 'Times New Roman'; color: #000000;">списка</span><span style="font-family: 'Times New Roman'; color: #000000;">каталогов</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">обходя</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">рекурсивно</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">К</span><span style="font-family: 'Times New Roman'; color: #000000;">примеру</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">она</span><span style="font-family: 'Times New Roman'; color: #000000;">может</span><span style="font-family: 'Times New Roman'; color: #000000;">быть</span><span style="font-family: 'Times New Roman'; color: #000000;">реализована</span><span style="font-family: 'Times New Roman'; color: #000000;">так</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> CreateFileList(sl: TStringList; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> FilePath: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">sr: TSearchRec; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> ProcessFile; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> (sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> = </span><span class="f_CodeExample" style="color: #ff0000;">'.'</span><span class="f_CodeExample" style="color: #000000;">)</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">or</span><span class="f_CodeExample" style="color: #000000;">(sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> = </span><span class="f_CodeExample" style="color: #ff0000;">'..'</span><span class="f_CodeExample" style="color: #000000;">) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span><span class="f_CodeExample" style="color: #000000;"> exit; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> sr.Attr &lt;&gt; faDirectory </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sl.Add(FilePath + </span><span class="f_CodeExample" style="color: #ff0000;">'\'</span><span class="f_CodeExample" style="color: #000000;"> + sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> sr.Attr = faDirectory </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> CreateFileList(sl, FilePath + </span><span class="f_CodeExample" style="color: #ff0000;">'\'</span><span class="f_CodeExample" style="color: #000000;"> + sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">not</span><span class="f_CodeExample" style="color: #000000;"> DirectoryExists(FilePath) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span><span class="f_CodeExample" style="color: #000000;"> exit; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> FindFirst(FilePath + </span><span class="f_CodeExample" style="color: #ff0000;">'\'</span><span class="f_CodeExample" style="color: #000000;"> + </span><span class="f_CodeExample" style="color: #ff0000;">'*.*'</span><span class="f_CodeExample" style="color: #000000;">, faAnyFile , sr) = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span><span class="f_CodeExample" style="color: #000000;"> ProcessFile; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">while</span><span class="f_CodeExample" style="color: #000000;"> FindNext(sr) = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span><span class="f_CodeExample" style="color: #000000;"> ProcessFile; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FindClose(sr); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">итоге</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">располагаем</span><span style="font-family: 'Times New Roman'; color: #000000;">классом</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailer, </span><span style="font-family: 'Times New Roman'; color: #000000;">содержащим</span><span style="font-family: 'Times New Roman'; color: #000000;">всю</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимую</span><span style="font-family: 'Times New Roman'; color: #000000;">нам</span><span style="font-family: 'Times New Roman'; color: #000000;">информацию</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Теперь</span><span style="font-family: 'Times New Roman'; color: #000000;">перейдем</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">созданию</span><span style="font-family: 'Times New Roman'; color: #000000;">объекта</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранению</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">загрузке</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Mailer: TMailer; </span><span class="f_CodeExample" style="color: #000080;">// это наш объект для хранения данных о почтовой рассылки</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Процедура загрузки данных в объект. Может быть процедурой OnCreate() главной формы.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TfMain.FormCreate(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">sDataFile, sTmp: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">i, j: integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Mailer := TMailer.Create(self); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// будем считать, что данные были сохранены в файл users.dat в каталоге программы</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">sDataFile := ExtractFilePath(ParamStr(</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">)) + </span><span class="f_CodeExample" style="color: #ff0000;">'users.dat'</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...загрузка данных из файла </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> FileExists(sDataFile) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> LoadComponentFromTextFile(Mailer, sDataFile); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{ здесь данные из файла загружены }</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...перебор подписчиков </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> i:=</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Mailer.MailList.Count-</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sTmp := Mailer.MailList[i].</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">; </span><span class="f_CodeExample" style="color: #000080;">//...обращение к имени </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sTmp := Mailer.MailList[i].Address; </span><span class="f_CodeExample" style="color: #000080;">//...обращение к адресу </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//... sTmp - фиктивная переменная. Поменяйте ее на свои. </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Mailer.MailList[i].PickFiles; </span><span class="f_CodeExample" style="color: #000080;">//... поиск файлов для отправки очередному подписчику. </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...перебор найденных файлов к отправке </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> j:=</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Mailer.MailList[i].Files.Count-</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sTmp := Mailer.MailList[i].Files[j]; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">После</span><span style="font-family: 'Times New Roman'; color: #000000;">загрузки</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">можем</span><span style="font-family: 'Times New Roman'; color: #000000;">работать</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">данными</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">нашей</span><span style="font-family: 'Times New Roman'; color: #000000;">коллекции</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиков</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Добавлять</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">удалять</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;"> ( Mailer.MailList.Add; Mailer.MailList.Delete(Index); ). </span><span style="font-family: 'Times New Roman'; color: #000000;">При</span><span style="font-family: 'Times New Roman'; color: #000000;">завершении</span><span style="font-family: 'Times New Roman'; color: #000000;">работы</span><span style="font-family: 'Times New Roman'; color: #000000;">программы</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимо</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранить</span><span style="font-family: 'Times New Roman'; color: #000000;">уже</span><span style="font-family: 'Times New Roman'; color: #000000;">новые</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">тот</span><span style="font-family: 'Times New Roman'; color: #000000;">же</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Процедура сохранения данных из объекта в файл. Может быть процедурой OnDestroy() главной формы.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TfMain.OnDestroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...сохранение данных в файл users.dat</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SaveComponentToTextFile(Mailer, ExtractFilePath(ParamStr(</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">)) + </span><span class="f_CodeExample" style="color: #ff0000;">'users.dat'</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Хранение</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файле</span><span style="font-family: 'Times New Roman'; color: #000000;">позволяет</span><span style="font-family: 'Times New Roman'; color: #000000;">оказаться</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;">использования</span><span style="font-family: 'Times New Roman'; color: #000000;">БД</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">если</span><span style="font-family: 'Times New Roman'; color: #000000;">объем</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">слишком</span><span style="font-family: 'Times New Roman'; color: #000000;">велик</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">нет</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимости</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">совместном</span><span style="font-family: 'Times New Roman'; color: #000000;">доступе</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">данным</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span><br /><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Самое</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">главное</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;"> - </span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">мы</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">организуем</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">все</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">данные</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">в</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">виде</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">набора</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">удобных</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">для</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">работы</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">классов</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">и</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">не</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">тратим</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">время</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">на</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">их</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">сохранение</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">и</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">инициализацию</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">из</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">БД</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">.</span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Приведенный</span><span style="font-family: 'Times New Roman'; color: #000000;">пример</span><span style="font-family: 'Times New Roman'; color: #000000;">лишь</span><span style="font-family: 'Times New Roman'; color: #000000;">иллюстрирует</span><span style="font-family: 'Times New Roman'; color: #000000;">этот</span><span style="font-family: 'Times New Roman'; color: #000000;">подход</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Для</span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">реализации</span><span style="font-family: 'Times New Roman'; color: #000000;">могут</span><span style="font-family: 'Times New Roman'; color: #000000;">подойти</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;"> 2 </span><span style="font-family: 'Times New Roman'; color: #000000;">таблицы</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">БД</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Однако</span><span style="font-family: 'Times New Roman'; color: #000000;">приведенный</span><span style="font-family: 'Times New Roman'; color: #000000;">подход</span><span style="font-family: 'Times New Roman'; color: #000000;">удобен</span><span style="font-family: 'Times New Roman'; color: #000000;">при</span><span style="font-family: 'Times New Roman'; color: #000000;">условии</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">что</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">имеют</span><span style="font-family: 'Times New Roman'; color: #000000;">сложную</span><span style="font-family: 'Times New Roman'; color: #000000;">иерархию</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">К</span><span style="font-family: 'Times New Roman'; color: #000000;">примеру</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">вложенные</span><span style="font-family: 'Times New Roman'; color: #000000;">коллекции</span><span style="font-family: 'Times New Roman'; color: #000000;">разных</span><span style="font-family: 'Times New Roman'; color: #000000;">типов</span><span style="font-family: 'Times New Roman'; color: #000000;">гораздо</span><span style="font-family: 'Times New Roman'; color: #000000;">сложнее</span><span style="font-family: 'Times New Roman'; color: #000000;">разложить</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">базе</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">извлечения</span><span style="font-family: 'Times New Roman'; color: #000000;">потребуется</span><span style="font-family: 'Times New Roman'; color: #000000;"> SQL. </span><span style="font-family: 'Times New Roman'; color: #000000;">Решайте</span><span style="font-family: 'Times New Roman'; color: #000000;">сами</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">судя</span><span style="font-family: 'Times New Roman'; color: #000000;">по</span><span style="font-family: 'Times New Roman'; color: #000000;">своей</span><span style="font-family: 'Times New Roman'; color: #000000;">конкретной</span><span style="font-family: 'Times New Roman'; color: #000000;">задаче</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Далее</span><span style="font-family: 'Times New Roman'; color: #000000;">приведен</span><span style="font-family: 'Times New Roman'; color: #000000;">код</span><span style="font-family: 'Times New Roman'; color: #000000;">функций</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранения</span><span style="font-family: 'Times New Roman'; color: #000000;">/</span><span style="font-family: 'Times New Roman'; color: #000000;">чтения</span><span style="font-family: 'Times New Roman'; color: #000000;">компонента</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...процедура загружает(инициализирует) компонент из текстового файла с ресурсом </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> LoadComponentFromTextFile(Component: TComponent; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> FileName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs: TFileStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs := TFileStream.Create(FileName, fmOpenRead); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectTextToBinary(fs, ms); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.ReadComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> fs.free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...процедура сохраняет компонент в текстовый файл </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SaveComponentToTextFile(Component: TComponent; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> FileName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs: TFileStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs := TFileStream.Create(FileName, fmCreate </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">or</span><span class="f_CodeExample" style="color: #000000;"> fmOpenWrite); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.WriteComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectBinaryToText(ms, fs); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> fs.free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: right; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">составление</span><span style="font-family: 'Times New Roman'; color: #000000;">статьи</span><span style="font-family: 'Times New Roman'; color: #000000;">: </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Андрей</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Чудин</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ЦПР</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ТД</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Библио</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">-</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Глобус</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"> </p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из https://delphi.chertenok</span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Если</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">Вашей</span><span style="font-family: 'Times New Roman'; color: #000000;">программе</span><span style="font-family: 'Times New Roman'; color: #000000;">используются</span><span style="font-family: 'Times New Roman'; color: #000000;">классы</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">описания</span><span style="font-family: 'Times New Roman'; color: #000000;">объектов</span><span style="font-family: 'Times New Roman'; color: #000000;">некоторой</span><span style="font-family: 'Times New Roman'; color: #000000;">предметной</span><span style="font-family: 'Times New Roman'; color: #000000;">области</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">то</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">инициализирующие</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">хранить</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">базе</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Но</span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">выбрать</span><span style="font-family: 'Times New Roman'; color: #000000;">гораздо</span><span style="font-family: 'Times New Roman'; color: #000000;">более</span><span style="font-family: 'Times New Roman'; color: #000000;">продуктивный</span><span style="font-family: 'Times New Roman'; color: #000000;">подход</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">который</span><span style="font-family: 'Times New Roman'; color: #000000;">доступен</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi/C++ Builder. </span><span style="font-family: 'Times New Roman'; color: #000000;">Среда</span><span style="font-family: 'Times New Roman'; color: #000000;">разработки</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi/C++ Builder </span><span style="font-family: 'Times New Roman'; color: #000000;">хранит</span><span style="font-family: 'Times New Roman'; color: #000000;">ресурсы</span><span style="font-family: 'Times New Roman'; color: #000000;">всех</span><span style="font-family: 'Times New Roman'; color: #000000;">форм</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">двоичных</span><span style="font-family: 'Times New Roman'; color: #000000;">или</span><span style="font-family: 'Times New Roman'; color: #000000;">текстовых</span><span style="font-family: 'Times New Roman'; color: #000000;">файлах</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">эта</span><span style="font-family: 'Times New Roman'; color: #000000;">возможность</span><span style="font-family: 'Times New Roman'; color: #000000;">доступна</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">разрабатываемых</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">ее</span><span style="font-family: 'Times New Roman'; color: #000000;">помощью</span><span style="font-family: 'Times New Roman'; color: #000000;">программ</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">данном</span><span style="font-family: 'Times New Roman'; color: #000000;">случае</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">оценки</span><span style="font-family: 'Times New Roman'; color: #000000;">удобств</span><span style="font-family: 'Times New Roman'; color: #000000;">такого</span><span style="font-family: 'Times New Roman'; color: #000000;">подхода</span><span style="font-family: 'Times New Roman'; color: #000000;">лучше</span><span style="font-family: 'Times New Roman'; color: #000000;">всего</span><span style="font-family: 'Times New Roman'; color: #000000;">рассмотреть</span><span style="font-family: 'Times New Roman'; color: #000000;">конкретный</span><span style="font-family: 'Times New Roman'; color: #000000;">пример</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Необходимо</span><span style="font-family: 'Times New Roman'; color: #000000;">реализовать</span><span style="font-family: 'Times New Roman'; color: #000000;">хранение</span><span style="font-family: 'Times New Roman'; color: #000000;">информации</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">некоей</span><span style="font-family: 'Times New Roman'; color: #000000;">службе</span><span style="font-family: 'Times New Roman'; color: #000000;">рассылки</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">ее</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиках</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Будем</span><span style="font-family: 'Times New Roman'; color: #000000;">хранить</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">почтовом</span><span style="font-family: 'Times New Roman'; color: #000000;">сервере</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиков</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Каждая</span><span style="font-family: 'Times New Roman'; color: #000000;">запись</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчике</span><span style="font-family: 'Times New Roman'; color: #000000;">хранит</span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">личные</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">адрес</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">тем</span><span style="font-family: 'Times New Roman'; color: #000000;">(</span><span style="font-family: 'Times New Roman'; color: #000000;">или</span><span style="font-family: 'Times New Roman'; color: #000000;">каталогов</span><span style="font-family: 'Times New Roman'; color: #000000;">), </span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">которые</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">подписан</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Как</span><span style="font-family: 'Times New Roman'; color: #000000;">большие</span><span style="font-family: 'Times New Roman'; color: #000000;">поклонники</span><span style="font-family: 'Times New Roman'; color: #000000;">Гради</span><span style="font-family: 'Times New Roman'; color: #000000;">Буча</span><span style="font-family: 'Times New Roman'; color: #000000;"> (Grady Booch), </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">будучи</span><span style="font-family: 'Times New Roman'; color: #000000;">заинтересованы</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">удобной</span><span style="font-family: 'Times New Roman'; color: #000000;">организации</span><span style="font-family: 'Times New Roman'; color: #000000;">кода</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">организуем</span><span style="font-family: 'Times New Roman'; color: #000000;">информацию</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиках</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">виде</span><span style="font-family: 'Times New Roman'; color: #000000;">объектов</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;"> Delphi </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">данной</span><span style="font-family: 'Times New Roman'; color: #000000;">задачи</span><span style="font-family: 'Times New Roman'; color: #000000;">идеально</span><span style="font-family: 'Times New Roman'; color: #000000;">подходит</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollection, </span><span style="font-family: 'Times New Roman'; color: #000000;">реализующий</span><span style="font-family: 'Times New Roman'; color: #000000;">всю</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимую</span><span style="font-family: 'Times New Roman'; color: #000000;">функциональность</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">работы</span><span style="font-family: 'Times New Roman'; color: #000000;">со</span><span style="font-family: 'Times New Roman'; color: #000000;">списками</span><span style="font-family: 'Times New Roman'; color: #000000;">типизированных</span><span style="font-family: 'Times New Roman'; color: #000000;">объектов</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Для</span><span style="font-family: 'Times New Roman'; color: #000000;">этого</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">наследуемся</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollection, </span><span style="font-family: 'Times New Roman'; color: #000000;">называя</span><span style="font-family: 'Times New Roman'; color: #000000;">новый</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList - </span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">рассылки</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">создаем</span><span style="font-family: 'Times New Roman'; color: #000000;">наследника</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollectionItem - TMailClient - </span><span style="font-family: 'Times New Roman'; color: #000000;">адресат</span><span style="font-family: 'Times New Roman'; color: #000000;">рассылки</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Последний</span><span style="font-family: 'Times New Roman'; color: #000000;">будет</span><span style="font-family: 'Times New Roman'; color: #000000;">содержать</span><span style="font-family: 'Times New Roman'; color: #000000;">все</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимые</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчике</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">реализовывать</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимые</span><span style="font-family: 'Times New Roman'; color: #000000;">функции</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">работы</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">ним</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Саму</span><span style="font-family: 'Times New Roman'; color: #000000;">коллекцию</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиками</span><span style="font-family: 'Times New Roman'; color: #000000;">нам</span><span style="font-family: 'Times New Roman'; color: #000000;">нужно</span><span style="font-family: 'Times New Roman'; color: #000000;">будет</span><span style="font-family: 'Times New Roman'; color: #000000;">поместить</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">некий</span><span style="font-family: 'Times New Roman'; color: #000000;">базовый</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">который</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">будем</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранять</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">загружать</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">На</span><span style="font-family: 'Times New Roman'; color: #000000;">роль</span><span style="font-family: 'Times New Roman'; color: #000000;">такового</span><span style="font-family: 'Times New Roman'; color: #000000;">подходит</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailer - </span><span style="font-family: 'Times New Roman'; color: #000000;">почтовый</span><span style="font-family: 'Times New Roman'; color: #000000;">клиент</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Начнем</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailClient.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMailClient = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TCollectionItem) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FAddress: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FEnabled: boolean; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FFolders: TStringList; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Files: TStringList; </span><span class="f_CodeExample" style="color: #000080;">// список файлов к рассылке. заполняется в run-time. Сохранению не подлежит </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(Collection: TCollection); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> PickFiles; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FName </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FName; </span><span class="f_CodeExample" style="color: #000080;">// имя адресата </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Address: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FAddress </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FAddress; </span><span class="f_CodeExample" style="color: #000080;">// почтовый адрес </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Enabled: boolean </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FEnabled </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FEnabled </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">default</span><span class="f_CodeExample" style="color: #000000;"> true;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Folders: TStringList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FFolders </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FFolders; </span><span class="f_CodeExample" style="color: #000080;">// список папок (тем) подписки </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p style="margin: 7px 0px;"><br /><span style="font-family: 'Times New Roman'; color: #000000;">Класс</span><span style="font-family: 'Times New Roman'; color: #000000;">содержит</span><span style="font-family: 'Times New Roman'; color: #000000;">сведения</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">имени</span><span style="font-family: 'Times New Roman'; color: #000000;">клиента</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">адресе</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">статусе</span><span style="font-family: 'Times New Roman'; color: #000000;">(Enabled), </span><span style="font-family: 'Times New Roman'; color: #000000;">а</span><span style="font-family: 'Times New Roman'; color: #000000;">также</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">каталогов</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">которые</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">подписан</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Процедура</span><span style="font-family: 'Times New Roman'; color: #000000;"> PickFiles </span><span style="font-family: 'Times New Roman'; color: #000000;">составляет</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">файлов</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">отправке</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">сохраняет</span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">свойстве</span><span style="font-family: 'Times New Roman'; color: #000000;"> Files</span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList, </span><span style="font-family: 'Times New Roman'; color: #000000;">хранящий</span><span style="font-family: 'Times New Roman'; color: #000000;">объекты</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailClient, </span><span style="font-family: 'Times New Roman'; color: #000000;">приведен</span><span style="font-family: 'Times New Roman'; color: #000000;">ниже</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMailList = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TCollection) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer): TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer; Value: TMailClient); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Add: TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Items[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer]: TMailClient </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetMailClient </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetMailClient; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">default</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Теперь</span><span style="font-family: 'Times New Roman'; color: #000000;">поместим</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList </span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailer. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">него</span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">будет</span><span style="font-family: 'Times New Roman'; color: #000000;">потом</span><span style="font-family: 'Times New Roman'; color: #000000;">включить</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">параметрах</span><span style="font-family: 'Times New Roman'; color: #000000;">доступа</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">почтовому</span><span style="font-family: 'Times New Roman'; color: #000000;">серверу</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">отправки</span><span style="font-family: 'Times New Roman'; color: #000000;">почты</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Он</span><span style="font-family: 'Times New Roman'; color: #000000;">мог</span><span style="font-family: 'Times New Roman'; color: #000000;">бы</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">отправлять</span><span style="font-family: 'Times New Roman'; color: #000000;">почту</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">но</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">данном</span><span style="font-family: 'Times New Roman'; color: #000000;">примере</span><span style="font-family: 'Times New Roman'; color: #000000;">это</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">использовано</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">дабы</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">перегружать</span><span style="font-family: 'Times New Roman'; color: #000000;">код</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">То</span><span style="font-family: 'Times New Roman'; color: #000000;">есть</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">нашем</span><span style="font-family: 'Times New Roman'; color: #000000;">примере</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">выполняет</span><span style="font-family: 'Times New Roman'; color: #000000;">только</span><span style="font-family: 'Times New Roman'; color: #000000;">роль</span><span style="font-family: 'Times New Roman'; color: #000000;">носителя</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">о</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиках</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">подписке</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Класс</span><span style="font-family: 'Times New Roman'; color: #000000;"> TComponent, </span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;">которого</span><span style="font-family: 'Times New Roman'; color: #000000;">он</span><span style="font-family: 'Times New Roman'; color: #000000;">наследуется</span><span style="font-family: 'Times New Roman'; color: #000000;">можно</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранить</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">то</span><span style="font-family: 'Times New Roman'; color: #000000;">время</span><span style="font-family: 'Times New Roman'; color: #000000;">как</span><span style="font-family: 'Times New Roman'; color: #000000;"> TCollection </span><span style="font-family: 'Times New Roman'; color: #000000;">самостоятельно</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранится</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Только</span><span style="font-family: 'Times New Roman'; color: #000000;">если</span><span style="font-family: 'Times New Roman'; color: #000000;">она</span><span style="font-family: 'Times New Roman'; color: #000000;">агрегирована</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;"> TComponent. </span><span style="font-family: 'Times New Roman'; color: #000000;">Именно</span><span style="font-family: 'Times New Roman'; color: #000000;">это</span><span style="font-family: 'Times New Roman'; color: #000000;">у</span><span style="font-family: 'Times New Roman'; color: #000000;">нас</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">реализовано</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">TMailer = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;">(TComponent) </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FMailList: TMailList; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create(AOwner: TComponent); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> Destroy; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> MailList: TMailList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FMailList </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FMailList; </span><span class="f_CodeExample" style="color: #000080;">// коллекция - список рассылки. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// здесь можно поместить, к примеру, данные о соединении с почтовым сервером </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="margin: 7px 0px;"><br /><span style="font-family: 'Times New Roman'; color: #000000;">Повторюсь</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">данном</span><span style="font-family: 'Times New Roman'; color: #000000;">случае</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">наследуемся</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;"> TComponent, </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">того</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">чтобы</span><span style="font-family: 'Times New Roman'; color: #000000;">была</span><span style="font-family: 'Times New Roman'; color: #000000;">возможности</span><span style="font-family: 'Times New Roman'; color: #000000;">записи</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">объекта</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Свойство</span><span style="font-family: 'Times New Roman'; color: #000000;"> MailList </span><span style="font-family: 'Times New Roman'; color: #000000;">содержит</span><span style="font-family: 'Times New Roman'; color: #000000;">уже</span><span style="font-family: 'Times New Roman'; color: #000000;">объект</span><span style="font-family: 'Times New Roman'; color: #000000;">класса</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailList. </span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Реализация</span><span style="font-family: 'Times New Roman'; color: #000000;">всех</span><span style="font-family: 'Times New Roman'; color: #000000;">приведенных</span><span style="font-family: 'Times New Roman'; color: #000000;">классов</span><span style="font-family: 'Times New Roman'; color: #000000;">приведена</span><span style="font-family: 'Times New Roman'; color: #000000;">ниже</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TMailClient.Create(Collection: TCollection); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Folders := TStringList.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Files := TStringList.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FEnabled := true; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TMailClient.Destroy; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Folders.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Files.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// здесь во всех каталогах Folders ищем файлы для рассылки и помещаем их в Files. </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TMailClient.PickFiles; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> i: integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> i:=</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Folders.Count-</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span><span class="f_CodeExample" style="color: #000000;"> CreateFileList(Files, Folders[i]); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Стандартный код при наследовании от класса коллекции: переопределяем тип </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> TMailList.GetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer): TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := TMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Items[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">]); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Стандартный код при наследовании от класса коллекции </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TMailList.SetMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">: Integer; Value: TMailClient); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Items[</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Index</span><span class="f_CodeExample" style="color: #000000;">].Assign(Value); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Стандартный код при наследовании от класса коллекции: переопределяем тип </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> TMailList.Add: TMailClient; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := TMailClient(</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Add); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// создаем коллекцию адресатов рассылки TMailList </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> TMailer.Create(AOwner: TComponent); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create(AOwner); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MailList := TMailList.Create(TMailClient); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">destructor</span><span class="f_CodeExample" style="color: #000000;"> TMailer.Destroy; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">MailList.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//--------------------- </span></p> </td> </tr> </tbody> </table> </div> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Функция</span><span style="font-family: 'Times New Roman'; color: #000000;"> CreateFileList </span><span style="font-family: 'Times New Roman'; color: #000000;">создает</span><span style="font-family: 'Times New Roman'; color: #000000;">по</span><span style="font-family: 'Times New Roman'; color: #000000;">каким</span><span style="font-family: 'Times New Roman'; color: #000000;">-</span><span style="font-family: 'Times New Roman'; color: #000000;">либо</span><span style="font-family: 'Times New Roman'; color: #000000;">правилам</span><span style="font-family: 'Times New Roman'; color: #000000;">список</span><span style="font-family: 'Times New Roman'; color: #000000;">файлов</span><span style="font-family: 'Times New Roman'; color: #000000;">на</span><span style="font-family: 'Times New Roman'; color: #000000;">основе</span><span style="font-family: 'Times New Roman'; color: #000000;">переданного</span><span style="font-family: 'Times New Roman'; color: #000000;">ей</span><span style="font-family: 'Times New Roman'; color: #000000;">списка</span><span style="font-family: 'Times New Roman'; color: #000000;">каталогов</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">обходя</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">рекурсивно</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">К</span><span style="font-family: 'Times New Roman'; color: #000000;">примеру</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">она</span><span style="font-family: 'Times New Roman'; color: #000000;">может</span><span style="font-family: 'Times New Roman'; color: #000000;">быть</span><span style="font-family: 'Times New Roman'; color: #000000;">реализована</span><span style="font-family: 'Times New Roman'; color: #000000;">так</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> CreateFileList(sl: TStringList; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> FilePath: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">sr: TSearchRec; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> ProcessFile; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> (sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> = </span><span class="f_CodeExample" style="color: #ff0000;">'.'</span><span class="f_CodeExample" style="color: #000000;">)</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">or</span><span class="f_CodeExample" style="color: #000000;">(sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;"> = </span><span class="f_CodeExample" style="color: #ff0000;">'..'</span><span class="f_CodeExample" style="color: #000000;">) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span><span class="f_CodeExample" style="color: #000000;"> exit; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> sr.Attr &lt;&gt; faDirectory </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sl.Add(FilePath + </span><span class="f_CodeExample" style="color: #ff0000;">'\'</span><span class="f_CodeExample" style="color: #000000;"> + sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> sr.Attr = faDirectory </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> CreateFileList(sl, FilePath + </span><span class="f_CodeExample" style="color: #ff0000;">'\'</span><span class="f_CodeExample" style="color: #000000;"> + sr.</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">not</span><span class="f_CodeExample" style="color: #000000;"> DirectoryExists(FilePath) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span><span class="f_CodeExample" style="color: #000000;"> exit; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> FindFirst(FilePath + </span><span class="f_CodeExample" style="color: #ff0000;">'\'</span><span class="f_CodeExample" style="color: #000000;"> + </span><span class="f_CodeExample" style="color: #ff0000;">'*.*'</span><span class="f_CodeExample" style="color: #000000;">, faAnyFile , sr) = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span><span class="f_CodeExample" style="color: #000000;"> ProcessFile; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">while</span><span class="f_CodeExample" style="color: #000000;"> FindNext(sr) = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span><span class="f_CodeExample" style="color: #000000;"> ProcessFile; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FindClose(sr); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">В</span><span style="font-family: 'Times New Roman'; color: #000000;">итоге</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">располагаем</span><span style="font-family: 'Times New Roman'; color: #000000;">классом</span><span style="font-family: 'Times New Roman'; color: #000000;"> TMailer, </span><span style="font-family: 'Times New Roman'; color: #000000;">содержащим</span><span style="font-family: 'Times New Roman'; color: #000000;">всю</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимую</span><span style="font-family: 'Times New Roman'; color: #000000;">нам</span><span style="font-family: 'Times New Roman'; color: #000000;">информацию</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Теперь</span><span style="font-family: 'Times New Roman'; color: #000000;">перейдем</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">созданию</span><span style="font-family: 'Times New Roman'; color: #000000;">объекта</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранению</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">загрузке</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Mailer: TMailer; </span><span class="f_CodeExample" style="color: #000080;">// это наш объект для хранения данных о почтовой рассылки</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Процедура загрузки данных в объект. Может быть процедурой OnCreate() главной формы.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TfMain.FormCreate(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">sDataFile, sTmp: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">i, j: integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Mailer := TMailer.Create(self); </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// будем считать, что данные были сохранены в файл users.dat в каталоге программы</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">sDataFile := ExtractFilePath(ParamStr(</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">)) + </span><span class="f_CodeExample" style="color: #ff0000;">'users.dat'</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...загрузка данных из файла </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> FileExists(sDataFile) </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> LoadComponentFromTextFile(Mailer, sDataFile); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">{ здесь данные из файла загружены }</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...перебор подписчиков </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> i:=</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Mailer.MailList.Count-</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sTmp := Mailer.MailList[i].</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Name</span><span class="f_CodeExample" style="color: #000000;">; </span><span class="f_CodeExample" style="color: #000080;">//...обращение к имени </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sTmp := Mailer.MailList[i].Address; </span><span class="f_CodeExample" style="color: #000080;">//...обращение к адресу </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//... sTmp - фиктивная переменная. Поменяйте ее на свои. </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> Mailer.MailList[i].PickFiles; </span><span class="f_CodeExample" style="color: #000080;">//... поиск файлов для отправки очередному подписчику. </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...перебор найденных файлов к отправке </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> j:=</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> Mailer.MailList[i].Files.Count-</span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> sTmp := Mailer.MailList[i].Files[j]; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">После</span><span style="font-family: 'Times New Roman'; color: #000000;">загрузки</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">мы</span><span style="font-family: 'Times New Roman'; color: #000000;">можем</span><span style="font-family: 'Times New Roman'; color: #000000;">работать</span><span style="font-family: 'Times New Roman'; color: #000000;">с</span><span style="font-family: 'Times New Roman'; color: #000000;">данными</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">нашей</span><span style="font-family: 'Times New Roman'; color: #000000;">коллекции</span><span style="font-family: 'Times New Roman'; color: #000000;">подписчиков</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Добавлять</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">удалять</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;"> ( Mailer.MailList.Add; Mailer.MailList.Delete(Index); ). </span><span style="font-family: 'Times New Roman'; color: #000000;">При</span><span style="font-family: 'Times New Roman'; color: #000000;">завершении</span><span style="font-family: 'Times New Roman'; color: #000000;">работы</span><span style="font-family: 'Times New Roman'; color: #000000;">программы</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимо</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранить</span><span style="font-family: 'Times New Roman'; color: #000000;">уже</span><span style="font-family: 'Times New Roman'; color: #000000;">новые</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">тот</span><span style="font-family: 'Times New Roman'; color: #000000;">же</span><span style="font-family: 'Times New Roman'; color: #000000;">файл</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// Процедура сохранения данных из объекта в файл. Может быть процедурой OnDestroy() главной формы.</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TfMain.OnDestroy;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...сохранение данных в файл users.dat</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SaveComponentToTextFile(Mailer, ExtractFilePath(ParamStr(</span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">)) + </span><span class="f_CodeExample" style="color: #ff0000;">'users.dat'</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Хранение</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">файле</span><span style="font-family: 'Times New Roman'; color: #000000;">позволяет</span><span style="font-family: 'Times New Roman'; color: #000000;">оказаться</span><span style="font-family: 'Times New Roman'; color: #000000;">от</span><span style="font-family: 'Times New Roman'; color: #000000;">использования</span><span style="font-family: 'Times New Roman'; color: #000000;">БД</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">если</span><span style="font-family: 'Times New Roman'; color: #000000;">объем</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">не</span><span style="font-family: 'Times New Roman'; color: #000000;">слишком</span><span style="font-family: 'Times New Roman'; color: #000000;">велик</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;">нет</span><span style="font-family: 'Times New Roman'; color: #000000;">необходимости</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">совместном</span><span style="font-family: 'Times New Roman'; color: #000000;">доступе</span><span style="font-family: 'Times New Roman'; color: #000000;">к</span><span style="font-family: 'Times New Roman'; color: #000000;">данным</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span><br /><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Самое</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">главное</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;"> - </span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">мы</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">организуем</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">все</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">данные</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">в</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">виде</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">набора</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">удобных</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">для</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">работы</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">классов</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">и</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">не</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">тратим</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">время</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">на</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">их</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">сохранение</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">и</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">инициализацию</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">из</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">БД</span><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">.</span><br /><span style="font-family: 'Times New Roman'; color: #000000;">Приведенный</span><span style="font-family: 'Times New Roman'; color: #000000;">пример</span><span style="font-family: 'Times New Roman'; color: #000000;">лишь</span><span style="font-family: 'Times New Roman'; color: #000000;">иллюстрирует</span><span style="font-family: 'Times New Roman'; color: #000000;">этот</span><span style="font-family: 'Times New Roman'; color: #000000;">подход</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Для</span><span style="font-family: 'Times New Roman'; color: #000000;">его</span><span style="font-family: 'Times New Roman'; color: #000000;">реализации</span><span style="font-family: 'Times New Roman'; color: #000000;">могут</span><span style="font-family: 'Times New Roman'; color: #000000;">подойти</span><span style="font-family: 'Times New Roman'; color: #000000;">и</span><span style="font-family: 'Times New Roman'; color: #000000;"> 2 </span><span style="font-family: 'Times New Roman'; color: #000000;">таблицы</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">БД</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">Однако</span><span style="font-family: 'Times New Roman'; color: #000000;">приведенный</span><span style="font-family: 'Times New Roman'; color: #000000;">подход</span><span style="font-family: 'Times New Roman'; color: #000000;">удобен</span><span style="font-family: 'Times New Roman'; color: #000000;">при</span><span style="font-family: 'Times New Roman'; color: #000000;">условии</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">что</span><span style="font-family: 'Times New Roman'; color: #000000;">данные</span><span style="font-family: 'Times New Roman'; color: #000000;">имеют</span><span style="font-family: 'Times New Roman'; color: #000000;">сложную</span><span style="font-family: 'Times New Roman'; color: #000000;">иерархию</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span><span style="font-family: 'Times New Roman'; color: #000000;">К</span><span style="font-family: 'Times New Roman'; color: #000000;">примеру</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">вложенные</span><span style="font-family: 'Times New Roman'; color: #000000;">коллекции</span><span style="font-family: 'Times New Roman'; color: #000000;">разных</span><span style="font-family: 'Times New Roman'; color: #000000;">типов</span><span style="font-family: 'Times New Roman'; color: #000000;">гораздо</span><span style="font-family: 'Times New Roman'; color: #000000;">сложнее</span><span style="font-family: 'Times New Roman'; color: #000000;">разложить</span><span style="font-family: 'Times New Roman'; color: #000000;">в</span><span style="font-family: 'Times New Roman'; color: #000000;">базе</span><span style="font-family: 'Times New Roman'; color: #000000;">данных</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">их</span><span style="font-family: 'Times New Roman'; color: #000000;">извлечения</span><span style="font-family: 'Times New Roman'; color: #000000;">потребуется</span><span style="font-family: 'Times New Roman'; color: #000000;"> SQL. </span><span style="font-family: 'Times New Roman'; color: #000000;">Решайте</span><span style="font-family: 'Times New Roman'; color: #000000;">сами</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #000000;">судя</span><span style="font-family: 'Times New Roman'; color: #000000;">по</span><span style="font-family: 'Times New Roman'; color: #000000;">своей</span><span style="font-family: 'Times New Roman'; color: #000000;">конкретной</span><span style="font-family: 'Times New Roman'; color: #000000;">задаче</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">Далее</span><span style="font-family: 'Times New Roman'; color: #000000;">приведен</span><span style="font-family: 'Times New Roman'; color: #000000;">код</span><span style="font-family: 'Times New Roman'; color: #000000;">функций</span><span style="font-family: 'Times New Roman'; color: #000000;">для</span><span style="font-family: 'Times New Roman'; color: #000000;">сохранения</span><span style="font-family: 'Times New Roman'; color: #000000;">/</span><span style="font-family: 'Times New Roman'; color: #000000;">чтения</span><span style="font-family: 'Times New Roman'; color: #000000;">компонента</span><span style="font-family: 'Times New Roman'; color: #000000;">.</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...процедура загружает(инициализирует) компонент из текстового файла с ресурсом </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> LoadComponentFromTextFile(Component: TComponent; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> FileName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs: TFileStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs := TFileStream.Create(FileName, fmOpenRead); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectTextToBinary(fs, ms); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.ReadComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> fs.free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">//...процедура сохраняет компонент в текстовый файл </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SaveComponentToTextFile(Component: TComponent; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> FileName: </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">string</span><span class="f_CodeExample" style="color: #000000;">); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms: TMemoryStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs: TFileStream; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">fs := TFileStream.Create(FileName, fmCreate </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">or</span><span class="f_CodeExample" style="color: #000000;"> fmOpenWrite); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">ms := TMemoryStream.Create; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">try</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.WriteComponent(Component); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.position := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ObjectBinaryToText(ms, fs); </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">finally</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> ms.Free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> fs.free; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">; </span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p style="text-align: right; margin: 7px 0px;"><span style="font-family: 'Times New Roman'; color: #000000;">составление</span><span style="font-family: 'Times New Roman'; color: #000000;">статьи</span><span style="font-family: 'Times New Roman'; color: #000000;">: </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Андрей</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Чудин</span><span style="font-family: 'Times New Roman'; color: #000000;">, </span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ЦПР</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">ТД</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Библио</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">-</span><span style="font-family: 'Times New Roman'; color: #0000ff; text-decoration: underline;">Глобус</span><span style="font-family: 'Times New Roman'; color: #000000;">. </span></p> <p style="text-align: justify; margin: 7px 0px;"> </p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из https://delphi.chertenok</span></p> Список handle всех окон моего приложения 2013-08-19T19:09:20+07:00 2013-08-19T19:09:20+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/spisok-handle-vsekh-okon-moego-prilozheniya.html Super User toto44@inbox.ru <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> EnumProc(wnd: HWND; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> count: DWORD): Bool; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">stdcall</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Inc(count);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">result := True;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">EnumChildWindows(wnd, @EnumProc, integer(@count));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">count: DWORD;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">count := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">EnumThreadWindows(GetCurrentThreadID, @EnumProc, Integer(@count));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Caption := Format(</span><span class="f_CodeExample" style="color: #ff0000;">'%d window handles in use'</span><span class="f_CodeExample" style="color: #000000;">, [count]);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с сайта</span>https://www.swissdelphicenter.ch/en/tipsindex</p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> EnumProc(wnd: HWND; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> count: DWORD): Bool; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">stdcall</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Inc(count);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">result := True;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">EnumChildWindows(wnd, @EnumProc, integer(@count));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TForm1.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">count: DWORD;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">count := </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">EnumThreadWindows(GetCurrentThreadID, @EnumProc, Integer(@count));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Caption := Format(</span><span class="f_CodeExample" style="color: #ff0000;">'%d window handles in use'</span><span class="f_CodeExample" style="color: #000000;">, [count]);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято с сайта</span>https://www.swissdelphicenter.ch/en/tipsindex</p> Шаблоны в Object Pascal 2013-08-19T17:08:00+07:00 2013-08-19T17:08:00+07:00 https://delphi-hlp.ru/index.php/ob-ektnoe-orientirovanie/raznye-voprosy/shablony-v-object-pascal.html Super User toto44@inbox.ru <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаблоны в Object Pascal</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">( перевод одноименной статьи с сайта community.borland.com )</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Наверное каждый Delphi программист хоть раз общался с программистом C++ и объяснял насколько</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Delphi мощнее и удобнее. Но в некоторый момент, программист C++ заявляет примерно следующее</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">"OK, но Delphi использует Pascal, а значит не поддерживает множественное наследование и шаблоны,</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">поэтому он не так хорош как C++."</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Насчет множественного наследования можно легко заявить, что Delphi имеет интерфейсы, которые</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">прекрасно справляются со своей задачей, но вот насчет шаблонов Вам придётся согласится, так как</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Object Pascal не поддерживает их.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Давайте посмотрим на эту проблему по-внимательней</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаблоны позволяют делать универсальные контейнеры такие как списки, стеки, очереди, и т.д.</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Если Вы хотите осуществить что-то подобное в Delphi, то у Вас есть два пути:</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Использовать контейнер TList, который содержит указатели. В этом случае Вам придётся всё</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">время делать явное приведение типов. </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Сделать подкласс контейнера TCollection или TObjectList, и убрать все методы, зависящие от типов</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">каждый раз, когда Вы захотите использовать новый тип данных. </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Третий вариант, это сделать модуль с универсальным классом контейнера, и каждый раз, когда нужно</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">использовать новый тип данных, нам прийдётся в редакторе искать и вносить исправления. Было бы</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">здорово, если всю эту работу за Вас делал компилятор.... вот этим мы сейчас и займёмся!</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Например, возьмём классы TCollection и TCollectionItem. Когда Вы объявляете нового потомка TCollectionItem</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">, то так же Вы наследуете новый класс от TOwnedCollection и переопределяете большинство методов, чтобы</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">их можно было вызывать с новыми типами.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Давайте посмотрим, как создать универсальную коллекцию шаблонов класса:</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 1: Создайте новый текстовый файл (не юнитовский) с именем TemplateCollectionInterface.pas:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">_COLLECTION_ = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;"> (TOwnedCollection)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _COLLECTION_ITEM_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aOwner : TComponent);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Add : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> FindItemID (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aID : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Insert (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Items [</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer] : _COLLECTION_ITEM_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetItem </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetItem;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Обратите внимание, что нет никаких uses или interface clauses, только универсальное объявление</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">типа, в котором _COLLECTION_ это имя универсальной коллекции класса, а _COLLECTION_ITEM_</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">это имя методов, содержащихся в нашем шаблоне.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 2: Создайте второй текстовый файл и сохраните его как TemplateCollectionImplementation.pas:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aOwner : TComponent);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create (aOwner, _COLLECTION_ITEM_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.Add : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Add);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.FindItemID (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aID : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> FindItemID (aID));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.GetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> GetItem (aIndex));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.Insert (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Insert (aIndex));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.SetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _COLLECTION_ITEM_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> SetItem (aIndex, aValue);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Снова нет никаких uses или interface clauses , а только код универсального типа.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 3: Создайте новый unit-файл с именем MyCollectionUnit.pas:</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">unit</span><span class="f_CodeExample" style="color: #000000;"> MyCollectionUnit;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> Classes;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span><span class="f_CodeExample" style="color: #000000;"> TMyCollectionItem = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;"> (TCollectionItem)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FMyStringData : </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">String</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FMyIntegerData : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> Assign (aSource : TPersistent); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> MyStringData : </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">String</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FMyStringData </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FMyStringData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> MyIntegerData : Integer </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FMyIntegerData </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FMyIntegerData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! Указываем универсальному классу на реальный тип</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_ITEM_ = TMyCollectionItem; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! директива добавления интерфейса универсального класса</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateCollectionInterface}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! переименовываем универсальный класс</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TMyCollection = _COLLECTION_; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> SysUtils;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! препроцессорная директива добавления универсального класса</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateCollectionImplementation}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TMyCollectionItem.Assign (aSource : TPersistent);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> aSource </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">is</span><span class="f_CodeExample" style="color: #000000;"> TMyCollectionItem </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FMyStringData := TMyCollectionItem(aSource).FMyStringData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FMyIntegerData := TMyCollectionItem(aSource).FMyIntegerData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">else</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Вот и всё! Теперь компилятор будет делать всю работу за Вас! Если Вы измените интерфейс</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">универсального класса, то изменения автоматически распространятся на все модули, которые</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">он использует.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Второй пример</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Давайте создадим универсальный класс для динамических массивов.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 1: Создайте текстовый файл с именем TemplateVectorInterface.pas:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">_VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_ = nterface</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLength : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLength (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetFirst : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetFirst (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLast : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLast (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> High : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Low : Integer;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Clear : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Extend (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Contract (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Length : Integer </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetLength </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetLength;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Items [</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer] : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetItems </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetItems; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">default</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> First : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetFirst </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetFirst;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Last : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetLast </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetLast;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">_VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_ = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;"> (TInterfacedObject, _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray : </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">array</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">of</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLength : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLength (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetFirst : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetFirst (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLast : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLast (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> High : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Low : Integer;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Clear : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Extend (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Contract (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 2: Создайте текстовый файл и сохраните его как TemplateVectorImplementation.pas:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SetLength (aLength);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetLength : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := System.Length (FArray);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetLength (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">System.SetLength (FArray, aLength);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := FArray [aIndex];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray [aIndex] := aValue;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.High : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := System.High (FArray);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Low : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := System.Low (FArray);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetFirst : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := FArray [System.Low (FArray)];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetFirst (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray [System.Low (FArray)] := aValue;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetLast : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := FArray [System.High (FArray)];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetLast (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray [System.High (FArray)] := aValue;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Clear : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray := </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Nil</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := Self;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Extend (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">System.SetLength (FArray, System.Length (FArray) + aDelta);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := Self;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Contract (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">System.SetLength (FArray, System.Length (FArray) - aDelta);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := Self;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 9pt;">Шаг </span><span style="font-family: 'Courier New'; color: #800000; font-size: 9pt;">3</span><span style="font-family: 'Courier New'; font-size: 9pt;">: Создайте </span><span style="font-family: 'Courier New'; color: #008000; font-size: 9pt; font-weight: bold;">unit</span><span style="font-family: 'Courier New'; font-size: 9pt;"> файл с именем FloatVectorUnit.pas:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">unit</span><span class="f_CodeExample" style="color: #000000;"> FloatVectorUnit;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> Classes; </span><span class="f_CodeExample" style="color: #000080;">// !!! Модуль "Classes" содержит объявление класса TInterfacedObject</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ = Double; </span><span class="f_CodeExample" style="color: #000080;">// !!! тип данных для класса массива Double</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateVectorInterface}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> IFloatVector = _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_; </span><span class="f_CodeExample" style="color: #000080;">// !!! give the interface a meanigful name</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TFloatVector = _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_; </span><span class="f_CodeExample" style="color: #000080;">// !!! give the class a meanigful name</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> CreateFloatVector (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">) : IFloatVector; </span><span class="f_CodeExample" style="color: #000080;">// !!! дополнительная функция </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateVectorImplementation}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> CreateFloatVector (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">) : IFloatVector; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := TFloatVector.Create (aLength);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Естественно, можно дополнить универсальный класс дополнительными</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">функциями. Всё зависит от Вашей фантазии!</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Использование шаблонов</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Вот пример использования нового векторного интерфейса:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TestFloatVector;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> aFloatVector : IFloatVector;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">aFloatVector := CreateFloatVector;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">aFloatVector.Extend.Last := </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">aFloatVector.Extend.Last := </span><span class="f_CodeExample" style="color: #800000;">2</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> aIndex := aFloatVector.Low </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> aFloatVector.High </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">WriteLn (FloatToStr (aFloatVector [aIndex]));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Единственное требование при создании шаблонов таким способом, это то, что</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">каждый новый тип должен быть объявлен в отдельном модуле, а так же Вы должны</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">иметь исходники для универсальных классов.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;"> </span></p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">https://forum.sources</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаблоны в Object Pascal</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">( перевод одноименной статьи с сайта community.borland.com )</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Наверное каждый Delphi программист хоть раз общался с программистом C++ и объяснял насколько</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Delphi мощнее и удобнее. Но в некоторый момент, программист C++ заявляет примерно следующее</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">"OK, но Delphi использует Pascal, а значит не поддерживает множественное наследование и шаблоны,</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">поэтому он не так хорош как C++."</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Насчет множественного наследования можно легко заявить, что Delphi имеет интерфейсы, которые</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">прекрасно справляются со своей задачей, но вот насчет шаблонов Вам придётся согласится, так как</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Object Pascal не поддерживает их.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Давайте посмотрим на эту проблему по-внимательней</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаблоны позволяют делать универсальные контейнеры такие как списки, стеки, очереди, и т.д.</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Если Вы хотите осуществить что-то подобное в Delphi, то у Вас есть два пути:</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Использовать контейнер TList, который содержит указатели. В этом случае Вам придётся всё</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">время делать явное приведение типов. </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Сделать подкласс контейнера TCollection или TObjectList, и убрать все методы, зависящие от типов</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">каждый раз, когда Вы захотите использовать новый тип данных. </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Третий вариант, это сделать модуль с универсальным классом контейнера, и каждый раз, когда нужно</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">использовать новый тип данных, нам прийдётся в редакторе искать и вносить исправления. Было бы</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">здорово, если всю эту работу за Вас делал компилятор.... вот этим мы сейчас и займёмся!</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Например, возьмём классы TCollection и TCollectionItem. Когда Вы объявляете нового потомка TCollectionItem</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">, то так же Вы наследуете новый класс от TOwnedCollection и переопределяете большинство методов, чтобы</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">их можно было вызывать с новыми типами.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Давайте посмотрим, как создать универсальную коллекцию шаблонов класса:</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 1: Создайте новый текстовый файл (не юнитовский) с именем TemplateCollectionInterface.pas:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">_COLLECTION_ = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;"> (TOwnedCollection)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _COLLECTION_ITEM_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aOwner : TComponent);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Add : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> FindItemID (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aID : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Insert (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Items [</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer] : _COLLECTION_ITEM_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetItem </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetItem;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Обратите внимание, что нет никаких uses или interface clauses, только универсальное объявление</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">типа, в котором _COLLECTION_ это имя универсальной коллекции класса, а _COLLECTION_ITEM_</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">это имя методов, содержащихся в нашем шаблоне.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 2: Создайте второй текстовый файл и сохраните его как TemplateCollectionImplementation.pas:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aOwner : TComponent);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create (aOwner, _COLLECTION_ITEM_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.Add : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Add);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.FindItemID (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aID : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> FindItemID (aID));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.GetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> GetItem (aIndex));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.Insert (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _COLLECTION_ITEM_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := _COLLECTION_ITEM_ (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Insert (aIndex));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_.SetItem (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _COLLECTION_ITEM_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> SetItem (aIndex, aValue);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Снова нет никаких uses или interface clauses , а только код универсального типа.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 3: Создайте новый unit-файл с именем MyCollectionUnit.pas:</span></p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">unit</span><span class="f_CodeExample" style="color: #000000;"> MyCollectionUnit;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> Classes;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span><span class="f_CodeExample" style="color: #000000;"> TMyCollectionItem = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;"> (TCollectionItem)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FMyStringData : </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">String</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> FMyIntegerData : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> Assign (aSource : TPersistent); </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">override</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">published</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> MyStringData : </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">String</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FMyStringData </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FMyStringData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> MyIntegerData : Integer </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> FMyIntegerData </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> FMyIntegerData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! Указываем универсальному классу на реальный тип</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> _COLLECTION_ITEM_ = TMyCollectionItem; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! директива добавления интерфейса универсального класса</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateCollectionInterface}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! переименовываем универсальный класс</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TMyCollection = _COLLECTION_; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> SysUtils;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000080;">// !!! препроцессорная директива добавления универсального класса</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateCollectionImplementation}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TMyCollectionItem.Assign (aSource : TPersistent);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">if</span><span class="f_CodeExample" style="color: #000000;"> aSource </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">is</span><span class="f_CodeExample" style="color: #000000;"> TMyCollectionItem </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FMyStringData := TMyCollectionItem(aSource).FMyStringData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FMyIntegerData := TMyCollectionItem(aSource).FMyIntegerData;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">else</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Вот и всё! Теперь компилятор будет делать всю работу за Вас! Если Вы измените интерфейс</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">универсального класса, то изменения автоматически распространятся на все модули, которые</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">он использует.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Второй пример</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Давайте создадим универсальный класс для динамических массивов.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 1: Создайте текстовый файл с именем TemplateVectorInterface.pas:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">_VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_ = nterface</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLength : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLength (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetFirst : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetFirst (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLast : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLast (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> High : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Low : Integer;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Clear : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Extend (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Contract (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Length : Integer </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetLength </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetLength;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Items [</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer] : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetItems </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetItems; </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">default</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> First : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetFirst </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetFirst;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">property</span><span class="f_CodeExample" style="color: #000000;"> Last : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">read</span><span class="f_CodeExample" style="color: #000000;"> GetLast </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">write</span><span class="f_CodeExample" style="color: #000000;"> SetLast;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">_VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_ = </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">class</span><span class="f_CodeExample" style="color: #000000;"> (TInterfacedObject, _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_)</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray : </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">array</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">of</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLength : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLength (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetFirst : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetFirst (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> GetLast : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> SetLast (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> High : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Low : Integer;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Clear : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Extend (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> Contract (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word = </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_; </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Шаг 2: Создайте текстовый файл и сохраните его как TemplateVectorImplementation.pas:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">constructor</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Create (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">inherited</span><span class="f_CodeExample" style="color: #000000;"> Create;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">SetLength (aLength);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetLength : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := System.Length (FArray);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetLength (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">System.SetLength (FArray, aLength);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer) : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := FArray [aIndex];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetItems (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray [aIndex] := aValue;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.High : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := System.High (FArray);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Low : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := System.Low (FArray);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetFirst : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := FArray [System.Low (FArray)];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetFirst (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray [System.Low (FArray)] := aValue;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.GetLast : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := FArray [System.High (FArray)];</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.SetLast (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aValue : _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray [System.High (FArray)] := aValue;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Clear : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">FArray := </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">Nil</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := Self;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Extend (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">System.SetLength (FArray, System.Length (FArray) + aDelta);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := Self;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_.Contract (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aDelta : Word) : _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">System.SetLength (FArray, System.Length (FArray) - aDelta);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := Self;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Courier New'; font-size: 9pt;">Шаг </span><span style="font-family: 'Courier New'; color: #800000; font-size: 9pt;">3</span><span style="font-family: 'Courier New'; font-size: 9pt;">: Создайте </span><span style="font-family: 'Courier New'; color: #008000; font-size: 9pt; font-weight: bold;">unit</span><span style="font-family: 'Courier New'; font-size: 9pt;"> файл с именем FloatVectorUnit.pas:</span></p> <p> </p> <div style="text-align: left; text-indent: 0px; margin: 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">unit</span><span class="f_CodeExample" style="color: #000000;"> FloatVectorUnit;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">interface</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">uses</span><span class="f_CodeExample" style="color: #000000;"> Classes; </span><span class="f_CodeExample" style="color: #000080;">// !!! Модуль "Classes" содержит объявление класса TInterfacedObject</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">type</span><span class="f_CodeExample" style="color: #000000;"> _VECTOR_DATA_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">TYPE</span><span class="f_CodeExample" style="color: #000000;">_ = Double; </span><span class="f_CodeExample" style="color: #000080;">// !!! тип данных для класса массива Double</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateVectorInterface}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> IFloatVector = _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">INTERFACE</span><span class="f_CodeExample" style="color: #000000;">_; </span><span class="f_CodeExample" style="color: #000080;">// !!! give the interface a meanigful name</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> TFloatVector = _VECTOR_</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">CLASS</span><span class="f_CodeExample" style="color: #000000;">_; </span><span class="f_CodeExample" style="color: #000080;">// !!! give the class a meanigful name</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> CreateFloatVector (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">) : IFloatVector; </span><span class="f_CodeExample" style="color: #000080;">// !!! дополнительная функция </span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">implementation</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #0000ff;">{$INCLUDE TemplateVectorImplementation}</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">function</span><span class="f_CodeExample" style="color: #000000;"> CreateFloatVector (</span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">const</span><span class="f_CodeExample" style="color: #000000;"> aLength : Integer = </span><span class="f_CodeExample" style="color: #800000;">0</span><span class="f_CodeExample" style="color: #000000;">) : IFloatVector; </span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">Result := TFloatVector.Create (aLength);</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Естественно, можно дополнить универсальный класс дополнительными</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">функциями. Всё зависит от Вашей фантазии!</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Использование шаблонов</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Вот пример использования нового векторного интерфейса:</span></p> <p> </p> <div style="text-align: justify; text-indent: 0px; margin: 7px 0px; padding: 0px;"> <table style="border-bottom: #c0c0c0 1px solid; border-left: #000000 1px solid; background-color: #ffffc4; border-spacing: 0px; border-top: #000000 1px solid; border-right: #c0c0c0 1px solid;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p style="text-align: justify;"><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Code:</span></p> </td> </tr> <tr align="left"> <td style="border-bottom: #000000 1px solid; border-left: #c0c0c0 1px solid; border-top: #c0c0c0 1px solid; border-right: #000000 1px solid;"> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">procedure</span><span class="f_CodeExample" style="color: #000000;"> TestFloatVector;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">var</span><span class="f_CodeExample" style="color: #000000;"> aFloatVector : IFloatVector;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;"> aIndex : Integer;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">aFloatVector := CreateFloatVector;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">aFloatVector.Extend.Last := </span><span class="f_CodeExample" style="color: #800000;">1</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">aFloatVector.Extend.Last := </span><span class="f_CodeExample" style="color: #800000;">2</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"> </p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">for</span><span class="f_CodeExample" style="color: #000000;"> aIndex := aFloatVector.Low </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">to</span><span class="f_CodeExample" style="color: #000000;"> aFloatVector.High </span><span class="f_CodeExample" style="color: #008000; font-weight: bold;">do</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #000000;">WriteLn (FloatToStr (aFloatVector [aIndex]));</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample" style="color: #008000; font-weight: bold;">end</span><span class="f_CodeExample" style="color: #000000;">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;">Единственное требование при создании шаблонов таким способом, это то, что</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">каждый новый тип должен быть объявлен в отдельном модуле, а так же Вы должны</span></p> <p><span style="font-family: 'Times New Roman'; color: #000000;">иметь исходники для универсальных классов.</span></p> <p> </p> <p><span style="font-family: 'Times New Roman'; color: #000000;"> </span></p> <p> </p> <p style="text-align: right;"><span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #ff6600; font-size: 8pt; font-weight: bold;"> </span></p> <p><span style="font-family: 'Times New Roman'; color: #000000; font-weight: bold;">Взято из </span><span style="color: #0000ff; font-size: 10pt; font-weight: bold; text-decoration: underline;">https://forum.sources</span></p>