<?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[Slider-artige Darstellung eines Vektors]]></title><description><![CDATA[<p>Hallo.<br />
Zur Zeit versuche ich, einen Vektor grafisch darzustellen, der jeweils eine <code>Page</code> enthält. Der Vektor enthält alle <code>Page</code> es. Eine <code>Page</code> ist immer aktiv (wird dargestellt). Jede <code>Page</code> hat einen TabButton, die TabButtons werden in einer Leiste dargestellt. Das ganze ähnelt einem TabControl wie man es aus Windows kennt.</p>
<p>Ich möchte nun, dass der jeweils aktive Tab den TabButton in die Mitte der Leiste zeichnet. Direkt daneben soll jeweils der &quot;Nachbar&quot; der aktuellen Seite verblasst dargestellt werden. Im Prinzip ist das ja auch ziemlich einfach, nur ergeben sich mir folgende Probleme:</p>
<p>1. Was mache ich, wenn die Nachbarn unter 0 bzw. über die Größe des Vektors hinausschießen? Genau, ich fange dann jeweils am anderen Ende wieder an. Dennoch kann der Nachbar da erneut rausschießen.<br />
2. Wie mache ich das ganze auch nutzbar, wenn es nur 1 oder 2 Tabseiten gibt?</p>
<p>Hier ist mein aktueller Ansatz. Er funktioniert zwar, jedoch gefällt mir die Lösung nicht besonders, und er zeigt Beispielsweise wie folgt an (wenn nur 2 Tabseiten existieren):</p>
<pre><code class="language-cpp">TabA TabA TabA TabB(aktiv) TabA TabB TabB
</code></pre>
<p>Es sollte aber so aussehen:</p>
<pre><code class="language-cpp">TabA TabA TabA TabB(aktiv) TabA TabA TabA
</code></pre>
<p>Das heißt, der gerade aktive Tab soll nicht aufgelistet werden (als Nachbar).<br />
Wenn beispielsweise genug Tabs vorhanden sind, um die Liste zu füllen, sollte es so aussehen:</p>
<pre><code class="language-cpp">TabC TabD TabE TabF(aktiv) TabG TabH TabI
</code></pre>
<p>Hier ist dann aber auch mein Code:</p>
<pre><code class="language-cpp">int iSize = this-&gt;m_vecTabs.size();

// 4 = es sollen jeweils 3 Nachbarn (links und rechts) dargestellt werden
for (int i = 1; i &lt; 4; i++)
{
	// this-&gt;m_iTab = aktiver TabIndex
	int iPrev = this-&gt;m_iTab - i;

	if (iPrev &lt; 0)
	{
		iPrev = iSize - i;

		if (iPrev &lt; 0)
		{
			iPrev = 0;
		}
	}

	this-&gt;m_vecTabs[iPrev]-&gt;drawTab(iX + 335 - i * 100, iY, i);

	int iNext = this-&gt;m_iTab + i;

	if (iNext &gt; iSize - 1)
	{
		iNext = -1 + i;

		if (iNext &gt; iSize - 1)
		{
			iNext = iSize - 1;
		}
	}

	this-&gt;m_vecTabs[iNext]-&gt;drawTab(iX + 335 + i * 100, iY, i);
}

// aktiven Tab zeichnen
this-&gt;m_pTab-&gt;drawTab(iX + 335, iY, 0);
</code></pre>
<p>Ich hoffe, dass ist einigermaßen verständlich, was ich bezwecken will. Es geht hier also eigentlich hauptsächlich um das Problem, wie ich das mit dem kleiner-als-0 und größer-als-Vektorgröße hinbekomme.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265999/slider-artige-darstellung-eines-vektors</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 15:44:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265999.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 May 2010 12:50:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Slider-artige Darstellung eines Vektors on Sun, 02 May 2010 12:51:54 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Zur Zeit versuche ich, einen Vektor grafisch darzustellen, der jeweils eine <code>Page</code> enthält. Der Vektor enthält alle <code>Page</code> es. Eine <code>Page</code> ist immer aktiv (wird dargestellt). Jede <code>Page</code> hat einen TabButton, die TabButtons werden in einer Leiste dargestellt. Das ganze ähnelt einem TabControl wie man es aus Windows kennt.</p>
<p>Ich möchte nun, dass der jeweils aktive Tab den TabButton in die Mitte der Leiste zeichnet. Direkt daneben soll jeweils der &quot;Nachbar&quot; der aktuellen Seite verblasst dargestellt werden. Im Prinzip ist das ja auch ziemlich einfach, nur ergeben sich mir folgende Probleme:</p>
<p>1. Was mache ich, wenn die Nachbarn unter 0 bzw. über die Größe des Vektors hinausschießen? Genau, ich fange dann jeweils am anderen Ende wieder an. Dennoch kann der Nachbar da erneut rausschießen.<br />
2. Wie mache ich das ganze auch nutzbar, wenn es nur 1 oder 2 Tabseiten gibt?</p>
<p>Hier ist mein aktueller Ansatz. Er funktioniert zwar, jedoch gefällt mir die Lösung nicht besonders, und er zeigt Beispielsweise wie folgt an (wenn nur 2 Tabseiten existieren):</p>
<pre><code class="language-cpp">TabA TabA TabA TabB(aktiv) TabA TabB TabB
</code></pre>
<p>Es sollte aber so aussehen:</p>
<pre><code class="language-cpp">TabA TabA TabA TabB(aktiv) TabA TabA TabA
</code></pre>
<p>Das heißt, der gerade aktive Tab soll nicht aufgelistet werden (als Nachbar).<br />
Wenn beispielsweise genug Tabs vorhanden sind, um die Liste zu füllen, sollte es so aussehen:</p>
<pre><code class="language-cpp">TabC TabD TabE TabF(aktiv) TabG TabH TabI
</code></pre>
<p>Hier ist dann aber auch mein Code:</p>
<pre><code class="language-cpp">int iSize = this-&gt;m_vecTabs.size();

// 4 = es sollen jeweils 3 Nachbarn (links und rechts) dargestellt werden
for (int i = 1; i &lt; 4; i++)
{
	// this-&gt;m_iTab = aktiver TabIndex
	int iPrev = this-&gt;m_iTab - i;

	if (iPrev &lt; 0)
	{
		iPrev = iSize - i;

		if (iPrev &lt; 0)
		{
			iPrev = 0;
		}
	}

	this-&gt;m_vecTabs[iPrev]-&gt;drawTab(iX + 335 - i * 100, iY, i);

	int iNext = this-&gt;m_iTab + i;

	if (iNext &gt; iSize - 1)
	{
		iNext = -1 + i;

		if (iNext &gt; iSize - 1)
		{
			iNext = iSize - 1;
		}
	}

	this-&gt;m_vecTabs[iNext]-&gt;drawTab(iX + 335 + i * 100, iY, i);
}

// aktiven Tab zeichnen
this-&gt;m_pTab-&gt;drawTab(iX + 335, iY, 0);
</code></pre>
<p>Ich hoffe, dass ist einigermaßen verständlich, was ich bezwecken will. Es geht hier also eigentlich hauptsächlich um das Problem, wie ich das mit dem kleiner-als-0 und größer-als-Vektorgröße hinbekomme.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891319</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 02 May 2010 12:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Slider-artige Darstellung eines Vektors on Mon, 03 May 2010 10:48:15 GMT]]></title><description><![CDATA[<p>Was ist mit<br />
2 Tabs<br />
&lt;0&gt; &lt;0&gt; TabA(active) &lt;TabB&gt; &lt;0&gt;<br />
&quot;verdunkle&quot; den &lt;0&gt; gegen background.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891670</guid><dc:creator><![CDATA[Sigie]]></dc:creator><pubDate>Mon, 03 May 2010 10:48:15 GMT</pubDate></item><item><title><![CDATA[Reply to Slider-artige Darstellung eines Vektors on Mon, 03 May 2010 11:21:29 GMT]]></title><description><![CDATA[<p>Bei 2 Tabs sollte es so aussehen:</p>
<pre><code class="language-cpp">TabB TabB TabB TabA(aktiv) TabB TabB TabB
</code></pre>
<p>Man könnte ja für jede Anzahl ne eigene Funktion schreiben, aber das ist dann eher hingemurkst anstatt dass man es richtig macht.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891680</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Mon, 03 May 2010 11:21:29 GMT</pubDate></item></channel></rss>