<?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[Probleme bei der Sichtbarkeit von Shapes]]></title><description><![CDATA[<p>Hallo!<br />
Habe dieses Forum von einem Kollegen empfohlen bekommen und hoffe, Ihr könnt mir weiterhelfen!</p>
<p>Nutze zurzeit BCB6 und BCB2007 und habe folgendes Problem:<br />
Ich habe ein Shape (als Member in einer Klasse) folgendermaßen deklariert:</p>
<pre><code class="language-cpp">TShape  *Shapebewertung[4];
</code></pre>
<p>Weiters wird das Shapearray dynamisch erstellt.</p>
<p>Im Konstruktor ändere ich nun die Visibility auf false:</p>
<pre><code class="language-cpp">Shape-&gt;Visible = false; //Shapebewertung[i] wurde zum Initialisieren an eine Prozedur übergeben
</code></pre>
<p>Obiges funktioniert auch, doch jetzt ein Rätsel (zumindest für mich):<br />
In einer Methode der Klasse, ein <strong>dynamisches OnClick-Event</strong>[u] eines Buttons, will ich nun die Shapes wieder sichtbar machen:</p>
<pre><code class="language-cpp">for(int i=0;i&lt;4;i++)
{
	Shapebewertung[i]-&gt;Visible = true;
}
</code></pre>
<p>Jedoch zeigen mir genau bei dieser Zeile beide Compiler zur Laufzeit dieselbe Expection an:<br />
<a href="http://www.imgdumper.com/file/img/2007/dec/30/img/jlnbkhsnbpxd3lisnt8yat5y0.jpg" rel="nofollow">http://www.imgdumper.com/file/img/2007/dec/30/img/jlnbkhsnbpxd3lisnt8yat5y0.jpg</a></p>
<p>Ich weiß nicht, was ich falsch mache, da es vorher (oben) schon funktioniert hat! Kann es vielleicht daran liegen, dass es sich bei der Methode um ein OnClick-Event handelt? Und wenn ja, wie kann ich es umgehen (das Problem). Viele meiner Kollegen wussten auch keinen Rat, somit hoffe ich auf Eure Mithilfe!</p>
<p>Ah, und noch eine allgemeine Frage, gibt es einen Grund, dass man z.B. einem dynamischen Label einen Namen (Caption) zuweist?</p>
<p>Bitte helft mir!</p>
<p>Falls es jemand braucht, habe ich hier noch das gesamte Projekt hochgeladen: (BCB6)[400KB]<br />
<a href="http://rapidshare.com/files/80102086/bcb6_mastermind.rar" rel="nofollow">http://rapidshare.com/files/80102086/bcb6_mastermind.rar</a><br />
(Laut Kaspersky natürlich virenfrei)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202033/probleme-bei-der-sichtbarkeit-von-shapes</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 04:33:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202033.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Jan 2008 20:35:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Sun, 06 Jan 2008 20:38:44 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Habe dieses Forum von einem Kollegen empfohlen bekommen und hoffe, Ihr könnt mir weiterhelfen!</p>
<p>Nutze zurzeit BCB6 und BCB2007 und habe folgendes Problem:<br />
Ich habe ein Shape (als Member in einer Klasse) folgendermaßen deklariert:</p>
<pre><code class="language-cpp">TShape  *Shapebewertung[4];
</code></pre>
<p>Weiters wird das Shapearray dynamisch erstellt.</p>
<p>Im Konstruktor ändere ich nun die Visibility auf false:</p>
<pre><code class="language-cpp">Shape-&gt;Visible = false; //Shapebewertung[i] wurde zum Initialisieren an eine Prozedur übergeben
</code></pre>
<p>Obiges funktioniert auch, doch jetzt ein Rätsel (zumindest für mich):<br />
In einer Methode der Klasse, ein <strong>dynamisches OnClick-Event</strong>[u] eines Buttons, will ich nun die Shapes wieder sichtbar machen:</p>
<pre><code class="language-cpp">for(int i=0;i&lt;4;i++)
{
	Shapebewertung[i]-&gt;Visible = true;
}
</code></pre>
<p>Jedoch zeigen mir genau bei dieser Zeile beide Compiler zur Laufzeit dieselbe Expection an:<br />
<a href="http://www.imgdumper.com/file/img/2007/dec/30/img/jlnbkhsnbpxd3lisnt8yat5y0.jpg" rel="nofollow">http://www.imgdumper.com/file/img/2007/dec/30/img/jlnbkhsnbpxd3lisnt8yat5y0.jpg</a></p>
<p>Ich weiß nicht, was ich falsch mache, da es vorher (oben) schon funktioniert hat! Kann es vielleicht daran liegen, dass es sich bei der Methode um ein OnClick-Event handelt? Und wenn ja, wie kann ich es umgehen (das Problem). Viele meiner Kollegen wussten auch keinen Rat, somit hoffe ich auf Eure Mithilfe!</p>
<p>Ah, und noch eine allgemeine Frage, gibt es einen Grund, dass man z.B. einem dynamischen Label einen Namen (Caption) zuweist?</p>
<p>Bitte helft mir!</p>
<p>Falls es jemand braucht, habe ich hier noch das gesamte Projekt hochgeladen: (BCB6)[400KB]<br />
<a href="http://rapidshare.com/files/80102086/bcb6_mastermind.rar" rel="nofollow">http://rapidshare.com/files/80102086/bcb6_mastermind.rar</a><br />
(Laut Kaspersky natürlich virenfrei)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432097</guid><dc:creator><![CDATA[o*amp*oler]]></dc:creator><pubDate>Sun, 06 Jan 2008 20:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Sun, 06 Jan 2008 21:33:18 GMT]]></title><description><![CDATA[<p>o&amp;oler schrieb:</p>
<blockquote>
<pre><code class="language-cpp">TShape  *Shapebewertung[4];
</code></pre>
<pre><code class="language-cpp">Shape-&gt;Visible = false; //Shapebewertung[i] wurde zum Initialisieren an eine Prozedur übergeben
</code></pre>
</blockquote>
<p>gibt es einen zusammenhang zwischen diesen beiden code-teilen?</p>
<blockquote>
<pre><code class="language-cpp">for(int i=0;i&lt;4;i++)
{
	Shapebewertung[i]-&gt;Visible = true;
}
</code></pre>
<p>Jedoch zeigen mir genau bei dieser Zeile beide Compiler zur Laufzeit dieselbe Expection an:<br />
<a href="http://www.imgdumper.com/file/img/2007/dec/30/img/jlnbkhsnbpxd3lisnt8yat5y0.jpg" rel="nofollow">http://www.imgdumper.com/file/img/2007/dec/30/img/jlnbkhsnbpxd3lisnt8yat5y0.jpg</a></p>
</blockquote>
<p>weißt du was ein debugger ist? damit könntest du sehen, dass mindestens eines der array-elemente 0 ist, wodurch die exception verursacht wird.<br />
mehr ist mit diesen winzigen codefragmenten nicht rauszufinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432123</guid><dc:creator><![CDATA[dbg]]></dc:creator><pubDate>Sun, 06 Jan 2008 21:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Mon, 07 Jan 2008 11:09:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Shape-&gt;Visible = false; //Shapebewertung[i] wurde zum Initialisieren an eine Prozedur übergeben</p>
</blockquote>
<p>Zeig mal den Kopf dieser Funktion... (Parameter als Referenz übergeben???)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432296</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 07 Jan 2008 11:09:32 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Mon, 07 Jan 2008 18:08:26 GMT]]></title><description><![CDATA[<p>Ok, entschuldigt dass ich mein Problem nur so kurz beschrieben hab:<br />
Hier die ausführlichere Variante:</p>
<p>eventuele Konstanten cwidth werden vorher definiert!</p>
<p>In einer Header-Datei &quot;File1.h&quot; erzeuge ich meine Klasse namens Versuch:</p>
<pre><code class="language-cpp">class Versuch
{
private: //Membervariablen:
TShape  *Shapebewertung[4];
 //Auswertenbutton: Beim Klicken des Buttons, sollten die Shapes sichtbar gemacht werden &lt;-- funzt nicht!
TButton *Button;

void initial(TShape *Shape,TForm *Form, const int x, const int y, const int width, const bool visibility, const bool typ); 
//die vielen Parameter geben u.a. die standardmäßige Sichtbarkeit (visibility), den Besitzer (Form) und die Position des Shapes an. Diese Prozedur wird im Konstruktor aufgerufen, da es somit feiner ist jedes Shape zu initialisieren

//und weitere Membervariablen, aber hierfür unwichtig...

public:
//Konstruktor:
Versuch(TForm *Form, const int x, const int y,const bool visibility, const int number); //übergeben wird die Startposition des Shapes, sowie die Visibility

//Auswertenbutton:
//Event, welches beim Klicken des Buttons &quot;in Kraft tritt&quot;
void __fastcall Auswerten(TObject *Sender);
}
</code></pre>
<p>Konstruktor:</p>
<pre><code class="language-cpp">Versuch::Versuch(TForm *Form, const int x, const int y,const bool visibility, const int number)
{
//Shapes initialisieren
	for(int i=0;i&lt;4;i++)
	{
			initial(Shapekreis[i],Form,x+i*abstand,y,cwidth, visibility, true);
//das folgende hat alles seine Richtigkeit so:
//Übergeben der Shapes an die Prozedur &quot;initial&quot;			
if(i&lt;2) initial(Shapebewertung[i],Form,(x+4*abstand+i*abstandklein),(y-cwidth/4),cwidthsmall,false, false);
			else initial(Shapebewertung[i],Form,x+4*abstand+(i-2)*abstandklein,y+cwidth/4,cwidthsmall,false, false);
	}

//weiters wird der Button initialisiert...
}
</code></pre>
<p>initial:</p>
<pre><code class="language-cpp">void Versuch::initial(TShape *Shape,TForm *Form, const int x, const int y, const int width,const bool visibility, const bool typ)
{
        Shape = new TShape(Form);
        Shape-&gt;Parent=Form;
        //Shape-&gt;Name = &quot;Shape&quot;;
        Shape-&gt;Top = y;
        Shape-&gt;Left= x;
        Shape-&gt;Width=width;
        Shape-&gt;Brush-&gt;Style=bsSolid;
        //Auf Kreis umstellen:
        Shape-&gt;Shape=stCircle;
        //Farbe initialisieren
        change_color(Shape,clWhite);
        Shape-&gt;Visible = visibility;
        //da auch noch andere Shapes initialisiert werden, wird ein Parameter  typ übergeben
        if(typ) Shape-&gt;OnMouseDown=ShapeKlicken;
}//initial()
</code></pre>
<p>Auswerten:</p>
<pre><code class="language-cpp">void __fastcall Versuch::Auswerten(TObject *Sender)
{
	//Bewertungsshapes sichtbar machen:
	for(int i=0;i&lt;4;i++)
	{
		Shapebewertung[i]-&gt;Visible = true;
		//Show();
	}
}
</code></pre>
<p>Aufruf in Form1 OnCreate &lt;-- BesitzerForm:</p>
<pre><code class="language-cpp">for(int i=0;i&lt;anzahl;i++)
        {
                //Nur dann sichtbar, wenn es der erste Versuch ist (true)
                if(!i) versuch[i]=new Versuch(Form1,xstart,ystart+(i*50),true,i);
                else versuch[i]=new Versuch(Form1,xstart,ystart+(i*50),false,i);
        }
</code></pre>
<p>Das war das ganze &quot;Wunder&quot;, nur funktioniert das eben die Umstellung der Sichtbarkeit beim Klicken der Auswertebutton nicht und ja ich weiß auch was ein Debugger ist (ein kleines bisschen) aber dieser nützt <strong>mir</strong> hier (noch) nichts, weil ich einfach noch zu wenig Erfahrung damit habe (bin gerade erst neu im c-Builder und habe für meine vorherigen Programme kaum ein Debugger gebraucht. Und sorry, aber woher weißt du, dass mindestens ein Shape Null ist, etwa aus dem Bild (sorry für die blöde Frage, aber aus Fehlern wird man schlau)<br />
Und wo kann nun in diesem Code ein Element 0 sein, ich habe doch alles dynamisch erstellt das einzige was ich nicht gemacht habe, ist den einzelnen Shapes Namen zugewiesen, könnte es vielleicht daran liegen?</p>
<p>Hoffe, dass das das Problem besser schildert! Vieleicht ist mir auch beim Kopieren der eine oder andere Fehler unterlaufen, bitte das zu entschuldigen<br />
Und danke für Eure raschen Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432538</guid><dc:creator><![CDATA[o*amp*oler]]></dc:creator><pubDate>Mon, 07 Jan 2008 18:08:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Mon, 07 Jan 2008 18:09:47 GMT]]></title><description><![CDATA[<p>o&amp;oler schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Versuch::initial(TShape *Shape,TForm *Form, const int x, const int y, const int width,const bool visibility, const bool typ)
{
        Shape = new TShape(Form);
</code></pre>
</blockquote>
<p>das tut nicht das, was du vermutest. Shape ist eine lokale variable innerhalb der funktion initial(), das new hat außerhalb der funktion keine auswirkung, außer einem memleak.</p>
<p>du willst vielleicht das:</p>
<pre><code class="language-cpp">void Versuch::initial(TShape *&amp;Shape,[...])
</code></pre>
<p>also eine referenz auf den shape-pointer übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432603</guid><dc:creator><![CDATA[fix1]]></dc:creator><pubDate>Mon, 07 Jan 2008 18:09:47 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Mon, 07 Jan 2008 18:22:24 GMT]]></title><description><![CDATA[<p>fix1 schrieb:</p>
<blockquote>
<p>o&amp;oler schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Versuch::initial(TShape *Shape,TForm *Form, const int x, const int y, const int width,const bool visibility, const bool typ)
{
        Shape = new TShape(Form);
</code></pre>
</blockquote>
<p>das tut nicht das, was du vermutest. Shape ist eine lokale variable innerhalb der funktion initial(), das new hat außerhalb der funktion keine auswirkung, außer einem memleak.</p>
<p>du willst vielleicht das:</p>
<pre><code class="language-cpp">void Versuch::initial(TShape *&amp;Shape,[...])
</code></pre>
<p>also eine referenz auf den shape-pointer übergeben.</p>
</blockquote>
<p>Vielen Dank für deine Antwort, habs gerade ausprobiert und funktioniert spitze (endlich!), aber nur noch so, schauen ob ich alles kapiert hab:<br />
Ich übergeben hier initial([...]) nur einen Zeiger auf ein Shape, dieser wird dann dynamisch erzeugt (in initial) und wenn ich die visibility auf true setze auch angezeigt. Nach Verlassen von initial([...]) entsteht nur ein Memoryleak, jedoch bleiben die Shapes immer noch angezeigt und deshalb waren auch im Debugger die Shapes 0<br />
Jetzt nur noch die etwas blöde Frage:<br />
<strong>Woran habt ihr im Debugger erkannt, dass das Shape nicht (richtig) erstellt wurde)</strong></p>
<p>Aber jedenfalls danke für Eure rasche und sehr gute Mithilfe!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
mfg. Helli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432608</guid><dc:creator><![CDATA[o*amp*oler]]></dc:creator><pubDate>Mon, 07 Jan 2008 18:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Mon, 07 Jan 2008 18:39:40 GMT]]></title><description><![CDATA[<p>Wußte ich es doch: die fehlende Referenz -)</p>
<p>Im Debugger hättest du es gesehen, wenn du dir einen Breakpoint auf den Aufruf von 'initial' gesetzt hättest und nach Ausführen der Funktion (Step: F8) den Inhalt von 'Shapebewertung[i]' angesehen hättest, der hat sich nämlich bei deinem vorherigen Code nicht verändert.</p>
<p>Besser wäre aber folgende Funktion:</p>
<pre><code class="language-cpp">TShape* TMyForm::CreateShape(TForm *pForm, ...)
{
  TShape *pShape = new TShape(this);
  pShape-&gt;Parent = pForm;
  // ...

  return pShape;
}

// Aufruf

Shapebewertung[i] = CreateShape(this, ...);
</code></pre>
<p>Außerdem solltest du deinen Code dahingehend umschreiben, daß du die Funktionen nicht mehrfach mit verschiedenen Parametern aufrufst, sondern zuerst die Parameter bestimmst und dann die Funktion genau einmal aufrufst (ist übersichtlicher und eleganter):</p>
<pre><code class="language-cpp">for(int i=0; i&lt;anzahl; i++)
{
  bool bVisible = !i; //Nur dann sichtbar, wenn es der erste Versuch ist (true)

  versuch[i] = new Versuch(Form1, xstart, ystart+(i*50), bVisible, i);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1432623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432623</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 07 Jan 2008 18:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei der Sichtbarkeit von Shapes on Mon, 07 Jan 2008 20:56:21 GMT]]></title><description><![CDATA[<p>Danke für die rasche Lösung!</p>
<blockquote>
<p>Außerdem solltest du deinen Code dahingehend umschreiben, daß du die Funktionen nicht mehrfach mit verschiedenen Parametern aufrufst, sondern zuerst die Parameter bestimmst und dann die Funktion genau einmal aufrufst (ist übersichtlicher und eleganter)</p>
</blockquote>
<p>Schon erledigt und danke nochmal für die Erklärung mit dem Debuggen, werde fleißig weiterschreiben an meinem Spiel und wenn ich mal wieder ein Problem habe, melde ich mich wieder (-;</p>
<p>Dannke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432702</guid><dc:creator><![CDATA[o*amp*oler]]></dc:creator><pubDate>Mon, 07 Jan 2008 20:56:21 GMT</pubDate></item></channel></rss>