<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Images mit Linien verbinden, Drag&amp;amp;Drop]]></title><description><![CDATA[<p>Hallo,</p>
<p>zwei Fragen:<br />
ich habe auf der Form verschiedene Images. Diese verbinde ich mit einer Linie, die ich per Canvas auf die Form male. Nun will ich bei Drag&amp;Drop, dass die Linien mitwandern. Ich könnte sie auch beim MouseUp nach dem Drag&amp;Drop alle neu zeichnen lassen, würde aber lieber die erste Variante nehmen. Hierfür ist mein Ansatz, dass ich bei jeder Mausbewegung die alte Linie durch die Hintergrundfarbe ersetze und zur aktuellen Position eine neue zeichne. Oder liege ich da falsch ?</p>
<p>Das Problem ist auch, dass ich per Drag&amp;Drop die bestehenden Linien &quot;wegwischen&quot; kann, wenn das Image-Objekt darüber gezogen wird. Kann ich das verhindern ?</p>
<p>Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189870/images-mit-linien-verbinden-drag-amp-drop</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 13:03:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189870.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Aug 2007 20:40:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Images mit Linien verbinden, Drag&amp;amp;Drop on Fri, 17 Aug 2007 20:40:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zwei Fragen:<br />
ich habe auf der Form verschiedene Images. Diese verbinde ich mit einer Linie, die ich per Canvas auf die Form male. Nun will ich bei Drag&amp;Drop, dass die Linien mitwandern. Ich könnte sie auch beim MouseUp nach dem Drag&amp;Drop alle neu zeichnen lassen, würde aber lieber die erste Variante nehmen. Hierfür ist mein Ansatz, dass ich bei jeder Mausbewegung die alte Linie durch die Hintergrundfarbe ersetze und zur aktuellen Position eine neue zeichne. Oder liege ich da falsch ?</p>
<p>Das Problem ist auch, dass ich per Drag&amp;Drop die bestehenden Linien &quot;wegwischen&quot; kann, wenn das Image-Objekt darüber gezogen wird. Kann ich das verhindern ?</p>
<p>Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1346639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1346639</guid><dc:creator><![CDATA[Peter_Pan]]></dc:creator><pubDate>Fri, 17 Aug 2007 20:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Images mit Linien verbinden, Drag&amp;amp;Drop on Fri, 17 Aug 2007 22:03:47 GMT]]></title><description><![CDATA[<p>So ein &quot;rubber banding&quot; lässt sich mit der pmXOR-Einstellung des Pen erreichen. Dazu sollte die Suchfunktion auch einige Threads liefern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1346679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1346679</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Fri, 17 Aug 2007 22:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Images mit Linien verbinden, Drag&amp;amp;Drop on Mon, 20 Aug 2007 13:35:22 GMT]]></title><description><![CDATA[<p>Danke. Mir ist eben aufgefallen, dass alle Linien, die ich auf der Form zeichne verschwunden sind, wenn ich in einen anderen Task wechsle und wieder zurück gehe, also die Anwendung durch ein anderes Fenster überlappt wird. Kann ich das umgehen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348299</guid><dc:creator><![CDATA[Peter_Pan]]></dc:creator><pubDate>Mon, 20 Aug 2007 13:35:22 GMT</pubDate></item><item><title><![CDATA[Reply to Images mit Linien verbinden, Drag&amp;amp;Drop on Mon, 20 Aug 2007 17:01:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>das ist mein Ansatz. Ich merke mir in einem Array zu jedem zur Laufzeit erzeugten Image die alten x/y Werte (Array Pos 2,3) und die aktuellen (0,1) an Pos. 4 steht die Verbindung zu einem anderen Image. Über das Kontextmenü wähle ich aus, dass eine Beziehung hergestellt werden soll und danach das Ziel-Image. Im Moment kommen alle Linien jeweils von oben links nach oben links. Will ich später in Abhängigkeit der Position jeweils in der Mitte der Außenseite plazieren.</p>
<p>Dann lasse ich es bei MouseUp neu zeichnen. Klappt halbwegs. Ist das denn ein Ansatz so ?</p>
<pre><code>TImage *img[10];
int iPos[10][5];

void __fastcall TfrmMain::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   scX = X;
   scY = Y;
   scDyn = 1;
   if (Button == mbRight)
   {
      int iX = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left + dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Width + X + 10;
      int iY = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top + Y + 150;
      iValue = StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false));
      objPopup-&gt;Popup(iX, iY);
   }

   if (Button == mbLeft)
   {
      if (bBeziehung == true)
      {
         bBeziehung = false;
         Label1-&gt;Visible = false;
         frmMain-&gt;Canvas-&gt;MoveTo(img[iVon]-&gt;Left, img[iVon]-&gt;Top);
         frmMain-&gt;Canvas-&gt;LineTo(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left, dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top);
         int iValue2 = StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false));
         iPos[iValue2][0] = img[iValue2]-&gt;Left;
         iPos[iValue2][1] = img[iValue2]-&gt;Top;
         iPos[iVon][4] = iValue;
         IsDrawing = true;
      }
   }
}

