<?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[TRichEdit und ScrollBars crashen]]></title><description><![CDATA[<p>Seit einiger Zeit plagt mich o.g. Problem.<br />
Ich habe eine App mit 3 RichEdits und diese sollen *was sonst* Text wiedergeben.<br />
Soweit so gut. Sobald aber die Scrollbars irgendwie angepackt werden crasht die App nach unbestimmter Zeit. Ich bin auf der Suche nach Abhilfe über folgenden Link gestolpert.</p>
<p><a href="http://home.att.net/~robertdunn/Papers/TRichEditHandles.html" rel="nofollow">http://home.att.net/~robertdunn/Papers/TRichEditHandles.html</a></p>
<p>Ich denke Dunns Ausführungen unter <strong>#problem 2</strong> meinem Problem entsprechen.</p>
<p>Nun habe ich eine TRichEdit-Derivat erzeugt und die besagte <em>RecreateWnd()</em> einfach mal überladen und leer gelassen: Problem besteht aber immer noch.</p>
<p>Hier mal die m.E. relevanten Ausschnitte</p>
<pre><code class="language-cpp">TXController* XController

...

DWORD WINAPI DisplayThread(LPVOID lpThreadParameter)
{

        BaseController* bc= BaseController::getInstance();
        VideoController* vc= VideoController::getInstance();
        AudioController* ac= AudioController::getInstance();
        stringstream s;

        while(XController-&gt;isRunning)
        {

                 // BaseController
                if(XController-&gt;cbBCLogging-&gt;Checked)
                {
                        // updating limit counter
                        long limit=XController-&gt;reditBC-&gt;Text.Length();
                        s.seekp(0);
                        s&lt;&lt; limit &lt;&lt; &quot;/ &quot; &lt;&lt; EDIT_LIMIT &lt;&lt; ends;
                        XController-&gt;eBCLimit-&gt;Text= s.str().c_str();
                        // Autoclear if bufferlimit is reached
                        if (limit&gt;=EDIT_LIMIT)
                                bc-&gt;clearOutput();

                        XController-&gt;WriteWindow(bc-&gt;getOutput(),
                                                XController-&gt;reditBC,
                                                XController-&gt;_bcMutex);

                }
                // VideoController
                if(XController-&gt;cbVCLogging-&gt;Checked)
                {
                     ... // analog
                 }
                // AudioController
                if(XController-&gt;cbACLogging-&gt;Checked)
                {
                    ... // analog
                }

                Sleep(25); // rest a while, baby
        }
        ExitThread(0);
        return 0; // never reached: avoid warning
}

...

void __fastcall TXController::WriteWindow(string text, const TRichEdit* win, HANDLE mutex)
{
        if (text.size()&gt;0)
        {

                WaitForSingleObject(mutex, INFINITE);
                win-&gt;Text = text.c_str();
                // HERE EVERYTHING IS FUCKED UP
                // EVEN IF I USE SCROLLBARS MANUALLY
                win-&gt;SelStart = win-&gt;Perform(EM_LINEINDEX, win-&gt;Lines-&gt;Count, 0);
                win-&gt;Perform(EM_SCROLLCARET, 0, 0);
                ReleaseMutex(mutex);

        }
}
</code></pre>
<p>Ich gehe auch davon aus, dass bei mir irgendwo der Wurm drin ist...</p>
<p>Die Fehlermeldung(Debugger): &quot;Systemfehler: Code 1400. Ungültiges Fensterhandle&quot;<br />
Das bestätigt letztlich Dunns Schilderungen.</p>
<p>Wie kann ich dagegen angehen???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/112891/trichedit-und-scrollbars-crashen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 09:35:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/112891.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Jun 2005 11:03:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TRichEdit und ScrollBars crashen on Fri, 17 Jun 2005 11:03:30 GMT]]></title><description><![CDATA[<p>Seit einiger Zeit plagt mich o.g. Problem.<br />
Ich habe eine App mit 3 RichEdits und diese sollen *was sonst* Text wiedergeben.<br />
Soweit so gut. Sobald aber die Scrollbars irgendwie angepackt werden crasht die App nach unbestimmter Zeit. Ich bin auf der Suche nach Abhilfe über folgenden Link gestolpert.</p>
<p><a href="http://home.att.net/~robertdunn/Papers/TRichEditHandles.html" rel="nofollow">http://home.att.net/~robertdunn/Papers/TRichEditHandles.html</a></p>
<p>Ich denke Dunns Ausführungen unter <strong>#problem 2</strong> meinem Problem entsprechen.</p>
<p>Nun habe ich eine TRichEdit-Derivat erzeugt und die besagte <em>RecreateWnd()</em> einfach mal überladen und leer gelassen: Problem besteht aber immer noch.</p>
<p>Hier mal die m.E. relevanten Ausschnitte</p>
<pre><code class="language-cpp">TXController* XController

...

DWORD WINAPI DisplayThread(LPVOID lpThreadParameter)
{

        BaseController* bc= BaseController::getInstance();
        VideoController* vc= VideoController::getInstance();
        AudioController* ac= AudioController::getInstance();
        stringstream s;

        while(XController-&gt;isRunning)
        {

                 // BaseController
                if(XController-&gt;cbBCLogging-&gt;Checked)
                {
                        // updating limit counter
                        long limit=XController-&gt;reditBC-&gt;Text.Length();
                        s.seekp(0);
                        s&lt;&lt; limit &lt;&lt; &quot;/ &quot; &lt;&lt; EDIT_LIMIT &lt;&lt; ends;
                        XController-&gt;eBCLimit-&gt;Text= s.str().c_str();
                        // Autoclear if bufferlimit is reached
                        if (limit&gt;=EDIT_LIMIT)
                                bc-&gt;clearOutput();

                        XController-&gt;WriteWindow(bc-&gt;getOutput(),
                                                XController-&gt;reditBC,
                                                XController-&gt;_bcMutex);

                }
                // VideoController
                if(XController-&gt;cbVCLogging-&gt;Checked)
                {
                     ... // analog
                 }
                // AudioController
                if(XController-&gt;cbACLogging-&gt;Checked)
                {
                    ... // analog
                }

                Sleep(25); // rest a while, baby
        }
        ExitThread(0);
        return 0; // never reached: avoid warning
}

...

void __fastcall TXController::WriteWindow(string text, const TRichEdit* win, HANDLE mutex)
{
        if (text.size()&gt;0)
        {

                WaitForSingleObject(mutex, INFINITE);
                win-&gt;Text = text.c_str();
                // HERE EVERYTHING IS FUCKED UP
                // EVEN IF I USE SCROLLBARS MANUALLY
                win-&gt;SelStart = win-&gt;Perform(EM_LINEINDEX, win-&gt;Lines-&gt;Count, 0);
                win-&gt;Perform(EM_SCROLLCARET, 0, 0);
                ReleaseMutex(mutex);

        }
}
</code></pre>
<p>Ich gehe auch davon aus, dass bei mir irgendwo der Wurm drin ist...</p>
<p>Die Fehlermeldung(Debugger): &quot;Systemfehler: Code 1400. Ungültiges Fensterhandle&quot;<br />
Das bestätigt letztlich Dunns Schilderungen.</p>
<p>Wie kann ich dagegen angehen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/811070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/811070</guid><dc:creator><![CDATA[PosSeX]]></dc:creator><pubDate>Fri, 17 Jun 2005 11:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to TRichEdit und ScrollBars crashen on Thu, 07 Jul 2005 10:38:14 GMT]]></title><description><![CDATA[<p>Nachtrag:<br />
o.g. Problem habe ich kurze Zeit später behoben, indem ich ---ACHTUNG:<br />
TRichEdit einfach gegen TMemo ausgetauscht habe.<br />
Einziger Zusatz war, dass ich die getOutput()-Rückgabe an die &quot;Zeilenumbruch-Macke&quot; für's TMemo angepasst habe ('\n' zu &quot;\r\n&quot;).</p>
<p>Was soll ich denn nun davon halten? Habe ich mal wieder irgendwo eine kleine Spitzfindigkeit nicht berücksichtigt, sei es im eigenen Code, irgendeiner VCL-eigenen Geschichte, oder gar etwas in der WINAPI* ??? Ich weiß es nicht.<br />
Es funktioniert jetzt jedenfalls einwandfrei.</p>
<p>*Ich habe es sogar gewagt die VCL zu umgehen und in einem MyRichEdit-Derivat die WINAPI direkt zu benutzen: Gleiches Resultat</p>
<p>Hier noch mal der geänderte Code:</p>
<pre><code class="language-cpp">btw: 

void __fastcall TXController::WriteWindow(string text, const TMemo* win :warning: , HANDLE mutex)
{
        if (text.size()&gt;0)
        {
                replaceLinefeed(text); :warning: 
                WaitForSingleObject(mutex, INFINITE);
                // folgende Änderunge sind eher irrelevant
                win-&gt;Text=win-&gt;Text + text.c_str();
                win-&gt;Perform(EM_LINESCROLL,0, win-&gt;Lines-&gt;Count-1 );
                ReleaseMutex(mutex);
        }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/825794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/825794</guid><dc:creator><![CDATA[PosSeX]]></dc:creator><pubDate>Thu, 07 Jul 2005 10:38:14 GMT</pubDate></item></channel></rss>