<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871121</guid>
        <pubDate>Sat, 09 Jul 2022 14:18:00 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871121</link>
        <description><![CDATA[macomics: Прекрасно. А если еще к TextOut координатам добавить по единичке, тогда фон текста не будет стирать рамку.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//x0 := x;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//y0 := y;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cs.Rectangle(x+Map_X,y+Map_Y,x+width+Map_X,y+height+Map_Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; // with Form1.Canvas do</div><div class="code_line">&nbsp;&nbsp; &nbsp; // begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; //clWindowText</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Cs.TextOut(x+Map_X,y+Map_Y, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Cs.TextOut(x+Map_X + 1,y+Map_Y + 1, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871120</guid>
        <pubDate>Sat, 09 Jul 2022 13:54:04 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871120</link>
        <description><![CDATA[Katerina1993: <strong class='tag-b'>RusSun</strong>, все исправила. <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//x0 := x;</div><div class="code_line">&nbsp;&nbsp;//y0 := y;</div><div class="code_line">&nbsp;&nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Rectangle(x+Map_X,y+Map_Y,x+width+Map_X,y+height+Map_Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;// with Form1.Canvas do</div><div class="code_line">&nbsp;// begin</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; //clWindowText</div><div class="code_line">&nbsp;&nbsp;// Cs.TextOut(x+Map_X,y+Map_Y, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x+Map_X,y+Map_Y, IntToStr(id1));</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
Теперь цифры добавляются и в слоты. Результат:<br>
<br>
<span class="b-attach" data-size="45036" data-hits="108" data-attach-id="63595" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=63595' title='Скачать файл' target='_blank'>screenshot1.jpg</a> (, : 108)
		</span>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871104</guid>
        <pubDate>Sat, 09 Jul 2022 06:50:50 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871104</link>
        <description><![CDATA[RusSun: Ответ: находится в Cs.TextOut передаются не те координаты. Хотя для рисования слотов идут &quot;верные координаты&quot;.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>//Создаем на холст предметы и пронумеруем их.<br>
в procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div></div><br>
Рисуется и область и выводится нумерация.<br>
Если не точность идёт в расположении нумерации ( :scratch: ), то ищем именно там.<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Rectangle(</div></ol></div></div></div></div><strong class='tag-b'>x+Map_X,y+Map_Y</strong>,x+width+Map_X,y+height+Map_Y);<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;// with Form1.Canvas do</div><div class="code_line">&nbsp;// begin</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; //clWindowText</div></ol></div></div></div></div><br>
   <strong class='tag-b'>Cs.TextOut(x+Map_X,y+Map_Y</strong>, IntToStr(id1));//&lt;- Здесь вместо <strong class='tag-b'>x0,y0</strong><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div></ol></div></div></div></div></div></div>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871028</guid>
        <pubDate>Thu, 07 Jul 2022 12:13:50 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3871028</link>
        <description><![CDATA[Katerina1993: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>2 А где это используется?</div></div><br>
Я код переписала, а не заново написала поэтому нигде, часть процедур сохранилось со старого примера.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А в чем смысл оставлять вот это.</div></div><br>
Код же прокоментирован и там написано.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>//Стартовые позиции всех предметов</div></div><br>
Если убрать массивы то все предметы переместятся в угол экрана.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Почему не заполнить массив сразу. Я уже написал как это сделать.</div></div><br>
Я прочитала ваша сообщение в самом начале, но когда стала переписывать код, просто не вспомнила, что можно и так сделать и сделала как было.]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870963</guid>
        <pubDate>Wed, 06 Jul 2022 16:19:34 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870963</link>
        <description><![CDATA[macomics: А в чем смысл оставлять вот это.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Position2[0,1]:=280;</div><div class="code_line">Position2[1,1]:=420;</div><div class="code_line">Position2[2,1]:=11;</div><div class="code_line">Position2[3,1]:=85;</div><div class="code_line">Position2[4,1]:=255;</div><div class="code_line">Position2[5,1]:=180;</div><div class="code_line">Position2[6,1]:=350;</div><div class="code_line">Position2[7,1]:=120;</div><div class="code_line">Position2[8,1]:=240;</div><div class="code_line">Position2[9,1]:=170;</div><div class="code_line">Position2[10,1]:=350;</div><div class="code_line">Position2[11,1]:=120;</div><div class="code_line">Position2[12,1]:=170;</div><div class="code_line">Position2[13,1]:=50;</div><div class="code_line">Position2[14,1]:=20;</div><div class="code_line">Position2[15,1]:=300;</div><div class="code_line">Position2[16,1]:=180;</div><div class="code_line">Position2[17,1]:=80;</div><div class="code_line">Position2[18,1]:=230;</div><div class="code_line">Position2[19,1]:=50;</div><div class="code_line">&nbsp;</div><div class="code_line">Position2[0,2]:=110;</div><div class="code_line">Position2[1,2]:=44;</div><div class="code_line">Position2[2,2]:=274;</div><div class="code_line">Position2[3,2]:=300;</div><div class="code_line">Position2[4,2]:=200;</div><div class="code_line">Position2[5,2]:=200;</div><div class="code_line">Position2[6,2]:=100;</div><div class="code_line">Position2[7,2]:=150;</div><div class="code_line">Position2[8,2]:=270;</div><div class="code_line">Position2[9,2]:=300;</div><div class="code_line">Position2[10,2]:=20;</div><div class="code_line">Position2[11,2]:=210;</div><div class="code_line">Position2[12,2]:=50;</div><div class="code_line">Position2[13,2]:=100;</div><div class="code_line">Position2[14,2]:=30;</div><div class="code_line">Position2[15,2]:=270;</div><div class="code_line">Position2[16,2]:=120;</div><div class="code_line">Position2[17,2]:=40;</div><div class="code_line">Position2[18,2]:=50;</div><div class="code_line">Position2[19,2]:=170;</div></ol></div></div></div></div>Почему не заполнить массив сразу. Я уже написал как это сделать.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870961</guid>
        <pubDate>Wed, 06 Jul 2022 15:57:05 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870961</link>
        <description><![CDATA[RusSun: Доброго времени суток)<br>
1 Что будет, если сделать, так :<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//Процедура рисования предметовы</div><div class="code_line">procedure TForm1.RePaintObj;</div><div class="code_line">var i,j: Integer;</div><div class="code_line">begin</div><div class="code_line">//Размещаем объекты на холсте</div><div class="code_line">&nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Item1[i] &#60;&#62; &#39;empty&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div></ol></div></div></div></div><br>
Картинка в прикреплении. -&gt; &quot;Потерянная нумерация слотов&quot;<br>
2 А где это используется?<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//Добавляем в слоты предметы</div><div class="code_line">procedure TSlot.DrawItem(Cs:TCanvas;rect:TRect);</div><div class="code_line">var newX,newY:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;newX := x0+5;</div><div class="code_line">&nbsp;&nbsp;newY := y0+5;</div><div class="code_line">&nbsp;&nbsp;rect.Draw(Form1.Canvas,newX,newY,rect.id1,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Это вот TRect.Draw есть.<br>
<br>
<span class="b-attach" data-size="17380" data-hits="103" data-attach-id="63588" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=63588' title='Скачать файл' target='_blank'>lost_numbers.JPG</a> (, : 103)
		</span>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870734</guid>
        <pubDate>Mon, 04 Jul 2022 11:11:48 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870734</link>
        <description><![CDATA[Katerina1993: Все, я тоже решила, мой вариант, может не совсем правильный зато работает. От Timer пришлось отказаться, потому что мерцание происходит при прорисовки и высокая нагрузка. Вместо таймера я просто вызываю при щелчке OnPaint (Repaint;). <br>
<br>
В коде находятся комментарии. Программа сделана на Delphi7.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, ExtCtrls, AppEvnts;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure RePaintObj;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TRect = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x0, y0: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;width, height: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;str:String;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;color : TColor;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bool : Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Map_X, Map_Y: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;id1:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _MapX, _MapY, w1, h1,_id1: Integer; _Color:TColor; _str:String; _bool:Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(Cs:TCanvas;x,y,id2,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TSlot = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;x0,y0:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;str2:String;</div><div class="code_line">&nbsp;&nbsp; &nbsp;width, height:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;// ; _slot:TRect</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _width, _height:Integer;_str2:String);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawItem(Cs:TCanvas;rect:TRect); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm;</div><div class="code_line">&nbsp;&nbsp;rightb, leftb, upb, downb : Boolean;</div><div class="code_line">&nbsp;&nbsp;OldX, OldY : integer;</div><div class="code_line">&nbsp;&nbsp;//dragok : Boolean;</div><div class="code_line">&nbsp;&nbsp;dragok:Integer;</div><div class="code_line">&nbsp;&nbsp;StartX:Integer;</div><div class="code_line">&nbsp;&nbsp;StartY:Integer;</div><div class="code_line">&nbsp;&nbsp;H1, W1,jj : Integer;</div><div class="code_line">&nbsp;&nbsp;rect2: Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;rect : Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;rect3 : Array [0..5] Of TRect;</div><div class="code_line">&nbsp;&nbsp;slt: Array[0..5] of TSlot;</div><div class="code_line">&nbsp;&nbsp;//12:45</div><div class="code_line">&nbsp;&nbsp;//x , y</div><div class="code_line">&nbsp;&nbsp;Position2: Array[0..19,1..2] of Integer;</div><div class="code_line">&nbsp;&nbsp;Item1: Array[0..19] of String = (&#39;Thread&#39;,&#39;Goblet&#39;,&#39;Stick&#39;,&#39;Doorknob&#39;,&#39;Loupe&#39;,&#39;Statuette&#39;,&#39;Ring&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Crown&#39;,&#39;Vase&#39;,&#39;Gripsack&#39;,&#39;Book&#39;,&#39;Glove&#39;,&#39;Salver&#39;,&#39;Brush&#39;,&#39;Handbell&#39;,&#39;Cigarcase&#39;,&#39;Lantern&#39;,&#39;Card&#39;,&#39;Candy&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Whisk&#39;);</div><div class="code_line">&nbsp;&nbsp;//slot1:Array[0..5] of String = (&#39;Goblet&#39;,&#39;Vase&#39;,&#39;Thread&#39;,&#39;Whisk&#39;,&#39;Stick&#39;,&#39;Handbell&#39;);</div><div class="code_line">&nbsp;&nbsp;slot1:Array of String;</div><div class="code_line">&nbsp;&nbsp;ItemColor: Array[0..19] of TColor = (clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal,clGray,</div><div class="code_line">&nbsp;&nbsp;clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,</div><div class="code_line">&nbsp;&nbsp;//ЗАКОНЧИЛИСЬ ЦВЕТА ПРИШЛОСЬ ИСПОЛЬЗОВАТЬ СИСТЕМНЫЕ</div><div class="code_line">&nbsp;&nbsp;clInactiveCaption,clActiveCaption,clBackground,</div><div class="code_line">&nbsp;&nbsp;clInactiveCaptionText,clBtnShadow,clBtnFace);</div><div class="code_line">&nbsp;&nbsp;count1:Integer;</div><div class="code_line">&nbsp;&nbsp;count2:Integer = 0;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp;tmpItem: array of TRect;</div><div class="code_line">&nbsp;&nbsp;tmpItem2: array of TRect;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">// _slot:TRect</div><div class="code_line">constructor TSlot.Create(_x0, _y0, _width, _height:Integer;_str2:String);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;width:= _width;</div><div class="code_line">&nbsp;&nbsp;height:= _height;</div><div class="code_line">&nbsp;&nbsp;str2:=_str2;</div><div class="code_line">&nbsp;// slot:=_slot;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создание ячеек для слотов</div><div class="code_line">procedure TSlot.DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Form1.Canvas.Brush.Color:=clGray;</div><div class="code_line">&nbsp;&nbsp; Cs.Rectangle(x0+MapX,y0+MapY,x0+width+MapX,y0+height+MapY);</div><div class="code_line">end;</div><div class="code_line">//Добавляем в слоты предметы</div><div class="code_line">procedure TSlot.DrawItem(Cs:TCanvas;rect:TRect);</div><div class="code_line">var newX,newY:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;newX := x0+5;</div><div class="code_line">&nbsp;&nbsp;newY := y0+5;</div><div class="code_line">&nbsp;&nbsp;rect.Draw(Form1.Canvas,newX,newY,rect.id1,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TRect.Create(_x0,_y0,_MapX,_MapY,w1,h1,_id1: Integer; _Color: TColor; _str:String; _bool:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;str := _str;</div><div class="code_line">&nbsp;&nbsp;width := w1;</div><div class="code_line">&nbsp;&nbsp;height := h1;</div><div class="code_line">&nbsp;&nbsp;color := _Color;</div><div class="code_line">&nbsp;&nbsp;bool := _bool;</div><div class="code_line">&nbsp;&nbsp;Map_X := _MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := _MapY;</div><div class="code_line">&nbsp;&nbsp;id1:=_id1;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем на холст предметы и пронумеруем их.</div><div class="code_line">procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//x0 := x;</div><div class="code_line">&nbsp;&nbsp;//y0 := y;</div><div class="code_line">&nbsp;&nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Rectangle(x+Map_X,y+Map_Y,x+width+Map_X,y+height+Map_Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;// with Form1.Canvas do</div><div class="code_line">&nbsp;// begin</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; //clWindowText</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; P : TPoint;</div><div class="code_line">&nbsp;&nbsp; i,t2,ii,a,rand,kk: Integer;</div><div class="code_line">begin</div><div class="code_line">//Действие происходит при нажатии кнопки мыши на предмете</div><div class="code_line">&nbsp;&nbsp; if Msg.message = WM_LBUTTONDOWN then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; jj:=0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; P:=Form1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;&nbsp; //Перебираем все предметы и сравниваем по позиции курсора на какой предмет</div><div class="code_line">&nbsp;&nbsp; //был произведен щелчок</div><div class="code_line">&nbsp;&nbsp; for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if (rect[i].x0 &#60; P.X) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].x0+rect[i].width &#62; P.X)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; and (rect[i].y0 &#60; P.Y) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].y0+rect[i].height &#62; P.Y)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Здесь подошли к следующему решение, ЕСЛИ (IF) предметов на холсте больше</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //чем в слотах то происходит один цикл, если на холсте</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //предметов меньше чем в слотах, ТОГДА (THEN)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //произойдет другое действие</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Чтобы посчитать сколько предметов существуют на холсте, используем</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //переменную tmpItem2, в котором происходит условие на пустоту (EMPTY) и</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //на флаг bool - который отвечает, что предмет находится в слоте.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Всем предметам на холсте присвоен bool false.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Те которые попадают в слоты присвоен bool true.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if count1 &#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for ii:=0 to High(rect3) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if rect[i].id1 = rect3[ii].id1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Item1[i]:=&#39;empty&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t2 := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for a:=low(rect2) to High(rect2) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Item1[a] &#60;&#62; &#39;empty&#39;) and (rect2[a].bool = false) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setLength(tmpItem2, t2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem2[t2-1]:=rect2[a];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc(t2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Делаем случайный выбор из тех элементов которые не выбыли из</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//игры и не получили статус empty, а также те которые не</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//находятся в слотах и у которых значение bool = false</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rand:=Trunc(Random(High(tmpItem2)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Создаем новый класс для слота</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect3[ii] := rect2[tmpItem2[rand].id1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Присваиваем случайно добавленному в слот элементу значение true</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect2[tmpItem2[rand].id1].bool:=true;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Заносим количество оставшихся элементов на холсте</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//в новую переменную</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;count1 := High(tmpItem2);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//************************************************</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Пришлось отказаться от компонента Timer по причине, что</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//происходит мерцание и нагрузка из-за постоянных прорисовок</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Поэтому при нажатии кнопки делаем прорисовку всего один раз</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//************************************************</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Repaint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Когда предметов на холсте становится меньше чем в слотах</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//выполняем это условие</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Здесь через цикл сравниваем на какой предмет был произведен щелчок</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//и просто значениям присваиваем empty</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Дальше объекты перерисуются и слоты станут пустыми</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//переменная count2 - ведет заключительный подсчет.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Каждый раз когда слот пустеет прибавляется единица</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for kk:=0 to High(rect3) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if rect[i].id1 = rect3[kk].id1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Item1[i]:=&#39;empty&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slt[kk].str2 := &#39;empty&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count2:=count2+1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Repaint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Сравниваем если count2 равен 6 то выводим сообщение о победе</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if count2 = 6 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ShowMessage(&#39;Все предметы найдены!&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// for i2 := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //if Item1[i2] &#60;&#62; &#39;empty&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // rect[i2].Draw(Form1.Canvas,Position2[i2,1],Position2[i2,2],i2,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">RePaintObj;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">//*******************************************</div><div class="code_line">//Для работы было принято решения создавать классы при показе формы FormShow</div><div class="code_line">//а отрисовку предметов делать FormPaint.</div><div class="code_line">//*******************************************</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">var k1,i,i1,a,t1:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">//setLength(slot1,6);</div><div class="code_line">//Стартовые позиции всех предметов</div><div class="code_line">Position2[0,1]:=280;</div><div class="code_line">Position2[1,1]:=420;</div><div class="code_line">Position2[2,1]:=11;</div><div class="code_line">Position2[3,1]:=85;</div><div class="code_line">Position2[4,1]:=255;</div><div class="code_line">Position2[5,1]:=180;</div><div class="code_line">Position2[6,1]:=350;</div><div class="code_line">Position2[7,1]:=120;</div><div class="code_line">Position2[8,1]:=240;</div><div class="code_line">Position2[9,1]:=170;</div><div class="code_line">Position2[10,1]:=350;</div><div class="code_line">Position2[11,1]:=120;</div><div class="code_line">Position2[12,1]:=170;</div><div class="code_line">Position2[13,1]:=50;</div><div class="code_line">Position2[14,1]:=20;</div><div class="code_line">Position2[15,1]:=300;</div><div class="code_line">Position2[16,1]:=180;</div><div class="code_line">Position2[17,1]:=80;</div><div class="code_line">Position2[18,1]:=230;</div><div class="code_line">Position2[19,1]:=50;</div><div class="code_line">&nbsp;</div><div class="code_line">Position2[0,2]:=110;</div><div class="code_line">Position2[1,2]:=44;</div><div class="code_line">Position2[2,2]:=274;</div><div class="code_line">Position2[3,2]:=300;</div><div class="code_line">Position2[4,2]:=200;</div><div class="code_line">Position2[5,2]:=200;</div><div class="code_line">Position2[6,2]:=100;</div><div class="code_line">Position2[7,2]:=150;</div><div class="code_line">Position2[8,2]:=270;</div><div class="code_line">Position2[9,2]:=300;</div><div class="code_line">Position2[10,2]:=20;</div><div class="code_line">Position2[11,2]:=210;</div><div class="code_line">Position2[12,2]:=50;</div><div class="code_line">Position2[13,2]:=100;</div><div class="code_line">Position2[14,2]:=30;</div><div class="code_line">Position2[15,2]:=270;</div><div class="code_line">Position2[16,2]:=120;</div><div class="code_line">Position2[17,2]:=40;</div><div class="code_line">Position2[18,2]:=50;</div><div class="code_line">Position2[19,2]:=170;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем все предметы в игре</div><div class="code_line">for i1 := 0 to 19 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;rect[i1] := TRect.Create(Position2[i1,1],Position2[i1,2],0,0,40,40,i1,ItemColor[i1],Item1[i1],false);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;rect2[i1]:=rect[i1];</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем новый массив с шестью слотами</div><div class="code_line">setLength(slot1,6);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//Перемещиваем предметы случайным образом и добавляем их в слоты</div><div class="code_line">&nbsp;&nbsp;for i := High(Item1) downto 0 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; // j := Random(i + 1);</div><div class="code_line">&nbsp;&nbsp; // s := Item1[i];</div><div class="code_line">&nbsp;&nbsp; // Item1[i] := Item1[j];</div><div class="code_line">&nbsp;&nbsp; // Item1[j] := s;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;// ShowMessage(IntToStr(High(slot1)));</div><div class="code_line">&nbsp;&nbsp;//Слоты которые нужно заполнить</div><div class="code_line">&nbsp;&nbsp;for k1:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect2[k1].bool:=true;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[k1]:=TSlot.Create(10+k1*60,370,50,50,Item1[k1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; //Создаем дополнительный класс используя уже существующий</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect3[k1]:=rect[k1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; //присваиваем название предмета, чтобы потом делать</div><div class="code_line">&nbsp;&nbsp; &nbsp; //проверку существует предмет или нет</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[k1]:=Item1[k1];</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; //Создаем дополнительные временной массив где будем хранить данные, это</div><div class="code_line">&nbsp;&nbsp; //нужно чтобы убирать найденные предметы и заполнять их новыми</div><div class="code_line">&nbsp;&nbsp; //так мы избежим повторов в дальнейшем</div><div class="code_line">&nbsp;&nbsp;t1 := 1;</div><div class="code_line">&nbsp;&nbsp;for a:=low(rect2) to High(rect2) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Item1[a] - если значение не пустое значит предмет еще не найден</div><div class="code_line">&nbsp;&nbsp; &nbsp;//rect2[a].bool - проверяем добавлен предмет в слот, если да то это значение</div><div class="code_line">&nbsp;&nbsp; &nbsp;//будет true, в данном случае false, так как здесь обозначен список предметов</div><div class="code_line">&nbsp;&nbsp; &nbsp;//над которыми не производилось действие.</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Item1[a] &#60;&#62; &#39;empty&#39;) and (rect2[a].bool = false) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;setLength(tmpItem, t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;tmpItem[t1-1]:=rect2[a];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;inc(t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;count1 := High(tmpItem);</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">//Процедура рисования предметовы</div><div class="code_line">procedure TForm1.RePaintObj;</div><div class="code_line">var i,j: Integer;</div><div class="code_line">begin</div><div class="code_line">//Размещаем объекты на холсте</div><div class="code_line">&nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Item1[i] &#60;&#62; &#39;empty&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Заполняем слоты если значение не пустое</div><div class="code_line">Memo1.Clear;</div><div class="code_line">for j:=0 to 5 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;Memo1.Lines.Add(slt[j].str2);</div><div class="code_line">&nbsp;&nbsp;if slt[j].str2 &#60;&#62; &#39;empty&#39; then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect3[j].Draw(Form1.Canvas,15+j*60,375,rect3[j].id1,0,0);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><br>
<br>
Только почему-то пропали цифры когда предмет попадает в слот.<br>
<span class="b-attach" data-size="51946" data-hits="114" data-attach-id="63584" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=63584' title='Скачать файл' target='_blank'>Screenshot1.jpg</a> (, : 114)
		</span>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870655</guid>
        <pubDate>Sun, 03 Jul 2022 10:26:25 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3870655</link>
        <description><![CDATA[macomics: Появилось свободное время и набросал вот такой код. Думаю так будет интереснее.<br>
Немного изменил принцип. Цветные прямоугольники надо перетаскивать на прямоугольники сверху (на те, которые с подписями).<br>
Когда угадываешь, то прямоугольник остается на своем месте. Когда угадываешь все - Win и по клику в любом месте новая игра.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;THiddenObj = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Name: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Brush: packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case Byte of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;0: (Color: TColor);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;1: (b, g, r: Byte);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position: TPoint;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyPress(Sender: TObject; var Key: char);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseLeave(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Regenerate;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item: array of THiddenObj;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DragIndex: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DragHand: TPoint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Highlight: LongInt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GenerateNew: Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;StartTime: Comp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ItemFound: LongInt;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;Form1Caption: String = &#39;Game&#39;;</div><div class="code_line">&nbsp;&nbsp;HorizontalSpace: LongInt = 4;</div><div class="code_line">&nbsp;&nbsp;MaxUsedOnScreen: LongInt = 10;</div><div class="code_line">&nbsp;&nbsp;MaxItemOnScreen: LongInt = 25;</div><div class="code_line">&nbsp;&nbsp;RectWidth: LongInt = 75;</div><div class="code_line">&nbsp;&nbsp;RectHeight: LongInt = 24;</div><div class="code_line">&nbsp;&nbsp;VerticalSpace: LongInt = 8;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;Items: array of String = (&#39;Thread&#39;,&#39;Goblet&#39;,&#39;Stick&#39;,&#39;Doorknob&#39;,&#39;Loupe&#39;,</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Statuette&#39;,&#39;Ring&#39;,&#39;Crown&#39;,&#39;Vase&#39;,&#39;Gripsack&#39;,&#39;Book&#39;,&#39;Glove&#39;,&#39;Salver&#39;,</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Brush&#39;,&#39;Handbell&#39;,&#39;Cigarcase&#39;,&#39;Lantern&#39;,&#39;Card&#39;,&#39;Candy&#39;,&#39;Whisk&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{ TForm1 }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Randomize;</div><div class="code_line">&nbsp;&nbsp;ClientWidth := MaxUsedOnScreen * (VerticalSpace + RectWidth) + VerticalSpace;</div><div class="code_line">&nbsp;&nbsp;Regenerate;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if GenerateNew then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Regenerate;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Repaint;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i: LongInt;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if GenerateNew then Regenerate else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;if not Timer1.Enabled then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;StartTime := TimeStampToMSecs(DateTimeToTimeStamp(Now));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Timer1.Enabled := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := Low(Item) to High(Item) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (X &#62;= Item[i].Position.x) and (X &#60;= Item[i].Position.x + RectWidth)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;and (Y &#62;= Item[i].Position.y) and (Y &#60;= Item[i].Position.y + RectHeight)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DragIndex := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DragHand := Point(X - Item[i].Position.x, Y - Item[i].Position.y);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Repaint;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseLeave(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i, j, k: LongInt;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if DragIndex &#62;= Low(Item) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;i := Item[DragIndex].Position.y;</div><div class="code_line">&nbsp;&nbsp; &nbsp;j := 3 * HorizontalSpace div 2 + RectHeight + 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;k := Highlight + Low(Item);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (i &#60;= j) and (Highlight &#62;= 0) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if k = Item[DragIndex].Name</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;then Item[DragIndex].Position := Point(VerticalSpace + Highlight</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * (VerticalSpace + RectWidth), HorizontalSpace)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;else Item[DragIndex].Position.y := j;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end else if i &#60;= j then Item[DragIndex].Position.y := j;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;DragIndex := Low(Item) - 1;</div><div class="code_line">&nbsp;&nbsp;Highlight := -1;</div><div class="code_line">&nbsp;&nbsp;Repaint;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,</div><div class="code_line">&nbsp;&nbsp;Y: Integer);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i: LongInt;</div><div class="code_line">&nbsp;&nbsp;p, q: TPoint;</div><div class="code_line">&nbsp;&nbsp;function MinMax(Min: LongInt; Aim: LongInt; Max: LongInt): LongInt;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Aim &#60; Min then MinMax := Min</div><div class="code_line">&nbsp;&nbsp; &nbsp;else if Aim &#62; Max then MinMax := Max</div><div class="code_line">&nbsp;&nbsp; &nbsp;else MinMax := Aim;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if DragIndex &#62;= Low(Item) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item[DragIndex].Position := Point(MinMax(0, X - DragHand.x, ClientWidth</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;- RectWidth), MinMax(0, Y - DragHand.y, ClientHeight - RectHeight));</div><div class="code_line">&nbsp;&nbsp; &nbsp;Highlight := -1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 0 to MaxUsedOnScreen - 1 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p := Point(VerticalSpace + i * (RectWidth + VerticalSpace), HorizontalSpace);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;q := Point(p.x + RectWidth, p.y + RectHeight);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (X - DragHand.x &#62;= p.x) and (X - DragHand.x &#60;= q.x)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;and (Y - DragHand.y &#62;= p.y) and (Y - DragHand.y &#60;= q.y) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Highlight := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Repaint;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;</div><div class="code_line">&nbsp;&nbsp;Shift: TShiftState; X, Y: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;FormMouseLeave(Sender);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;msg: String = &#39;You are win!&#39;;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i, j, k: LongInt;</div><div class="code_line">&nbsp;&nbsp;p: TPoint;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with Canvas do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 0 to MaxUsedOnScreen - 1 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p := Point(VerticalSpace + i * (RectWidth + VerticalSpace), HorizontalSpace);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Highlight = i then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Pen.Color := clRed;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Pen.Style := psDash;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if Item[DragIndex].Name = i</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then Brush.Color := clLime</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else Brush.Color := clWhite;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end else begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Pen.Color := clBlack;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Pen.Style := psSolid;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Brush.Color := clLtGray;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Rectangle(p.x, p.y, p.x + RectWidth, p.y + RectHeight);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TextOut(p.x + 2, p.y + 2, Items[Low(Items) + i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pen.Color := clBlack;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pen.Style := psDot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Brush.Color := clWhite;</div><div class="code_line">&nbsp;&nbsp; &nbsp;j := 3 * HorizontalSpace div 2 + RectHeight;</div><div class="code_line">&nbsp;&nbsp; &nbsp;k := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Line(0, j, ClientWidth + 1, j);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Pen.Style := psSolid;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := Low(Item) to High(Item) do if (DragIndex &#62;= Low(Item)) and (DragIndex &#60;&#62; i)</div><div class="code_line">&nbsp;&nbsp; &nbsp;or (DragIndex &#60; Low(Item)) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Brush.Color := Item[i].Brush.Color;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p := Item[i].Position;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Rectangle(p.x, p.y, p.x + RectWidth, p.y + RectHeight);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (p.y &#60; j) then inc(k);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if DragIndex &#62;= Low(Item) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pen.Style := psDashDotDot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pen.Color := clYellow;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Brush.Color := clAqua;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p := Item[DragIndex].Position;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Rectangle(p.x, p.y, p.x + RectWidth, p.y + RectHeight);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pen.Style := psSolid;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pen.Color := clBlack;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Brush.Color := clWhite;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if k = MaxUsedOnScreen then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Timer1.Enabled := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Caption := Form1Caption + &#39;(&#39; + msg + &#39;)&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Pen.Color := clBlack;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Brush.Color := clWhite;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;i := (ClientWidth - TextWidth(msg)) div 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;j := (ClientHeight - TextHeight(msg)) div 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FillRect(0, 0, ClientWidth, ClientHeight);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TextOut(i, j, msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GenerateNew := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ItemFound := k;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Regenerate;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i, j, l, m, n: LongInt;</div><div class="code_line">&nbsp;&nbsp;o, p, q, r: TPoint;</div><div class="code_line">&nbsp;&nbsp;t: String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Caption := Form1Caption;</div><div class="code_line">&nbsp;&nbsp;GenerateNew := False;</div><div class="code_line">&nbsp;&nbsp;Highlight := -1;</div><div class="code_line">&nbsp;&nbsp;ItemFound := 0;</div><div class="code_line">&nbsp;&nbsp;DragIndex := Low(Item) - 1;</div><div class="code_line">&nbsp;&nbsp;l := ClientWidth - RectWidth - 2 * VerticalSpace;</div><div class="code_line">&nbsp;&nbsp;n := 2 * HorizontalSpace + RectHeight;</div><div class="code_line">&nbsp;&nbsp;m := ClientHeight - 2 * n;</div><div class="code_line">&nbsp;&nbsp;SetLength(Item, MaxItemOnScreen);</div><div class="code_line">&nbsp;&nbsp;for i := Low(Item) to High(Item) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;repeat p := Point(VerticalSpace + Random(l), HorizontalSpace + n + Random(m));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;r := Point(p.x + RectWidth, p.y + RectHeight);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;j := Low(Item);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;while j &#60; i do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;q := Item[j].Position;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;o := Point(q.x + RectWidth + VerticalSpace,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; q.y + RectHeight + HorizontalSpace);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;q := Point(q.x - VerticalSpace, q.y - HorizontalSpace);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if ((p.x &#62;= q.x) and (p.x &#60;= o.x) and (p.y &#62;= q.y) and (p.y &#60;= o.y))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or ((p.x &#62;= q.x) and (p.x &#60;= o.x) and (r.y &#62;= q.y) and (r.y &#60;= o.y))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or ((r.x &#62;= q.x) and (r.x &#60;= o.x) and (r.y &#62;= q.y) and (r.y &#60;= o.y))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or ((r.x &#62;= q.x) and (r.x &#60;= o.x) and (p.y &#62;= q.y) and (p.y &#60;= o.y))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;inc(j);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;until j = i;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if i - Low(Item) &#60; MaxUsedOnScreen then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;j := Low(Items) + Random(Length(Items) + Low(Item) - Low(Items) - i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if j &#60;&#62; i then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;t := Items[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Items[i] := Items[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Items[j] := t;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;j := i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end else j := Low(Item) - 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item[i].Name := j;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item[i].Brush.r := 64 + Random(164);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item[i].Brush.g := 64 + Random(192);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item[i].Brush.b := 64 + Random(164);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item[i].Position := p;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i, j: LongInt;</div><div class="code_line">&nbsp;&nbsp;m, s, u: String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;i := LongInt(Int64(TimeStampToMSecs(DateTimeToTimeStamp(Now)) - StartTime) mod 3600000);</div><div class="code_line">&nbsp;&nbsp;u := IntToStr((i mod 1000) div 100);</div><div class="code_line">&nbsp;&nbsp;j := (i div 1000) mod 60;</div><div class="code_line">&nbsp;&nbsp;i := i div 60000;</div><div class="code_line">&nbsp;&nbsp;if j &#60; 10 then s := &#39;0&#39; + IntToStr(j) else s := IntToStr(j);</div><div class="code_line">&nbsp;&nbsp;if i &#60; 10 then m := &#39;0&#39; + IntToStr(i) else m := IntToStr(i);</div><div class="code_line">&nbsp;&nbsp;i := ItemFound;</div><div class="code_line">&nbsp;&nbsp;j := MaxUsedOnScreen;</div><div class="code_line">&nbsp;&nbsp;Caption := Format(&#39;%s [%d / %d] %s:%s:%s&#39;, [Form1Caption, i, j, m, s, u]);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">initialization</div><div class="code_line">&nbsp;&nbsp;{$I unit1.lrs}</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>Писал в Lazarus под Linux, некоторые модули в Delphi могут быть лишними, а каких-то может не хватать. Но код без использования системных функций - при желании можно переносить функции обработчики и все сработает.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869889</guid>
        <pubDate>Sun, 26 Jun 2022 19:30:05 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869889</link>
        <description><![CDATA[RusSun: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, ExtCtrls, AppEvnts;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button3: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo2: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo3: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button2: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);</div><div class="code_line">// &nbsp; &nbsp;procedure Button2Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormClick(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button1Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button3Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TRect = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x0, y0: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;width, height: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;str:String;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;color : TColor;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;dragok : Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Map_X, Map_Y: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;id1:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _MapX, _MapY, w1, h1,_id1: Integer; _Color:TColor; _str:String; _dragok:Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(Cs:TCanvas;x,y,id2,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TSlot = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;x0,y0:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;width, height:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _width, _height:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawItem(Cs:TCanvas;rect:TRect); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const Position2: Array[0..19,1..2] of Integer = ((280, 110), (420, 44), (11, 274), (85, 300), (255, 200), (180, 200), (350, 100), (120, 150), (240, 270), (170, 300), (350, 20), (120, 210), (170, 50), (50, 100), (20, 30), (300, 270), (180, 120), (80, 40), (230, 50), (50, 170));</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm;</div><div class="code_line">&nbsp;&nbsp;rightb, leftb, upb, downb : Boolean;</div><div class="code_line">&nbsp;&nbsp;OldX, OldY : integer;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;dragok:Integer;</div><div class="code_line">&nbsp;&nbsp;StartX:Integer;</div><div class="code_line">&nbsp;&nbsp;StartY:Integer;</div><div class="code_line">&nbsp;&nbsp;H1, W1,jj : Integer;</div><div class="code_line">&nbsp;&nbsp;rect2: Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;rect : Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;slt: Array[0..5] of TSlot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Item1: Array[0..19] of String = (&#39;Thread&#39;,&#39;Goblet&#39;,&#39;Stick&#39;,&#39;Doorknob&#39;,&#39;Loupe&#39;,&#39;Statuette&#39;,&#39;Ring&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Crown&#39;,&#39;Vase&#39;,&#39;Gripsack&#39;,&#39;Book&#39;,&#39;Glove&#39;,&#39;Salver&#39;,&#39;Brush&#39;,&#39;Handbell&#39;,&#39;Cigarcase&#39;,&#39;Lantern&#39;,&#39;Card&#39;,&#39;Candy&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Whisk&#39;);</div><div class="code_line">&nbsp;&nbsp;//slot1:Array[0..5] of String = (&#39;Goblet&#39;,&#39;Vase&#39;,&#39;Thread&#39;,&#39;Whisk&#39;,&#39;Stick&#39;,&#39;Handbell&#39;);</div><div class="code_line">&nbsp;&nbsp;slot1:Array of String;</div><div class="code_line">&nbsp;&nbsp;ItemColor: Array[0..19] of TColor = (clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal,clGray,</div><div class="code_line">&nbsp;&nbsp;clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,</div><div class="code_line">&nbsp;&nbsp;//ЗАКОНЧИЛИСЬ ЦВЕТА ПРИШЛОСЬ ИСПОЛЬЗОВАТЬ СИСТЕМНЫЕ</div><div class="code_line">&nbsp;&nbsp;clInactiveCaption,clActiveCaption,clBackground,</div><div class="code_line">&nbsp;&nbsp;clInactiveCaptionText,clBtnShadow,clBtnFace);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp;tmpItem: array of Integer;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TSlot.Create(_x0, _y0, _width, _height:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;width:= _width;</div><div class="code_line">&nbsp;&nbsp;height:= _height;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создание ячеек для слотов</div><div class="code_line">procedure TSlot.DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Form1.Canvas.Brush.Color:=clGray;</div><div class="code_line">&nbsp;&nbsp; Cs.Rectangle(x0+MapX,y0+MapY,x0+width+MapX,y0+height+MapY);</div><div class="code_line">end;</div><div class="code_line">//Добавляем в слоты предметы</div><div class="code_line">procedure TSlot.DrawItem(Cs:TCanvas;rect:TRect);</div><div class="code_line">var newX,newY:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;newX := x0+5;</div><div class="code_line">&nbsp;&nbsp;newY := y0+5;</div><div class="code_line">&nbsp;&nbsp;rect.Draw(Form1.Canvas,newX,newY,rect.id1,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TRect.Create(_x0,_y0,_MapX,_MapY,w1,h1,_id1: Integer; _Color: TColor; _str:String; _dragok:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;str := _str;</div><div class="code_line">&nbsp;&nbsp;width := w1;</div><div class="code_line">&nbsp;&nbsp;height := h1;</div><div class="code_line">&nbsp;&nbsp;color := _Color;</div><div class="code_line">&nbsp;&nbsp;dragok := _dragok;</div><div class="code_line">&nbsp;&nbsp;Map_X := _MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := _MapY;</div><div class="code_line">&nbsp;&nbsp;id1:=_id1;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем на холст предметы и пронумеруем их.</div><div class="code_line">procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Rectangle(x+Map_X,y+Map_Y,x+width+Map_X,y+height+Map_Y);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; //clWindowText</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">//Таймер для прорисовки предметов на холсте</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var i,j,k,aa:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;OldX := 0;</div><div class="code_line">&nbsp;&nbsp;OldY := 0;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; Memo1.Lines.Clear;</div><div class="code_line">&nbsp;&nbsp; //Рисуем на холсте предметы, выбираем их из массива и только те у которых</div><div class="code_line">&nbsp;&nbsp; //значение не равно empty.</div><div class="code_line">&nbsp;&nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if Item1[i] &#60;&#62; &#39;empty&#39; then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].x0:=rect[i].x0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].y0:=rect[i].y0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;//Делаем проверку массива tmpItem, чтобы определить</div><div class="code_line">&nbsp;&nbsp;//остались предметы на холссте. Выводим сообщение, что предметы найдены.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &nbsp;tmpItem[aa]</div><div class="code_line">&nbsp;&nbsp;Memo1.Clear;</div><div class="code_line">for aa:=low(tmpItem) to high(tmpItem) do Memo1.Lines.Add(IntToStr(High(tmpItem)));</div><div class="code_line">&nbsp;Memo2.Clear;</div><div class="code_line">for j:=0 to 5 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;//Сравниваем элементы</div><div class="code_line">&nbsp;&nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;//slot1 - где в слоты добавляются предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp;//rect[k].str - все элементы массива которые находятся на хостле</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Происходит сравнение двух массивов и если находятся совпадения</div><div class="code_line">&nbsp;&nbsp; &nbsp;//то эти предметы добавляются в слот</div><div class="code_line">&nbsp;&nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo2.Lines.Add(IntToStr(k));</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; //slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp;// ShowMessage(rect[k].str);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">i:Integer; S:String;</div><div class="code_line">begin</div><div class="code_line">s:=&#39;&#39;;</div><div class="code_line">for i:= 0 to 5 do</div><div class="code_line">begin</div><div class="code_line">s:=s+intTostr(i)+&#39;) &#39;+slot1[i]+#13#10;</div><div class="code_line">end;</div><div class="code_line">ShowMessage(S);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">//procedure TForm1.Button2Click(Sender: TObject);</div><div class="code_line">////var s:string;</div><div class="code_line">//begin</div><div class="code_line">// &nbsp;Form1.Caption:=&#39;lengthMemo2 &#39;+IntToStr(length(Memo2.Text))+&#39; -&#62;&#39;+Memo2.Text+&#39;&#60;- &#39;+&#39;Memo2.Lines.Count &#39;+IntToStr(Memo2.Lines.Count);</div><div class="code_line">//end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button3Click(Sender: TObject);</div><div class="code_line">var aa:Integer;</div><div class="code_line">begin</div><div class="code_line">for aa:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[aa]:=Item1[aa];</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo1.Lines.Add(slot1[aa])</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormClick(Sender: TObject);</div><div class="code_line">var P : TPoint;</div><div class="code_line">&nbsp;&nbsp; i,ii,b,t1,ti,tt: Integer;</div><div class="code_line">begin</div><div class="code_line">P:=Form1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;&nbsp; t1 := 0;</div><div class="code_line">&nbsp;&nbsp; for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if (rect[i].x0 &#60; P.X) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].x0+rect[i].width &#62; P.X)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; and (rect[i].y0 &#60; P.Y) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].y0+rect[i].height &#62; P.Y)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //t1:=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Создается временный массив куда заносятся оставшиеся элементы которые</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //еще не выбыли с холста.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Перед созданием tmpItem проверяется, чтобы значение Item1 не было пустым</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; SetLength(tmpItem, Length(Item1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // Достаточно задать размер массива сразу ...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for b:=low(Item1) to high(Item1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Item1[b]&#60;&#62;&#39;empty&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">//</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setLength(tmpItem, t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //tmpItem[t1-1]:=Item1[b];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //tmpItem[t1]:=b; // Зачем копировать строки, когда достаточно скопировать индексы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(t1); // Вместо Length(tmpItem) достаточно использовать t1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; // Form1.Caption:=&#39;t1 is &#39;+intToStr(t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//При нажатии происходит сравнение всех предметов которые на холсте,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//с теми что в слотах и если совпадение найдено, предмет удаляется, а</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//в массиве мы получаем пустое значение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for ii:=0 to 5 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ti := ii + Random(t1 - ii);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tt := tmpItem[ti];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[ti] := tmpItem[ii];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[ii] := tt;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if rect[i].str = slot1[ii] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;slot1[ii] := Item1[tt];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Form1.Caption:=&#39;ii is &#39;+intToStr(ii)+&#39; Item1[tt] &#39;+Item1[tt];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//slot1[ii]:=tmpItem[Random(Length(tmpItem))];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Item1[ii]:=&#39;empty&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;Form1.Repaint();</div><div class="code_line">&nbsp;if (Memo2.Lines.Count =1) and (trim(Memo2.Text) = &#39;0&#39;) then &nbsp;Form1.Caption:=&#39;Вы нашли все предметы!&#39;;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">var i,k1,j:Integer; s:String;</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем новый массив с шестью слотами</div><div class="code_line">setLength(slot1,6);</div><div class="code_line">for j:=0 to 5 do slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">// slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;//Перемещиваем предметы случайным образом и добавляем их в слоты</div><div class="code_line">&nbsp;&nbsp;for i := High(Item1) downto 0 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;j := Random(i + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;s := Item1[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item1[i] := Item1[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item1[j] := s;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for k1:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[k1]:=Item1[k1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo3.Lines.Add(Item1[k1]+&#39; &#39;+intTostr(k1))</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">//slot1[0]:=&#39;Goblet&#39;;</div><div class="code_line">//slot1[1]:=&#39;Vase&#39;;</div><div class="code_line">//slot1[2]:=&#39;Thread&#39;;</div><div class="code_line">//slot1[3]:=&#39;Stick&#39;;</div><div class="code_line">//slot1[4]:=&#39;Handbell&#39;;</div><div class="code_line">//slot1[5]:=&#39;Whisk&#39;;</div><div class="code_line">// Timer1.Enabled:=True;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">for i := 0 to 19 do</div><div class="code_line">&nbsp;rect[i] := TRect.Create(Position2[i,1],Position2[i,2],0,0,40,40,i,ItemColor[i],Item1[i],false);</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);</div><div class="code_line">var i:integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;for i := 0 to 9 do rect[i].dragok:=false;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><br>
<br>
1) Это конечно не полностью доделанный код. Скорее местами поправки. <br>
2) В свою очередь, теперь программа запускается, и можно ...&quot;просто придумать как подправить ошибки&quot; потому, что есть то, что ещё делать дальше;<br>
3) В большей степени, я не программирую, потому, что правильный ответ &quot;Я не знаю, лишь на практике, что-то поправляю, и это как правило работает&quot;;<br>
4) Не нужно стесняться упрощать некоторые моменты в программе, для понимания -&gt; &quot;как это работает, или не работает&quot;;<br>
5) Когда не понимаю, то начинаю поверять так сказать &quot;математику + логику&quot; -&gt; &quot;Что дано&quot;-&gt;&quot;Что происходит или должно меняться или не меняться &quot;-&gt;&quot;И что в сухом остатке&quot;;<br>
6) Также я думаю, не стоит пренебрегать -&gt; &quot;Showmessage(&#39;Info&#39;)&quot;,&quot; Form1.Caption:=&#39;Info&#39; &quot;,и &quot;// или (**) или {}&quot; чтобы анализировать &quot;код&quot;;  <br>
7) Всегда нужно пользоваться интернетом для поиска информации, кодов, реализации. Не нужно верить на слово, сделайте тест для проверки &quot;верности&quot;, &quot;направления и мысли&quot;;<br>
   ... Ну и вишенка на торте, это то понимание, &quot;что же вы хотите сделать?&quot; и &quot;Ваше понимание как это должно быть исполнено&quot;.<br>
<br>
Цвет можно также задавать <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">в том числе так <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Color:=$E8BB99</div></ol></div></div></div></div> :)</div></div>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869888</guid>
        <pubDate>Sun, 26 Jun 2022 18:13:13 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869888</link>
        <description><![CDATA[macomics: А если еще избавиться от ApplicationEvents, то и под Linux в Lazarus будет компилироваться. Там же даже не нужно такого костыля. Достаточно Form1MouseDown и Form1MouseUp]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869887</guid>
        <pubDate>Sun, 26 Jun 2022 17:18:12 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869887</link>
        <description><![CDATA[RusSun: Играю так ;) &#33;<br>
<span class="b-attach" data-size="58396" data-hits="97" data-attach-id="63547" data-attach-post-id="3869887">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3869887&amp;attach_id=63547' title='Скачать файл' target='_blank'>TestKaterina1993_2_.zip</a> (, : 97)
		</span>]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869701</guid>
        <pubDate>Fri, 24 Jun 2022 04:15:32 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869701</link>
        <description><![CDATA[RusSun: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=428090&view=findpost&p=3869576'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Katerina1993 &#064; <time class="tag-quote__quoted-time" datetime="2022-06-22T12:56:00+00:00">22.06.22, 12:56</time></span><div class='quote '>Переписывать я не собираюсь программа почти готова, нужно просто придумать как подправить ошибки, слишком хлопотно заново все начинать. Сначало надо запустить эту программу потом уже думать как переписать более оптимально. Для того чтобы был стимул, дальше двигаться, а если моя первая программа не доработана, то и стимула, что-то делать нет.</div></div><br>
 ;) Это Ваше &quot;заднее&quot; слово?)  :crazy:  :blush:  :-? <a class='tag-url' href='https://www.youtube.com/watch?v=0fWTZfGTNx4&ab_channel=Mr.BilboBaggins' target='_blank'>&quot;Заднее слово&quot;</a><br>
<br>
-&gt; &quot;а если моя первая программа не доработана, то и стимула, что-то делать нет.&quot; ... Сразу хотите, &quot;Летать&quot; :rose: <br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">А как же ... шаг за шагом, легкие пробежки, более быстрый бег, скоростные забеги, ... чемпионат мира.</div></div><br>
<br>
-&gt; &quot;, нужно просто придумать как подправить ошибки,&quot; :victory: <br>
<br>
-&gt; &quot;слишком хлопотно заново все начинать. &quot; -&gt; &quot;Это же не значит всё выбросить и с сызнова написать&quot;, <br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">Вы используете, что уже наработали ( написали ) + то, что Вам подсказали на форуме, пробуете всё это соединить во что-то единое, верно структурированное и рабочее, <br>
в следствии &quot;верных действии&quot;, всё &quot;правильно&quot; заработает.</div></div>  <br>
<br>
Можно и по другому посмотреть на это, просто взять и внести необходимые изменения, постепенно, в помощи Вам не отказывают?<br>
&quot;macomics&quot; очень подробно и доходчиво объяснял Вам. :thanks:   :scratch:  :popcorn:  :good: <br>
Выбор за Вами конечно)  :whistle:<br>
<br>
Написав данное сообщение, я не хотел Вас обидеть, или как уязвить. Лишь подбодрить ...  :blush:]]></description>
        <author>RusSun</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869579</guid>
        <pubDate>Wed, 22 Jun 2022 13:24:58 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869579</link>
        <description><![CDATA[macomics: Все вышеописанное это ошибки. Их надо исправлять. Но они настолько большие, что проще все переписать.<br>Например: Используя TRect.Create(...) вы изменяете все свойства элемента, а в исходном конструкторе inherited Create; может еще и память динамически выделяться. Потом вы не освобождая созданный экземпляр просто перезаписываете его новым, что приводит к утечке памяти. Это уже фундаментальная ошибка.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869576</guid>
        <pubDate>Wed, 22 Jun 2022 12:56:00 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869576</link>
        <description><![CDATA[Katerina1993: Переписывать я не собираюсь программа почти готова, нужно просто придумать как подправить ошибки, слишком хлопотно заново все начинать. Сначало надо запустить эту программу потом уже думать как переписать более оптимально. Для того чтобы был стимул, дальше двигаться, а если моя первая программа не доработана, то и стимула, что-то делать нет.]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869571</guid>
        <pubDate>Wed, 22 Jun 2022 11:13:54 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869571</link>
        <description><![CDATA[macomics: Тогда будем разбираться с самого начала.<br>
1) <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[0,1]:=280;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[1,1]:=420;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[2,1]:=11;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[3,1]:=85;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[4,1]:=255;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[5,1]:=180;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[6,1]:=350;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[7,1]:=120;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[8,1]:=240;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[9,1]:=170;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[10,1]:=350;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[11,1]:=120;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[12,1]:=170;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[13,1]:=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[14,1]:=20;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[15,1]:=300;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[16,1]:=180;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[17,1]:=80;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[18,1]:=230;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[19,1]:=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[0,2]:=110;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[1,2]:=44;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[2,2]:=274;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[3,2]:=300;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[4,2]:=200;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[5,2]:=200;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[6,2]:=100;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[7,2]:=150;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[8,2]:=270;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[9,2]:=300;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[10,2]:=20;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[11,2]:=210;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[12,2]:=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[13,2]:=100;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[14,2]:=30;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[15,2]:=270;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[16,2]:=120;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[17,2]:=40;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[18,2]:=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Position2[19,2]:=170;</div></ol></div></div></div></div>Зачем заполнять массив констант при перерисовке. Достаточно заполнить его в объявлении переменной.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const Position2: Array[0..19,1..2] of Integer = ((280, 110), (420, 44), (11, 274), (85, 300), (255, 200), (180, 200), (350, 100), (120, 150), (240, 270), (170, 300), (350, 20), (120, 210), (170, 50), (50, 100), (20, 30), (300, 270), (180, 120), (80, 40), (230, 50), (50, 170));</div></ol></div></div></div></div><hr><hr>2)При перерисовке вы не просто рисуете структуру, а еще и реинициализируете ее <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;//Отрисовываем все предметы на холсте</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect[i] := TRect.Create(Position2[i,1],Position2[i,2],0,0,40,40,i,ItemColor[i],Item1[i],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1.Clear;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j:=0 to 5 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">&nbsp;&nbsp; &nbsp;slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Сравниваем значение массивов со слотами, если название предметов совпадает рисуем их.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Создаем слоты</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Рисуем предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div></ol></div></div></div></div>Строки <span class='tag-u'>TRect.Create</span> и <span class='tag-u'>TSlot.Create</span>. Лучше вынести из обработчика перерисовки. Он вызывается часто, и каждый раз будет создаваться различная структура (не говоря уже про неявные утечки памяти). Обычно вы должны полностью создать все элементы структуры в TForm1.FormCreate и в обработчике TForm1.FormPaint выполнять только перерисовку уже созданных элементов.<hr><hr>3) Вот этот код так же расположен не в том месте.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;var i,k1,j:Integer; s:String;</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;//Создаем новый массив с шестью слотами</div><div class="code_line">&nbsp;&nbsp; &nbsp;setLength(slot1,6);</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Перемещиваем предметы случайным образом и добавляем их в слоты</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for i := High(Item1) downto 0 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;j := Random(i + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;s := Item1[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Item1[i] := Item1[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Item1[j] := s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for k1:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; slot1[k1]:=Item1[k1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Memo3.Lines.Add(Item1[k1])</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;slot1[0]:=&#39;Goblet&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;slot1[1]:=&#39;Vase&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;slot1[2]:=&#39;Thread&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;slot1[3]:=&#39;Stick&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;slot1[4]:=&#39;Handbell&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;slot1[5]:=&#39;Whisk&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1.Enabled:=True;</div><div class="code_line">&nbsp;&nbsp; end;</div></ol></div></div></div></div>TForm1.FormShow вызывается каждый раз при отображении формы на экране. Попробуйте создать отдельную форму и расположить на ней кнопку скрывающую и отображающую эту форму. Тогда этот код будет вызываться еще и еще раз. Это тоже не по плану. Он должен быть в TForm1.FormCreate.<hr><hr>4) В периодически вызываемом событии вы вызываете не только Create и изменяете структуру, но еще и перерисовываете окно напрямую.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;//Таймер для прорисовки предметов на холсте</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;var i,j,k,aa:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;OldX := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;OldY := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Form1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Form1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; Memo1.Lines.Clear;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; //Рисуем на холсте предметы, выбираем их из массива и только те у которых</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; //значение не равно empty.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if Item1[i] &#60;&#62; &#39;empty&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;rect[i].x0:=rect[i].x0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;rect[i].y0:=rect[i].y0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Делаем проверку массива tmpItem, чтобы определить</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//остались предметы на холссте. Выводим сообщение, что предметы найдены.</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if High(tmpItem)=0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Timer1.Enabled:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ShowMessage(&#39;Вы нашли все предметы!&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// &nbsp;tmpItem[aa]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Memo1.Clear;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for aa:=low(tmpItem) to high(tmpItem) do Memo1.Lines.Add(IntToStr(High(tmpItem)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo2.Clear;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for j:=0 to 5 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Сравниваем элементы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//slot1 - где в слоты добавляются предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//rect[k].str - все элементы массива которые находятся на хостле</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Происходит сравнение двух массивов и если находятся совпадения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//то эти предметы добавляются в слот</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Memo2.Lines.Add(IntToStr(k));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// ShowMessage(rect[k].str);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div></ol></div></div></div></div>Опять же. Для рисования на окне существует обработчик TForm1.FormPaint, который перед вызовом подготавливается к выводу на форму графики, а после возврата применяет весь сделанный вывод одним блоком, что должно уменьшать мерцание. Рисовать на форме в любом месте кода не самая лучшая затея. По таймеру, если необходимо перерисовывать окно, достаточно вызвать Form1.Repaint(), а не вызывать функции рисования. Но кроме функций рисования вы еще и изменяете структуру, создавая новые элементы через <span class='tag-u'>TRect.Create</span> и <span class='tag-u'>TSlot.Create</span><hr><hr>Итог. Ничего удивительного, что вы получаете что-то непонятное. Если давать совет по работе программы. Лучше полностью перепишите. Сформулируйте структуру TItem, которая будет связывать название и координаты, номер слота и цвет. Однократно инициализируйте массив этих структур в TForm1.FormCreate, а отрисовывайте все необходимое в TForm1.FormPaint. При необходимости перерисовки по таймеру, в обработчике таймера помещается одна единственная команда TForm1.Repaint, перед которой в уже заполненные элементы TItem вносятся необходимые изменения. При этом не нужно ловить события WM_LBUTTONDOWN и другие через фильтр, а достаточно будет обработчиков TForm1.FormKeyDown или TForm1.FormClick и им подобных.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869549</guid>
        <pubDate>Wed, 22 Jun 2022 08:30:07 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869549</link>
        <description><![CDATA[Katerina1993: Я изменила код теперь завершения игры не возможна, так как некоторые элементы отсутствуют, а при щелчке на предмете почему-то удаляются не тот предмет.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, ExtCtrls, AppEvnts;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label3: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button2: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label4: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button3: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo2: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo3: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button1Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button3Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TRect = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x0, y0: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;width, height: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;str:String;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;color : TColor;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;dragok : Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Map_X, Map_Y: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;id1:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _MapX, _MapY, w1, h1,_id1: Integer; _Color:TColor; _str:String; _dragok:Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(Cs:TCanvas;x,y,id2,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TSlot = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;x0,y0:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;width, height:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;// ; _slot:TRect</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _width, _height:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawItem(Cs:TCanvas;rect:TRect); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm;</div><div class="code_line">&nbsp;&nbsp;rightb, leftb, upb, downb : Boolean;</div><div class="code_line">&nbsp;&nbsp;OldX, OldY : integer;</div><div class="code_line">&nbsp;&nbsp;//dragok : Boolean;</div><div class="code_line">&nbsp;&nbsp;dragok:Integer;</div><div class="code_line">&nbsp;&nbsp;StartX:Integer;</div><div class="code_line">&nbsp;&nbsp;StartY:Integer;</div><div class="code_line">&nbsp;&nbsp;H1, W1,jj : Integer;</div><div class="code_line">&nbsp;&nbsp;rect2: Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;rect : Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;slt: Array[0..5] of TSlot;</div><div class="code_line">&nbsp;&nbsp;//12:45</div><div class="code_line">&nbsp;&nbsp;//x , y</div><div class="code_line">&nbsp;&nbsp;Position2: Array[0..19,1..2] of Integer;</div><div class="code_line">&nbsp;&nbsp;Item1: Array[0..19] of String = (&#39;Thread&#39;,&#39;Goblet&#39;,&#39;Stick&#39;,&#39;Doorknob&#39;,&#39;Loupe&#39;,&#39;Statuette&#39;,&#39;Ring&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Crown&#39;,&#39;Vase&#39;,&#39;Gripsack&#39;,&#39;Book&#39;,&#39;Glove&#39;,&#39;Salver&#39;,&#39;Brush&#39;,&#39;Handbell&#39;,&#39;Cigarcase&#39;,&#39;Lantern&#39;,&#39;Card&#39;,&#39;Candy&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Whisk&#39;);</div><div class="code_line">&nbsp;&nbsp;//slot1:Array[0..5] of String = (&#39;Goblet&#39;,&#39;Vase&#39;,&#39;Thread&#39;,&#39;Whisk&#39;,&#39;Stick&#39;,&#39;Handbell&#39;);</div><div class="code_line">&nbsp;&nbsp;slot1:Array of String;</div><div class="code_line">&nbsp;&nbsp;ItemColor: Array[0..19] of TColor = (clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal,clGray,</div><div class="code_line">&nbsp;&nbsp;clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,</div><div class="code_line">&nbsp;&nbsp;//ЗАКОНЧИЛИСЬ ЦВЕТА ПРИШЛОСЬ ИСПОЛЬЗОВАТЬ СИСТЕМНЫЕ</div><div class="code_line">&nbsp;&nbsp;clInactiveCaption,clActiveCaption,clBackground,</div><div class="code_line">&nbsp;&nbsp;clInactiveCaptionText,clBtnShadow,clBtnFace);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp;tmpItem: array of Integer;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">// _slot:TRect</div><div class="code_line">constructor TSlot.Create(_x0, _y0, _width, _height:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;width:= _width;</div><div class="code_line">&nbsp;&nbsp;height:= _height;</div><div class="code_line">&nbsp;// slot:=_slot;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создание ячеек для слотов</div><div class="code_line">procedure TSlot.DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Form1.Canvas.Brush.Color:=clGray;</div><div class="code_line">&nbsp;&nbsp; Cs.Rectangle(x0+MapX,y0+MapY,x0+width+MapX,y0+height+MapY);</div><div class="code_line">end;</div><div class="code_line">//Добавляем в слоты предметы</div><div class="code_line">procedure TSlot.DrawItem(Cs:TCanvas;rect:TRect);</div><div class="code_line">var newX,newY:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;newX := x0+5;</div><div class="code_line">&nbsp;&nbsp;newY := y0+5;</div><div class="code_line">&nbsp;&nbsp;rect.Draw(Form1.Canvas,newX,newY,rect.id1,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TRect.Create(_x0,_y0,_MapX,_MapY,w1,h1,_id1: Integer; _Color: TColor; _str:String; _dragok:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;str := _str;</div><div class="code_line">&nbsp;&nbsp;width := w1;</div><div class="code_line">&nbsp;&nbsp;height := h1;</div><div class="code_line">&nbsp;&nbsp;color := _Color;</div><div class="code_line">&nbsp;&nbsp;dragok := _dragok;</div><div class="code_line">&nbsp;&nbsp;Map_X := _MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := _MapY;</div><div class="code_line">&nbsp;&nbsp;id1:=_id1;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем на холст предметы и пронумеруем их.</div><div class="code_line">procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//x0 := x;</div><div class="code_line">&nbsp;&nbsp;//y0 := y;</div><div class="code_line">&nbsp;&nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Rectangle(x+Map_X,y+Map_Y,x+width+Map_X,y+height+Map_Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;// with Form1.Canvas do</div><div class="code_line">&nbsp;// begin</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; //clWindowText</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">//Таймер для прорисовки предметов на холсте</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var i,j,k,aa:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;OldX := 0;</div><div class="code_line">&nbsp;&nbsp;OldY := 0;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; Memo1.Lines.Clear;</div><div class="code_line">&nbsp;&nbsp; //Рисуем на холсте предметы, выбираем их из массива и только те у которых</div><div class="code_line">&nbsp;&nbsp; //значение не равно empty.</div><div class="code_line">&nbsp;&nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if Item1[i] &#60;&#62; &#39;empty&#39; then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].x0:=rect[i].x0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].y0:=rect[i].y0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;//Делаем проверку массива tmpItem, чтобы определить</div><div class="code_line">&nbsp;&nbsp;//остались предметы на холссте. Выводим сообщение, что предметы найдены.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if High(tmpItem)=0 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1.Enabled:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ShowMessage(&#39;Вы нашли все предметы!&#39;);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &nbsp;tmpItem[aa]</div><div class="code_line">&nbsp;&nbsp;Memo1.Clear;</div><div class="code_line">for aa:=low(tmpItem) to high(tmpItem) do Memo1.Lines.Add(IntToStr(High(tmpItem)));</div><div class="code_line">&nbsp;Memo2.Clear; </div><div class="code_line">for j:=0 to 5 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">&nbsp;slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;//Сравниваем элементы </div><div class="code_line">&nbsp;&nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;//slot1 - где в слоты добавляются предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp;//rect[k].str - все элементы массива которые находятся на хостле</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Происходит сравнение двух массивов и если находятся совпадения</div><div class="code_line">&nbsp;&nbsp; &nbsp;//то эти предметы добавляются в слот</div><div class="code_line">&nbsp;&nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo2.Lines.Add(IntToStr(k));</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp;// ShowMessage(rect[k].str);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; P : TPoint;</div><div class="code_line">&nbsp;&nbsp; i,ii,b,t1,ti,tt: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if Msg.message = WM_LBUTTONDOWN then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; jj:=0;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; P:=Form1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;&nbsp; for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if (rect[i].x0 &#60; P.X) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].x0+rect[i].width &#62; P.X)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; and (rect[i].y0 &#60; P.Y) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].y0+rect[i].height &#62; P.Y)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //t1:=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Создается временный массив куда заносятся оставшиеся элементы которые</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //еще не выбыли с холста.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Перед созданием tmpItem проверяется, чтобы значение Item1 не было пустым</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; t1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; SetLength(tmpItem, Length(Item1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // Достаточно задать размер массива сразу ...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for b:=low(Item1) to high(Item1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Item1[b]&#60;&#62;&#39;empty&#39; then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //setLength(tmpItem, t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //tmpItem[t1-1]:=Item1[b];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //inc(t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[t1]:=b; // Зачем копировать строки, когда достаточно скопировать индексы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc(t1); // Вместо Length(tmpItem) достаточно использовать t1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//При нажатии происходит сравнение всех предметов которые на холсте,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//с теми что в слотах и если совпадение найдено, предмет удаляется, а</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//в массиве мы получаем пустое значение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for ii:=0 to 5 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ti := ii + Random(t1 - ii);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tt := tmpItem[ti];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[ti] := tmpItem[ii];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[ii] := tt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if rect[i].str = slot1[ii] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;slot1[ii] := Item1[tt];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//slot1[ii]:=tmpItem[Random(Length(tmpItem))];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Item1[tt]:=&#39;empty&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Msg.message = WM_LBUTTONUP then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for i := 1 to 10 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect[i].dragok:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var i,j,k: Integer;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">//Стартовые позиции всех предметов</div><div class="code_line">Position2[0,1]:=280;</div><div class="code_line">Position2[1,1]:=420;</div><div class="code_line">Position2[2,1]:=11;</div><div class="code_line">Position2[3,1]:=85;</div><div class="code_line">Position2[4,1]:=255;</div><div class="code_line">Position2[5,1]:=180;</div><div class="code_line">Position2[6,1]:=350;</div><div class="code_line">Position2[7,1]:=120;</div><div class="code_line">Position2[8,1]:=240;</div><div class="code_line">Position2[9,1]:=170;</div><div class="code_line">Position2[10,1]:=350;</div><div class="code_line">Position2[11,1]:=120;</div><div class="code_line">Position2[12,1]:=170;</div><div class="code_line">Position2[13,1]:=50;</div><div class="code_line">Position2[14,1]:=20;</div><div class="code_line">Position2[15,1]:=300;</div><div class="code_line">Position2[16,1]:=180;</div><div class="code_line">Position2[17,1]:=80;</div><div class="code_line">Position2[18,1]:=230;</div><div class="code_line">Position2[19,1]:=50;</div><div class="code_line">&nbsp;</div><div class="code_line">Position2[0,2]:=110;</div><div class="code_line">Position2[1,2]:=44;</div><div class="code_line">Position2[2,2]:=274;</div><div class="code_line">Position2[3,2]:=300;</div><div class="code_line">Position2[4,2]:=200;</div><div class="code_line">Position2[5,2]:=200;</div><div class="code_line">Position2[6,2]:=100;</div><div class="code_line">Position2[7,2]:=150;</div><div class="code_line">Position2[8,2]:=270;</div><div class="code_line">Position2[9,2]:=300;</div><div class="code_line">Position2[10,2]:=20;</div><div class="code_line">Position2[11,2]:=210;</div><div class="code_line">Position2[12,2]:=50;</div><div class="code_line">Position2[13,2]:=100;</div><div class="code_line">Position2[14,2]:=30;</div><div class="code_line">Position2[15,2]:=270;</div><div class="code_line">Position2[16,2]:=120;</div><div class="code_line">Position2[17,2]:=40;</div><div class="code_line">Position2[18,2]:=50;</div><div class="code_line">Position2[19,2]:=170;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Отрисовываем все предметы на холсте</div><div class="code_line">for i := 0 to 19 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;rect[i] := TRect.Create(Position2[i,1],Position2[i,2],0,0,40,40,i,ItemColor[i],Item1[i],false);</div><div class="code_line">&nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">end;</div><div class="code_line">Memo1.Clear;</div><div class="code_line">for j:=0 to 5 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;//Сравниваем значение массивов со слотами, если название предметов совпадает рисуем их.</div><div class="code_line">&nbsp;&nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; //Создаем слоты</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; //Рисуем предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">i:Integer;</div><div class="code_line">begin</div><div class="code_line">for i:= 0 to 5 do</div><div class="code_line">begin</div><div class="code_line">//ShowMessage(slot1[i]);</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button3Click(Sender: TObject);</div><div class="code_line">var aa:Integer;</div><div class="code_line">begin</div><div class="code_line">for aa:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[aa]:=Item1[aa];</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo1.Lines.Add(slot1[aa])</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">var i,k1,j:Integer; s:String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем новый массив с шестью слотами</div><div class="code_line">setLength(slot1,6);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//Перемещиваем предметы случайным образом и добавляем их в слоты</div><div class="code_line">&nbsp;&nbsp;for i := High(Item1) downto 0 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;j := Random(i + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;s := Item1[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item1[i] := Item1[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item1[j] := s;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for k1:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[k1]:=Item1[k1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo3.Lines.Add(Item1[k1])</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">slot1[0]:=&#39;Goblet&#39;;</div><div class="code_line">slot1[1]:=&#39;Vase&#39;;</div><div class="code_line">slot1[2]:=&#39;Thread&#39;;</div><div class="code_line">slot1[3]:=&#39;Stick&#39;;</div><div class="code_line">slot1[4]:=&#39;Handbell&#39;;</div><div class="code_line">slot1[5]:=&#39;Whisk&#39;;</div><div class="code_line">//</div><div class="code_line">Timer1.Enabled:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869524</guid>
        <pubDate>Tue, 21 Jun 2022 23:01:08 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869524</link>
        <description><![CDATA[macomics: Так измените тип массива на числовой.<br>
У меня смысл кода в том, что вам надо изменять на empty не Item1[i], а Item1[tmpItem[ii]]. Но если сохранять строки, тогда индексы в Item1 потеряются. Понадобится составлять массив ассоциаций tempIndex и массив строк tempItem. Можно обойтись без этого. Достаточно изменить массив tmpItem на числовой и сохранять в нем индексы из Item1.]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869519</guid>
        <pubDate>Tue, 21 Jun 2022 21:58:37 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869519</link>
        <description><![CDATA[Katerina1993: Не понятно изначально tmpItem идет как строка.<br>
Поэтому ошибки будут здесь(потому, что встречается число вместо строки):<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">tmpItem[t1]:=b; // Зачем копировать строки, когда достаточно скопировать индексы</div></ol></div></div></div></div><br>
<br>
и здесь<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">tt := tmpItem[ti];</div><div class="code_line">tmpItem[ti] := tmpItem[ii];</div><div class="code_line">tmpItem[ii] := tt;</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869516</guid>
        <pubDate>Tue, 21 Jun 2022 20:06:38 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869516</link>
        <description><![CDATA[macomics: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Создается временный массив куда заносятся оставшиеся элементы которые</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //еще не выбыли с холста.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Перед созданием tmpItem проверяется, чтобы значение Item1 не было пустым</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; t1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; SetLength(tmpItem, Length(Item1)); // Достаточно задать размер массива сразу ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for b:=low(Item1) to high(Item1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Item1[b]&#60;&#62;&#39;empty&#39; then begin</div><div class="code_line">&nbsp;</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setLength(tmpItem, t1); // ... а не изменять размер массива в цикле</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[t1]:=b; // Зачем копировать строки, когда достаточно скопировать индексы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc(t1); // Вместо Length(tmpItem) достаточно использовать t1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for ii:=0 to 5 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Выбрали заранее случайный индекс</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ti := ii + Random(t1 - ii);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tt := tmpItem[ti];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmpItem[ti] := tmpItem[ii];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmpItem[ii] := tt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if rect[i].str = slot1[ii] then // Проверяем и меняем</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;slot1[ii] := Item1[tt];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Item1[tt] := &#39;empty&#39;; // только я не понял почему у вас тут Item1[i] было, а не выбранный элемент</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div></ol></div></div></div></div>]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869511</guid>
        <pubDate>Tue, 21 Jun 2022 18:00:46 +0000</pubDate>
        <title>Почему в слоты добавляется повторяющиеся элементы?</title>
        <link>https://forum.sources.ru/index.php?showtopic=428090&amp;view=findpost&amp;p=3869511</link>
        <description><![CDATA[Katerina1993: Делаю поиск предметов, у меня несколько массивов для хранения элементов<ol class="tag-list" type="1"><li>Item1 – здесь содержится список всех элементов.</li><li>slot1 – создается ячейки где будут хранится стартовые элементы (подсказки какие элементы требуется найти). При нахождении одного элемента он будет удален из слота и заменен другим случайным элементом который на холсте.</li><li>tmpItem – временный массив,  включает в себя только те элементы которые размещены на холсте, нужно для того чтобы когда закончатся все элементы, вывести сообщение о прохождении уровня. Также tmpItem нужен для эффективного получения случайного элемента. В него включены только оставшиеся предметы, остальные выбыли. Это гарантирует выбор случайного элемента без повторов и замена его в слотах на место выбывшего.</li></ol>Программа у меня работает, можно ориентироваться по списку слотов который находится внизу и убирать элементы. Здесь в любом случае пользователь придет к победе.<br>
<br>
Вначале генерируются предметы случайным образом без повторов, но когда начинаешь щелкать на предметах на холсте мышкой, чтобы убрать их. Ново-созданные предметы в слотах начинают повторяться. Пример на картинке в прикрепленном файле.<br>
<br>
<span class="b-attach" data-size="55062" data-hits="14" data-attach-id="63530" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=63530' title='Скачать файл' target='_blank'>Screenshot1.jpg</a> (, : 14)
		</span><br>
Потом следующее, если на холсте остается меньше 6 предметов, то в этом случае слоты должны освобождаться и быть пустыми, а вместо этого предметы никуда не деваются они также по прежнему заполнены в слотах. Также после завершения игры мы получаем сообщение о победе и слоты опять заполнены.<br>
<span class="b-attach" data-size="47255" data-hits="19" data-attach-id="63531" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=63531' title='Скачать файл' target='_blank'>Screenshot2.jpg</a> (, : 19)
		</span><br>
Как исправить проблему повторов и наполненности слотов под конец игры, вот мой код?<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, ExtCtrls, AppEvnts;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label3: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button2: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label4: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button3: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo2: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo3: TMemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormPaint(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button1Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button3Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormShow(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TRect = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;x0, y0: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;width, height: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;str:String;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;color : TColor;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;dragok : Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Map_X, Map_Y: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;id1:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _MapX, _MapY, w1, h1,_id1: Integer; _Color:TColor; _str:String; _dragok:Boolean);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(Cs:TCanvas;x,y,id2,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;TSlot = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;x0,y0:Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;width, height:Integer;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;// ; _slot:TRect</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_x0, _y0, _width, _height:Integer);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer); //Прорисовка</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DrawItem(Cs:TCanvas;rect:TRect); //Прорисовка</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm;</div><div class="code_line">&nbsp;&nbsp;rightb, leftb, upb, downb : Boolean;</div><div class="code_line">&nbsp;&nbsp;OldX, OldY : integer;</div><div class="code_line">&nbsp;&nbsp;//dragok : Boolean;</div><div class="code_line">&nbsp;&nbsp;dragok:Integer;</div><div class="code_line">&nbsp;&nbsp;StartX:Integer;</div><div class="code_line">&nbsp;&nbsp;StartY:Integer;</div><div class="code_line">&nbsp;&nbsp;H1, W1,jj : Integer;</div><div class="code_line">&nbsp;&nbsp;rect2: Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;rect : Array [0..19] Of TRect;</div><div class="code_line">&nbsp;&nbsp;slt: Array[0..5] of TSlot;</div><div class="code_line">&nbsp;&nbsp;//12:45</div><div class="code_line">&nbsp;&nbsp;//x , y</div><div class="code_line">&nbsp;&nbsp;Position2: Array[0..19,1..2] of Integer;</div><div class="code_line">&nbsp;&nbsp;Item1: Array[0..19] of String = (&#39;Thread&#39;,&#39;Goblet&#39;,&#39;Stick&#39;,&#39;Doorknob&#39;,&#39;Loupe&#39;,&#39;Statuette&#39;,&#39;Ring&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Crown&#39;,&#39;Vase&#39;,&#39;Gripsack&#39;,&#39;Book&#39;,&#39;Glove&#39;,&#39;Salver&#39;,&#39;Brush&#39;,&#39;Handbell&#39;,&#39;Cigarcase&#39;,&#39;Lantern&#39;,&#39;Card&#39;,&#39;Candy&#39;,</div><div class="code_line">&nbsp;&nbsp;&#39;Whisk&#39;);</div><div class="code_line">&nbsp;&nbsp;//slot1:Array[0..5] of String = (&#39;Goblet&#39;,&#39;Vase&#39;,&#39;Thread&#39;,&#39;Whisk&#39;,&#39;Stick&#39;,&#39;Handbell&#39;);</div><div class="code_line">&nbsp;&nbsp;slot1:Array of String;</div><div class="code_line">&nbsp;&nbsp;ItemColor: Array[0..19] of TColor = (clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal,clGray,</div><div class="code_line">&nbsp;&nbsp;clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,</div><div class="code_line">&nbsp;&nbsp;//ЗАКОНЧИЛИСЬ ЦВЕТА ПРИШЛОСЬ ИСПОЛЬЗОВАТЬ СИСТЕМНЫЕ</div><div class="code_line">&nbsp;&nbsp;clInactiveCaption,clActiveCaption,clBackground,</div><div class="code_line">&nbsp;&nbsp;clInactiveCaptionText,clBtnShadow,clBtnFace);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp;tmpItem: array of String;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">// _slot:TRect</div><div class="code_line">constructor TSlot.Create(_x0, _y0, _width, _height:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;width:= _width;</div><div class="code_line">&nbsp;&nbsp;height:= _height;</div><div class="code_line">&nbsp;// slot:=_slot;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure SaveToFile(file1:string;str:string);</div><div class="code_line">var</div><div class="code_line">&nbsp;f:TextFile;</div><div class="code_line">&nbsp;FileDir:String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;FileDir:=&#39;c:\docum\&#39;+file1;</div><div class="code_line">AssignFile(f,FileDir);</div><div class="code_line">if not FileExists(FileDir) then</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;&nbsp;Rewrite(f);</div><div class="code_line">&nbsp;&nbsp;CloseFile(f);</div><div class="code_line">&nbsp;end;</div><div class="code_line">Append(f);</div><div class="code_line">Writeln(f,str);</div><div class="code_line">Flush(f);</div><div class="code_line">CloseFile(f);</div><div class="code_line">end;</div><div class="code_line">//Создание ячеек для слотов</div><div class="code_line">procedure TSlot.DrawSlot(Cs:TCanvas;x,y,MapX,MapY:Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Form1.Canvas.Brush.Color:=clGray;</div><div class="code_line">&nbsp;&nbsp; Cs.Rectangle(x0+MapX,y0+MapY,x0+width+MapX,y0+height+MapY);</div><div class="code_line">end;</div><div class="code_line">//Добавляем в слоты предметы</div><div class="code_line">procedure TSlot.DrawItem(Cs:TCanvas;rect:TRect);</div><div class="code_line">var newX,newY:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;newX := x0+5;</div><div class="code_line">&nbsp;&nbsp;newY := y0+5;</div><div class="code_line">&nbsp;&nbsp;rect.Draw(Form1.Canvas,newX,newY,rect.id1,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TRect.Create(_x0,_y0,_MapX,_MapY,w1,h1,_id1: Integer; _Color: TColor; _str:String; _dragok:Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;inherited Create;</div><div class="code_line">&nbsp;&nbsp;x0 := _x0;</div><div class="code_line">&nbsp;&nbsp;y0 := _y0;</div><div class="code_line">&nbsp;&nbsp;str := _str;</div><div class="code_line">&nbsp;&nbsp;width := w1;</div><div class="code_line">&nbsp;&nbsp;height := h1;</div><div class="code_line">&nbsp;&nbsp;color := _Color;</div><div class="code_line">&nbsp;&nbsp;dragok := _dragok;</div><div class="code_line">&nbsp;&nbsp;Map_X := _MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := _MapY;</div><div class="code_line">&nbsp;&nbsp;id1:=_id1;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем на холст предметы и пронумеруем их.</div><div class="code_line">procedure TRect.Draw(Cs: TCanvas; x, y, id2, MapX, MapY: Integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//x0 := x;</div><div class="code_line">&nbsp;&nbsp;//y0 := y;</div><div class="code_line">&nbsp;&nbsp;Map_X := MapX;</div><div class="code_line">&nbsp;&nbsp;Map_Y := MapY;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=color;</div><div class="code_line">&nbsp;&nbsp;Cs.Rectangle(x+Map_X,y+Map_Y,x+width+Map_X,y+height+Map_Y);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;// with Form1.Canvas do</div><div class="code_line">&nbsp;// begin</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Name:= &#39;Numeration&#39;;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Size:= 18;</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Style:= [fsBold,fsItalic];</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; //clWindowText</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; Cs.Font.Color:= clBlack;</div><div class="code_line">&nbsp;&nbsp; Cs.TextOut(x0, y0, IntToStr(id1));</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end;</div><div class="code_line">//Таймер для прорисовки предметов на холсте</div><div class="code_line">procedure TForm1.Timer1Timer(Sender: TObject);</div><div class="code_line">var i,j,k,aa:Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;OldX := 0;</div><div class="code_line">&nbsp;&nbsp;OldY := 0;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Canvas.FillRect(Form1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; Memo1.Lines.Clear;</div><div class="code_line">&nbsp;&nbsp; //Рисуем на холсте предметы, выбираем их из массива и только те у которых</div><div class="code_line">&nbsp;&nbsp; //значение не равно empty.</div><div class="code_line">&nbsp;&nbsp;for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if Item1[i] &#60;&#62; &#39;empty&#39; then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].x0:=rect[i].x0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].y0:=rect[i].y0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;//Делаем проверку массива tmpItem, чтобы определить</div><div class="code_line">&nbsp;&nbsp;//остались предметы на холссте. Выводим сообщение, что предметы найдены.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if High(tmpItem)=0 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1.Enabled:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ShowMessage(&#39;Вы нашли все предметы!&#39;);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &nbsp;tmpItem[aa]</div><div class="code_line">&nbsp;&nbsp;Memo1.Clear;</div><div class="code_line">for aa:=low(tmpItem) to high(tmpItem) do Memo1.Lines.Add(IntToStr(High(tmpItem)));</div><div class="code_line">&nbsp;Memo2.Clear; </div><div class="code_line">for j:=0 to 5 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">&nbsp;slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;//Сравниваем элементы </div><div class="code_line">&nbsp;&nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;//slot1 - где в слоты добавляются предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp;//rect[k].str - все элементы массива которые находятся на хостле</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Происходит сравнение двух массивов и если находятся совпадения</div><div class="code_line">&nbsp;&nbsp; &nbsp;//то эти предметы добавляются в слот</div><div class="code_line">&nbsp;&nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo2.Lines.Add(IntToStr(k));</div><div class="code_line">&nbsp;&nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp;// ShowMessage(rect[k].str);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;</div><div class="code_line">&nbsp;&nbsp;var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; P : TPoint;</div><div class="code_line">&nbsp;&nbsp; i,ii,b,t1: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if Msg.message = WM_LBUTTONDOWN then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; jj:=0;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; P:=Form1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;&nbsp; for i := 0 to 19 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if (rect[i].x0 &#60; P.X) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].x0+rect[i].width &#62; P.X)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; and (rect[i].y0 &#60; P.Y) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; (rect[i].y0+rect[i].height &#62; P.Y)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; t1:=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Создается временный массив куда заносятся оставшиеся элементы которые</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //еще не выбыли с холста.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Перед созданием tmpItem проверяется, чтобы значение Item1 не было пустым</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for b:=low(Item1) to high(Item1) do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if Item1[b]&#60;&#62;&#39;empty&#39; then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setLength(tmpItem, t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpItem[t1-1]:=Item1[b];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc(t1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//При нажатии происходит сравнение всех предметов которые на холсте,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//с теми что в слотах и если совпадение найдено, предмет удаляется, а</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//в массиве мы получаем пустое значение</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for ii:=0 to 5 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if rect[i].str = slot1[ii] then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;slot1[ii]:=tmpItem[Random(Length(tmpItem))];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Item1[i]:=&#39;empty&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Msg.message = WM_LBUTTONUP then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for i := 1 to 10 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect[i].dragok:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormPaint(Sender: TObject);</div><div class="code_line">var i,j,k: Integer;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">//Стартовые позиции всех предметов</div><div class="code_line">Position2[0,1]:=280;</div><div class="code_line">Position2[1,1]:=420;</div><div class="code_line">Position2[2,1]:=11;</div><div class="code_line">Position2[3,1]:=85;</div><div class="code_line">Position2[4,1]:=255;</div><div class="code_line">Position2[5,1]:=180;</div><div class="code_line">Position2[6,1]:=350;</div><div class="code_line">Position2[7,1]:=120;</div><div class="code_line">Position2[8,1]:=240;</div><div class="code_line">Position2[9,1]:=170;</div><div class="code_line">Position2[10,1]:=350;</div><div class="code_line">Position2[11,1]:=120;</div><div class="code_line">Position2[12,1]:=170;</div><div class="code_line">Position2[13,1]:=50;</div><div class="code_line">Position2[14,1]:=20;</div><div class="code_line">Position2[15,1]:=300;</div><div class="code_line">Position2[16,1]:=180;</div><div class="code_line">Position2[17,1]:=80;</div><div class="code_line">Position2[18,1]:=230;</div><div class="code_line">Position2[19,1]:=50;</div><div class="code_line">&nbsp;</div><div class="code_line">Position2[0,2]:=110;</div><div class="code_line">Position2[1,2]:=44;</div><div class="code_line">Position2[2,2]:=274;</div><div class="code_line">Position2[3,2]:=300;</div><div class="code_line">Position2[4,2]:=200;</div><div class="code_line">Position2[5,2]:=200;</div><div class="code_line">Position2[6,2]:=100;</div><div class="code_line">Position2[7,2]:=150;</div><div class="code_line">Position2[8,2]:=270;</div><div class="code_line">Position2[9,2]:=300;</div><div class="code_line">Position2[10,2]:=20;</div><div class="code_line">Position2[11,2]:=210;</div><div class="code_line">Position2[12,2]:=50;</div><div class="code_line">Position2[13,2]:=100;</div><div class="code_line">Position2[14,2]:=30;</div><div class="code_line">Position2[15,2]:=270;</div><div class="code_line">Position2[16,2]:=120;</div><div class="code_line">Position2[17,2]:=40;</div><div class="code_line">Position2[18,2]:=50;</div><div class="code_line">Position2[19,2]:=170;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//Отрисовываем все предметы на холсте</div><div class="code_line">for i := 0 to 19 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;rect[i] := TRect.Create(Position2[i,1],Position2[i,2],0,0,40,40,i,ItemColor[i],Item1[i],false);</div><div class="code_line">&nbsp;rect[i].Draw(Form1.Canvas,Position2[i,1],Position2[i,2],i,0,0);</div><div class="code_line">end;</div><div class="code_line">Memo1.Clear;</div><div class="code_line">for j:=0 to 5 do</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">slt[j]:=TSlot.Create(10+j*60,370,50,50);</div><div class="code_line">slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp;//Сравниваем значение массивов со слотами, если название предметов совпадает рисуем их.</div><div class="code_line">&nbsp;&nbsp;for k:=0 to 19 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; if rect[k].str = slot1[j] then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; rect2[j] := TRect.Create(10+j*60,370,0,0,40,40,k,ItemColor[k],Item1[j],false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; //Создаем слоты</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawSlot(Form1.Canvas,0,0,0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; //Рисуем предметы</div><div class="code_line">&nbsp;&nbsp; &nbsp; slt[j].DrawItem(Form1.Canvas,rect2[j]);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">i:Integer;</div><div class="code_line">begin</div><div class="code_line">for i:= 0 to 5 do</div><div class="code_line">begin</div><div class="code_line">//ShowMessage(slot1[i]);</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button3Click(Sender: TObject);</div><div class="code_line">var aa:Integer;</div><div class="code_line">begin</div><div class="code_line">for aa:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[aa]:=Item1[aa];</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo1.Lines.Add(slot1[aa])</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormShow(Sender: TObject);</div><div class="code_line">var i,k1,j:Integer; s:String;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">//Создаем новый массив с шестью слотами</div><div class="code_line">setLength(slot1,6);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//Перемещиваем предметы случайным образом и добавляем их в слоты</div><div class="code_line">&nbsp;&nbsp;for i := High(Item1) downto 0 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;j := Random(i + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;s := Item1[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item1[i] := Item1[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Item1[j] := s;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for k1:=0 to High(slot1) do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; slot1[k1]:=Item1[k1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; Memo3.Lines.Add(Item1[k1])</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">slot1[0]:=&#39;Goblet&#39;;</div><div class="code_line">slot1[1]:=&#39;Vase&#39;;</div><div class="code_line">slot1[2]:=&#39;Thread&#39;;</div><div class="code_line">slot1[3]:=&#39;Stick&#39;;</div><div class="code_line">slot1[4]:=&#39;Handbell&#39;;</div><div class="code_line">slot1[5]:=&#39;Whisk&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">Timer1.Enabled:=True;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">Randomize;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	