<?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[Auswahl in TPaintBox auf Quadrat beschränken.]]></title><description><![CDATA[<p>So also...<br />
habe ein Programm geschrieben, welches ein Fraktal berechnet und habe dem Benutzer die Möglichkeit gegeben in dieses zu vergrößer, indem er einfach eine Auswahl direkt in der PaintBox macht.<br />
Nun das klappt auch, aber die Auswahl sollte immer quadratisch sein, weil die PaintBox auch 500x500 ist.<br />
Deshalb habe ich einfach die y-Werte angepasst:</p>
<pre><code>void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
xstart=xstart+X*incr;  //PaintBox-Koord auf Real-Koord
ystart=ystart+Y*incr;  //xstarta entspricht der alten Auswahl
                       //incr ist der derzeitige Zoom
...
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
xend=(xstarta+X*incr);  //PaintBox-Koord auf Real-Koord
yend=(ystarta+[b](xend-xstart))[/b];
...
DrawFraktal(xstart,ystart,xend,yend);
}
//---------------------------------------------------------------------------
</code></pre>
<p>Jedoch könnte das ja den Benutzer verwirren, weil sich die Auswahl ja so nur nach dem X-Wert richtig...</p>
<p>Am Ellegantesten wäre es nartürlich, wenn man den Benutzer seine Auswahl gleich erkenntlich machen könnte, welche denn auch quadratisch bleibt.<br />
Ich habe überlegt das mit Canvas zu machen, aber das ist ja Schwachsinn, weil dann das zuvor gezeichnete weggemacht wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    />.</p>
<p>Also.....<br />
**Frage1:**Wie kann ich die Auswahl des Benutzers erkenntlich machen?<br />
**Frage2:**Wie kann ich die Auswahl dazu zwingen quadratisch zu bleiben?</p>
<p>Bin für jeden Tipp dankbar.</p>
<p>mfg</p>
<p>/Edit: Irgendwie funktionieren die C++ Code Tags nicht, deswegen habe ich die normalen genommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/122531/auswahl-in-tpaintbox-auf-quadrat-beschränken</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 17:24:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/122531.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Oct 2005 18:02:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auswahl in TPaintBox auf Quadrat beschränken. on Thu, 06 Oct 2005 18:16:52 GMT]]></title><description><![CDATA[<p>So also...<br />
habe ein Programm geschrieben, welches ein Fraktal berechnet und habe dem Benutzer die Möglichkeit gegeben in dieses zu vergrößer, indem er einfach eine Auswahl direkt in der PaintBox macht.<br />
Nun das klappt auch, aber die Auswahl sollte immer quadratisch sein, weil die PaintBox auch 500x500 ist.<br />
Deshalb habe ich einfach die y-Werte angepasst:</p>
<pre><code>void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
xstart=xstart+X*incr;  //PaintBox-Koord auf Real-Koord
ystart=ystart+Y*incr;  //xstarta entspricht der alten Auswahl
                       //incr ist der derzeitige Zoom
...
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
xend=(xstarta+X*incr);  //PaintBox-Koord auf Real-Koord
yend=(ystarta+[b](xend-xstart))[/b];
...
DrawFraktal(xstart,ystart,xend,yend);
}
//---------------------------------------------------------------------------
</code></pre>
<p>Jedoch könnte das ja den Benutzer verwirren, weil sich die Auswahl ja so nur nach dem X-Wert richtig...</p>
<p>Am Ellegantesten wäre es nartürlich, wenn man den Benutzer seine Auswahl gleich erkenntlich machen könnte, welche denn auch quadratisch bleibt.<br />
Ich habe überlegt das mit Canvas zu machen, aber das ist ja Schwachsinn, weil dann das zuvor gezeichnete weggemacht wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    />.</p>
<p>Also.....<br />
**Frage1:**Wie kann ich die Auswahl des Benutzers erkenntlich machen?<br />
**Frage2:**Wie kann ich die Auswahl dazu zwingen quadratisch zu bleiben?</p>
<p>Bin für jeden Tipp dankbar.</p>
<p>mfg</p>
<p>/Edit: Irgendwie funktionieren die C++ Code Tags nicht, deswegen habe ich die normalen genommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886603</guid><dc:creator><![CDATA[Seth_99]]></dc:creator><pubDate>Thu, 06 Oct 2005 18:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Auswahl in TPaintBox auf Quadrat beschränken. on Fri, 07 Oct 2005 04:32:37 GMT]]></title><description><![CDATA[<p>Beides im OnMouseMove, welches über eine boolsche Variable im OnMouseDown und OnMouseUP gesteuert wird. Im Handbuch zum Builder 6 ist dazu ein Beispiel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886813</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Fri, 07 Oct 2005 04:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to Auswahl in TPaintBox auf Quadrat beschränken. on Fri, 07 Oct 2005 12:11:32 GMT]]></title><description><![CDATA[<p>Ok danke für deinen Tipp, habe das Bsp. auch im Builder5 gefunden. Habe mich daran orientiert und es so gelöst:</p>
<pre><code class="language-cpp">TPoint pOrigin,pMove;

void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
xstart=xstart+X*incr;
ystart=ystart+Y*incr;

pOrigin.x=X;pOrigin.y=Y;
pMove.x  =X;pMove.y  =Y;
Drawing=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
if(Drawing)
 {
  DrawRectAngle(pOrigin,pMove);    //altes Rechteck verschwinden lassen
  pMove=Point(X,pOrigin.y+(pMove.x-pOrigin.x)); //neue Koord,y+(pMove.x-pOrigin.x)--&gt;Zwang zum Quadrat
  DrawRectAngle(pOrigin,pMove);    //neues zeichnen
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
Drawing=false;
xend=(xstarta+X*incr);
yend=(ystarta+(xend-xstart));

DrawFraktal(xstart,ystart,xend,yend);
}
//---------------------------------------------------------------------------
void TForm1::DrawRectAngle(TPoint TopLeft, TPoint BottomRight)
{
PaintBox1-&gt;Canvas-&gt;Pen-&gt;Style=psSolid;
PaintBox1-&gt;Canvas-&gt;Pen-&gt;Mode =pmNotXor;
PaintBox1-&gt;Canvas-&gt;Rectangle(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y);
PaintBox1-&gt;Canvas-&gt;Pen-&gt;Mode =pmCopy;
}
</code></pre>
<p>Ist vllt nicht die elleganteste Methode, aber ich bin zufrieden damit, also vielen Dank nochmals <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    />.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886991</guid><dc:creator><![CDATA[Seth_99]]></dc:creator><pubDate>Fri, 07 Oct 2005 12:11:32 GMT</pubDate></item></channel></rss>