<?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=444071&amp;view=findpost&amp;p=3903009</guid>
        <pubDate>Sat, 13 Apr 2024 12:08:07 +0000</pubDate>
        <title>Проблемы с вращением турели?</title>
        <link>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3903009</link>
        <description><![CDATA[Mr.Delphist: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=444071&view=findpost&p=3902346'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Katerina1993 &#064; <time class="tag-quote__quoted-time" datetime="2024-03-30T05:59:14+03:00">30.03.24, 02:59</time></span><div class='quote '>поворот происходит только когда я перемещаю мышку по холсту, что мне кажется странным</div></div><br>
<br>
Ничего странного - если мышка вне холста, то тот не получает сообытий про новое положение мышки. Если хочется получать такие события всегда - почитайте про mouse capture.]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902354</guid>
        <pubDate>Sat, 30 Mar 2024 15:16:44 +0000</pubDate>
        <title>Проблемы с вращением турели?</title>
        <link>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902354</link>
        <description><![CDATA[Katerina1993: Все исправила, оказывается нужно сохранить параметры используя функцию SaveDc, а потом восстановить RestoreDC.<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">SetGraphicsMode(hDc2, GM_ADVANCED);</div><div class="code_line">&nbsp;&nbsp; SaveDC(hDc2);</div><div class="code_line">&nbsp;&nbsp; fillChar(M, sizeOf(M), 0);</div><div class="code_line">&nbsp;&nbsp; M.eM11 := mtx.a;</div><div class="code_line">&nbsp;&nbsp; M.eM12 := mtx.b;</div><div class="code_line">&nbsp;&nbsp; M.eM21 := mtx.c;</div><div class="code_line">&nbsp;&nbsp; M.eM22 := mtx.d;</div><div class="code_line">&nbsp;&nbsp; M.eDx := mtx.tx;</div><div class="code_line">&nbsp;&nbsp; M.eDy := mtx.ty;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ModifyWorldTransform(hDc2, M, MWT_LEFTMULTIPLY);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Cs.Draw(0,0,bitmap0);</div><div class="code_line">&nbsp;&nbsp;RestoreDC(HDC2,1);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Код выше я перенесла в процедуру TMatrix1.Draw() и вызываю ее в TForm1.Timer1Timer.<br>
Полностью код и исходники: <span class="b-attach" data-size="14528" data-hits="101" data-attach-id="65672" 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=65672' title='Скачать файл' target='_blank'>RotateObj.zip</a> (, : 101)
		</span><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, ExtCtrls, AppEvnts, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPoint1 = record x,y:Currency &nbsp;; end;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Image1: TImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(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 Timer1Timer(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;TMatrix1 = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;a, b, c,d,tx,ty: Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;fr:TForm;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bitmap0:TBitmap;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cs:TCanvas;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(); </div><div class="code_line">&nbsp;&nbsp; &nbsp;function identity ():TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function appendTransform (x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;bmp1: TBitmap;</div><div class="code_line">&nbsp;&nbsp;x1:Integer = 225;</div><div class="code_line">&nbsp;&nbsp;y1:Integer = 275;</div><div class="code_line">&nbsp;&nbsp;rotate1:Integer = 90;</div><div class="code_line">&nbsp;&nbsp;pt:TPoint1;</div><div class="code_line">&nbsp;&nbsp;mtx:TMatrix1;</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 TMatrix1.Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; inherited Create;</div><div class="code_line">&nbsp;&nbsp; fr:=_fr;</div><div class="code_line">&nbsp;&nbsp; bitmap0:=_bitmap;</div><div class="code_line">&nbsp;&nbsp; Cs:=_Cs;</div><div class="code_line">&nbsp;&nbsp; a:=_a;</div><div class="code_line">&nbsp;&nbsp; b:=_b;</div><div class="code_line">&nbsp;&nbsp; c:=_d;</div><div class="code_line">&nbsp;&nbsp; tx:=_tx;</div><div class="code_line">&nbsp;&nbsp; ty:=_ty;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.Draw();</div><div class="code_line">var HDC2:THandle; M:TXFORM;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; mtx.identity();</div><div class="code_line">&nbsp;&nbsp; mtx.appendTransform(x1, y1, 1, 1, rotate1, 0, 0, 16, 29.5);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; hDc2 := Cs.Handle;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; SetGraphicsMode(hDc2, GM_ADVANCED);</div><div class="code_line">&nbsp;&nbsp; SaveDC(hDc2);</div><div class="code_line">&nbsp;&nbsp; fillChar(M, sizeOf(M), 0);</div><div class="code_line">&nbsp;&nbsp; M.eM11 := mtx.a;</div><div class="code_line">&nbsp;&nbsp; M.eM12 := mtx.b;</div><div class="code_line">&nbsp;&nbsp; M.eM21 := mtx.c;</div><div class="code_line">&nbsp;&nbsp; M.eM22 := mtx.d;</div><div class="code_line">&nbsp;&nbsp; M.eDx := mtx.tx;</div><div class="code_line">&nbsp;&nbsp; M.eDy := mtx.ty;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ModifyWorldTransform(hDc2, M, MWT_LEFTMULTIPLY);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Cs.Draw(0,0,bitmap0);</div><div class="code_line">&nbsp;&nbsp;RestoreDC(HDC2,1);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.identity():TMatrix1;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a := 1;</div><div class="code_line">&nbsp;&nbsp;d := 1;</div><div class="code_line">&nbsp;&nbsp;b := 0;</div><div class="code_line">&nbsp;&nbsp;c := 0;</div><div class="code_line">&nbsp;&nbsp;tx := 0;</div><div class="code_line">&nbsp;&nbsp;ty := 0;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.appendTransform(x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">var r, cos1, sin1:Real; a1:Integer;</div><div class="code_line">begin</div><div class="code_line">a1:=rotation mod 360;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if a1 &#60; 360 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; r := rotation*PI/180;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; cos1 := cos(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; sin1 := sin(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cos1 := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sin1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; append(cos1*scaleX, sin1*scaleX, -sin1*scaleY, cos1*scaleY, x, y);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; tx := tx - (regX*a+regY*c);</div><div class="code_line">&nbsp;&nbsp; ty := ty - (regX*b+regY*d);</div><div class="code_line">&nbsp;&nbsp; fr.Caption:=FloatToStr(c);</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">var a1,b1,c1,d1:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a1:=a;</div><div class="code_line">&nbsp;&nbsp;b1:=b;</div><div class="code_line">&nbsp;&nbsp;c1:=c;</div><div class="code_line">&nbsp;&nbsp;d1:=d;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (a2 &#60;&#62; 1) or (b2 &#60;&#62; 0) or (c2 &#60;&#62; 0) or (d2 &#60;&#62; 1) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; a &nbsp;:= a1*a2+c1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; b &nbsp;:= b1*a2+d1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; c &nbsp;:= a1*c2+c1*d2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; d &nbsp;:= b1*c2+d1*d2;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;tx:=a1*tx2+c1*ty2+tx;</div><div class="code_line">&nbsp;&nbsp;ty:=b1*tx2+d1*ty2+ty;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</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">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;bmp1 := TBitmap.Create;</div><div class="code_line">&nbsp;&nbsp;bmp1.LoadFromFile(&#39;.\WeaponQuadSkin.bmp&#39;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mtx:=TMatrix1.Create(bmp1,Image1.Canvas,Form1,1,0,0,0,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Timer1.Enabled:=True;</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">//var P : TPoint;</div><div class="code_line">begin</div><div class="code_line">if Msg.message = WM_MOUSEMOVE then</div><div class="code_line">begin</div><div class="code_line">&nbsp;//P:=Image1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;//pt.x := P.X;</div><div class="code_line">&nbsp;//pt.y := P.Y;</div><div class="code_line">&nbsp;</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.Timer1Timer(Sender: TObject);</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.FillRect(Form1.Image1.ClientRect);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; rotate1:=rotate1+5;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; mtx.Draw();</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">end.</div></ol></div></div></div></div><br>
Теперь все работает без зависания и использования мышки.<br>
<img class='tag-img' src='https://i.ibb.co/92SNkkh/Rotate-Obj.gif' alt='user posted image'>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902350</guid>
        <pubDate>Sat, 30 Mar 2024 07:49:38 +0000</pubDate>
        <title>Проблемы с вращением турели?</title>
        <link>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902350</link>
        <description><![CDATA[Katerina1993: Добавила, ничего не изменилось.<br>
<span class="b-attach" data-size="42885" data-hits="102" data-attach-id="65669" data-attach-post-id="3902350">
			<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=3902350&amp;attach_id=65669' title='Скачать файл' target='_blank'>img3.jpg</a> (, : 102)
		</span>]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902349</guid>
        <pubDate>Sat, 30 Mar 2024 06:52:00 +0000</pubDate>
        <title>Проблемы с вращением турели?</title>
        <link>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902349</link>
        <description><![CDATA[macomics: Добавьте в начале procedure TForm1.Timer1Timer(Sender: TObject); строчку Image1.Invalidate;]]></description>
        <author>macomics</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902346</guid>
        <pubDate>Sat, 30 Mar 2024 02:59:14 +0000</pubDate>
        <title>Проблемы с вращением турели?</title>
        <link>https://forum.sources.ru/index.php?showtopic=444071&amp;view=findpost&amp;p=3902346</link>
        <description><![CDATA[Katerina1993: Я написала небольшой класс на delphi, чтобы разворот объекта происходил в градусах. Например можно установить 90, 180, 270 градусов и объект будет поворачиваться в соответствующую сторону. <br>
<br>
Здесь я использую ModifyWorldTransform для разворота объекта. Если указать статические параметры например 90, то объект разворачивается куда надо. Я решила попробовать использовать динамические параметры, прибавляю по 5 градусов каждые 20 миллисекунд (Компонент Timer).<br>
<br>
В итоге поворот происходит только когда я перемещаю мышку по холсту, что мне кажется странным и вторая проблема разворот происходит с подвисанием. Собственно пример проблемы в прикрепленной гифке. (Перемещаю мышку разворот происходит и с подвисанием). На гифку подвисание не попала, когда записывала видео, вдруг все подвисания прекратились, однако программа притормаживает и турель поворачивает сразу на градусов 30.    <br>
<br>
<img class='tag-img' src='https://i.ibb.co/XzJ799V/Rotate1.gif' alt='user posted image'><br>
<br>
Вот сам код и исходники.<span class="b-attach" data-size="14441" data-hits="101" data-attach-id="65667" 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=65667' title='Скачать файл' target='_blank'>RotateObj.zip</a> (, : 101)
		</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, ExtCtrls, AppEvnts, StdCtrls;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TPoint1 = record x,y:Currency &nbsp;; end;</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Image1: TImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ApplicationEvents1: TApplicationEvents;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Timer1: TTimer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(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 Timer1Timer(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;TMatrix1 = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;a, b, c,d,tx,ty: Real;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;fr:TForm;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bitmap0:TBitmap;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Cs:TCanvas;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Procedure Draw(); </div><div class="code_line">&nbsp;&nbsp; &nbsp;function identity ():TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function appendTransform (x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;bmp1: TBitmap;</div><div class="code_line">&nbsp;&nbsp;x1:Integer = 225;</div><div class="code_line">&nbsp;&nbsp;y1:Integer = 275;</div><div class="code_line">&nbsp;&nbsp;rotate1:Integer = 90;</div><div class="code_line">&nbsp;&nbsp;pt:TPoint1;</div><div class="code_line">&nbsp;&nbsp;mtx:TMatrix1;</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 TMatrix1.Create(_bitmap:TBitmap;_Cs:TCanvas;_fr:TForm;_a, _b,_c,_d, _tx, _ty: Real);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; inherited Create;</div><div class="code_line">&nbsp;&nbsp; fr:=_fr;</div><div class="code_line">&nbsp;&nbsp; bitmap0:=_bitmap;</div><div class="code_line">&nbsp;&nbsp; Cs:=_Cs;</div><div class="code_line">&nbsp;&nbsp; a:=_a;</div><div class="code_line">&nbsp;&nbsp; b:=_b;</div><div class="code_line">&nbsp;&nbsp; c:=_d;</div><div class="code_line">&nbsp;&nbsp; tx:=_tx;</div><div class="code_line">&nbsp;&nbsp; ty:=_ty;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMatrix1.Draw();</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Cs.Draw(0,0,bitmap0);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.identity():TMatrix1;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a := 1;</div><div class="code_line">&nbsp;&nbsp;d := 1;</div><div class="code_line">&nbsp;&nbsp;b := 0;</div><div class="code_line">&nbsp;&nbsp;c := 0;</div><div class="code_line">&nbsp;&nbsp;tx := 0;</div><div class="code_line">&nbsp;&nbsp;ty := 0;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.appendTransform(x, y, scaleX, scaleY:Real; rotation:Integer; skewX, skewY, regX, regY:Real):TMatrix1;</div><div class="code_line">var r, cos1, sin1:Real; a1:Integer;</div><div class="code_line">begin</div><div class="code_line">a1:=rotation mod 360;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if a1 &#60; 360 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; r := rotation*PI/180;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; cos1 := cos(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; sin1 := sin(r);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cos1 := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;sin1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; append(cos1*scaleX, sin1*scaleX, -sin1*scaleY, cos1*scaleY, x, y);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; tx := tx - (regX*a+regY*c);</div><div class="code_line">&nbsp;&nbsp; ty := ty - (regX*b+regY*d);</div><div class="code_line">&nbsp;&nbsp; fr.Caption:=FloatToStr(c);</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TMatrix1.append(a2, b2, c2, d2, tx2, ty2:Real):TMatrix1;</div><div class="code_line">var a1,b1,c1,d1:Real;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;a1:=a;</div><div class="code_line">&nbsp;&nbsp;b1:=b;</div><div class="code_line">&nbsp;&nbsp;c1:=c;</div><div class="code_line">&nbsp;&nbsp;d1:=d;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (a2 &#60;&#62; 1) or (b2 &#60;&#62; 0) or (c2 &#60;&#62; 0) or (d2 &#60;&#62; 1) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; a &nbsp;:= a1*a2+c1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; b &nbsp;:= b1*a2+d1*b2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; c &nbsp;:= a1*c2+c1*d2;</div><div class="code_line">&nbsp;&nbsp; &nbsp; d &nbsp;:= b1*c2+d1*d2;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;tx:=a1*tx2+c1*ty2+tx;</div><div class="code_line">&nbsp;&nbsp;ty:=b1*tx2+d1*ty2+ty;</div><div class="code_line">&nbsp;&nbsp;Result:=mtx;</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">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;bmp1 := TBitmap.Create;</div><div class="code_line">&nbsp;&nbsp;bmp1.LoadFromFile(&#39;.\WeaponQuadSkin.bmp&#39;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mtx:=TMatrix1.Create(bmp1,Image1.Canvas,Form1,1,0,0,0,0,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Timer1.Enabled:=True;</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">var P : TPoint;</div><div class="code_line">begin</div><div class="code_line">if Msg.message = WM_MOUSEMOVE then</div><div class="code_line">begin</div><div class="code_line">&nbsp;//P:=Image1.ScreenToClient(Mouse.CursorPos);</div><div class="code_line">&nbsp;//pt.x := P.X;</div><div class="code_line">&nbsp;//pt.y := P.Y;</div><div class="code_line">&nbsp;</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.Timer1Timer(Sender: TObject);</div><div class="code_line">var mtx1:TMatrix1; HDC2:THandle; M:TXFORM;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.Brush.Color:=clWhite;</div><div class="code_line">&nbsp;&nbsp;Form1.Image1.Canvas.FillRect(Form1.Image1.ClientRect);</div><div class="code_line">&nbsp;&nbsp; mtx.identity();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; rotate1:=rotate1+5;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; mtx.appendTransform(x1, y1, 1, 1, rotate1, 0, 0, 16, 29.5);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; hDc2 := Image1.Canvas.Handle;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; SetGraphicsMode(hDc2, GM_ADVANCED);</div><div class="code_line">&nbsp;&nbsp; fillChar(M, sizeOf(M), 0);</div><div class="code_line">&nbsp;&nbsp; M.eM11 := mtx.a;</div><div class="code_line">&nbsp;&nbsp; M.eM12 := mtx.b;</div><div class="code_line">&nbsp;&nbsp; M.eM21 := mtx.c;</div><div class="code_line">&nbsp;&nbsp; M.eM22 := mtx.d;</div><div class="code_line">&nbsp;&nbsp; M.eDx := mtx.tx;</div><div class="code_line">&nbsp;&nbsp; M.eDy := mtx.ty;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ModifyWorldTransform(hDc2, M, MWT_LEFTMULTIPLY);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; mtx.Draw();</div><div class="code_line">&nbsp;</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>
P.S. По плану мышь тоже будет включена в работу для нее даже создан компонент. Турель будет следить за курсором, но я предпочитаю самой написать код. Сейчас delphi 7 выдает результат который я не могу объяснить.]]></description>
        <author>Katerina1993</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	