void __fastcall TfrmMain::Image1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
   if (scDyn == 1 &amp;&amp; scX - X &lt; 0)
   {
      dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left + (X - scX);
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Left = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left + 16;
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Top = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top + 16;
   }

   if (scDyn == 1 &amp;&amp; scX - X &gt; 0)
   {
      dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left - (scX - X);
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Left = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left + 16;
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Top = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top + 16;
   }

   if (scDyn == 1 &amp;&amp; scY - Y &lt; 0)
   {
      dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top + (Y - scY);
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Left = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left + 16;
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Top = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top + 16;
   }

   if (scDyn == 1 &amp;&amp; scY - Y &gt; 0)
   {
      dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top - (scY - Y);
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Left = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left + 16;
      memo[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))]-&gt;Top = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top + 16;
   }

   iPos[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))][0] = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Left;
   iPos[StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false))][1] = dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Top;

   iValue = StrToInt(Separator(dynamic_cast&lt;TImage*&gt;(Sender)-&gt;Name, &quot;T&quot;, 2, false));

   frmMain-&gt;SetFocus();
}

void __fastcall TfrmMain::Image1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   scDyn = 0;
   for (int i = 0; i &lt; 10; i++)
   {
      if (iPos[i][4] != 0)
      {
         frmMain-&gt;Canvas-&gt;MoveTo(iPos[i][0], iPos[iVon][1]);
         frmMain-&gt;Canvas-&gt;LineTo(iPos[iPos[i][4&rsqb;&rsqb;[2], iPos[iPos[i][4&rsqb;&rsqb;[3]);

         frmMain-&gt;Canvas-&gt;MoveTo(iPos[i][0], iPos[iVon][1]);
         frmMain-&gt;Canvas-&gt;LineTo(iPos[iPos[i][4&rsqb;&rsqb;[0], iPos[iPos[i][4&rsqb;&rsqb;[1]);
      }
   }
}

void __fastcall TfrmMain::FesteBeziehung1Click(TObject *Sender)
{
   Label1-&gt;Left = iMouseX - 30;
   Label1-&gt;Top = iMouseY + 30;
   Label1-&gt;Visible = true;
   bBeziehung = true;
   iVon = iValue;
   scDyn = 0;
   iPos[iValue][0] = img[iValue]-&gt;Left;
   iPos[iValue][1] = img[iValue]-&gt;Top;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1348450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348450</guid><dc:creator><![CDATA[Peter_Pan]]></dc:creator><pubDate>Mon, 20 Aug 2007 17:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Images mit Linien verbinden, Drag&amp;amp;Drop on Mon, 20 Aug 2007 17:08:38 GMT]]></title><description><![CDATA[<p>Bevor ich mir das im detail ansehe erstmal zwei Dinge.<br />
1. Wenn TImage *img[10] und int iPos[10][5]; globale Variablen sind, nimm sie da raus und mache aus ihnen membervariablen deiner Form.<br />
2. Ein dynamic_cast pro Funktion reicht. das macht das ganze deutlich lesbarer.<br />
So etwa</p>
<pre><code class="language-cpp">void __fastcall TfrmMain::Image1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
   TImage* img = dynamic_cast&lt;TImage*&gt;(Sender); 
   if( img )
   {
// dann mit img weiter arbeiten
</code></pre>
<p>3. Verwende bitte die C++Tags, dann gibt es auch Syntax-coloring</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348458</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 20 Aug 2007 17:08:38 GMT</pubDate></item></channel></rss>