<?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[Event aus externer Klasse zuweisen (__closure Problem)]]></title><description><![CDATA[<p>Hi!</p>
<p>Folgendes Problem:<br />
Ich habe eine neue Klasse definiert, der ich Im Konstruktor nun eine PaintBox übergebe. Dieser PaintBox wollte ich nun gerne eine neue onPaint Funktion zuweisen. Jedoch bekomme ich den Compilerfehler &quot;Konvertierung von 'void (*)(TObject *)' nach 'void (_fastcall * (_closure )(TObject *))(TObject *)' nicht möglich&quot;. Ich weiß einfach nicht, wie ich das __closure da rein kriege, damit das funktioniert.</p>
<pre><code class="language-cpp">// editfld.cpp
//---------------------------------------------------------------------------
// Constructor
//---------------------------------------------------------------------------
TEditField::TEditField( TPaintBox *pbParent )
{
  m_pbParent            = pbParent;
  m_pCanvas             = pbParent-&gt;Canvas;

  // Update pbParent
  pbParent-&gt;Tag         = reinterpret_cast&lt;int&gt;(this);
  pbParent-&gt;OnPaint     = pbEditBoxPaintStatic;
}

//---------------------------------------------------------------------------
// Deconstructor
//---------------------------------------------------------------------------
TEditField::~TEditField( )
{
  m_pbParent-&gt;Tag       = 0;
  m_pbParent            = NULL;
}

//---------------------------------------------------------------------------
// Draw the edit box &lt;static&gt;
//---------------------------------------------------------------------------
void TEditField::pbEditBoxPaintStatic( TObject *Sender )
{
  TPaintBox *pbParent = reinterpret_cast&lt;TPaintBox*&gt; (Sender  );
  TEditField *edEdit  = reinterpret_cast&lt;TEditField*&gt;(pbParent-&gt;Tag);
  edEdit-&gt;pbEditBoxPaint( );
}

//---------------------------------------------------------------------------
// Draw the edit box
//---------------------------------------------------------------------------
void TEditField::pbEditBoxPaint( void )
{
  m_pCanvas-&gt;Rectangle( 0, 0, 100, 100 );
}

//---------------------------------------------------------------------------
// editfld.h

#ifndef __EDIT_FIELD_HEADER_FILE__DEF__
#define __EDIT_FIELD_HEADER_FILE__DEF__

//---------------------------------------------------------------------------
#include &lt;vcl.h&gt;

//---------------------------------------------------------------------------
// Class
//---------------------------------------------------------------------------
class TEditField
{
public:
  TEditField ( TPaintBox *pbParent );
  ~TEditField( );

  // Static actions
  static void pbEditBoxPaintStatic(TObject *Sender);

private:
  TPaintBox* m_pbParent;
  TCanvas*   m_pCanvas;

  // Actions
  void pbEditBoxPaint( void );
};

//---------------------------------------------------------------------------

#endif
</code></pre>
<p>[edit]Das __fastcall alleine rein zu kriegen, ist eher das geringste Problem. Aber das __closure noch IST ein Problem für mich xD[/edit]</p>
<p>Wenn ich jetzt wüßte, wie das __closure da rein kommt, währe ich glücklich *g*</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134071/event-aus-externer-klasse-zuweisen-__closure-problem</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 22:29:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134071.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jan 2006 14:26:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 14:45:54 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Folgendes Problem:<br />
Ich habe eine neue Klasse definiert, der ich Im Konstruktor nun eine PaintBox übergebe. Dieser PaintBox wollte ich nun gerne eine neue onPaint Funktion zuweisen. Jedoch bekomme ich den Compilerfehler &quot;Konvertierung von 'void (*)(TObject *)' nach 'void (_fastcall * (_closure )(TObject *))(TObject *)' nicht möglich&quot;. Ich weiß einfach nicht, wie ich das __closure da rein kriege, damit das funktioniert.</p>
<pre><code class="language-cpp">// editfld.cpp
//---------------------------------------------------------------------------
// Constructor
//---------------------------------------------------------------------------
TEditField::TEditField( TPaintBox *pbParent )
{
  m_pbParent            = pbParent;
  m_pCanvas             = pbParent-&gt;Canvas;

  // Update pbParent
  pbParent-&gt;Tag         = reinterpret_cast&lt;int&gt;(this);
  pbParent-&gt;OnPaint     = pbEditBoxPaintStatic;
}

//---------------------------------------------------------------------------
// Deconstructor
//---------------------------------------------------------------------------
TEditField::~TEditField( )
{
  m_pbParent-&gt;Tag       = 0;
  m_pbParent            = NULL;
}

//---------------------------------------------------------------------------
// Draw the edit box &lt;static&gt;
//---------------------------------------------------------------------------
void TEditField::pbEditBoxPaintStatic( TObject *Sender )
{
  TPaintBox *pbParent = reinterpret_cast&lt;TPaintBox*&gt; (Sender  );
  TEditField *edEdit  = reinterpret_cast&lt;TEditField*&gt;(pbParent-&gt;Tag);
  edEdit-&gt;pbEditBoxPaint( );
}

//---------------------------------------------------------------------------
// Draw the edit box
//---------------------------------------------------------------------------
void TEditField::pbEditBoxPaint( void )
{
  m_pCanvas-&gt;Rectangle( 0, 0, 100, 100 );
}

//---------------------------------------------------------------------------
// editfld.h

#ifndef __EDIT_FIELD_HEADER_FILE__DEF__
#define __EDIT_FIELD_HEADER_FILE__DEF__

//---------------------------------------------------------------------------
#include &lt;vcl.h&gt;

//---------------------------------------------------------------------------
// Class
//---------------------------------------------------------------------------
class TEditField
{
public:
  TEditField ( TPaintBox *pbParent );
  ~TEditField( );

  // Static actions
  static void pbEditBoxPaintStatic(TObject *Sender);

private:
  TPaintBox* m_pbParent;
  TCanvas*   m_pCanvas;

  // Actions
  void pbEditBoxPaint( void );
};

//---------------------------------------------------------------------------

#endif
</code></pre>
<p>[edit]Das __fastcall alleine rein zu kriegen, ist eher das geringste Problem. Aber das __closure noch IST ein Problem für mich xD[/edit]</p>
<p>Wenn ich jetzt wüßte, wie das __closure da rein kommt, währe ich glücklich *g*</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/973981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/973981</guid><dc:creator><![CDATA[ProfEich]]></dc:creator><pubDate>Mon, 23 Jan 2006 14:45:54 GMT</pubDate></item><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 15:06:35 GMT]]></title><description><![CDATA[<p>Schon <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39204.html" rel="nofollow">geFAQt</a>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/974017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/974017</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Mon, 23 Jan 2006 15:06:35 GMT</pubDate></item><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 15:19:30 GMT]]></title><description><![CDATA[<p>Eigentlich hatte ich nach __closure gesucht, aber das hat er mir nicht ausgegeben.</p>
<p>Aber so wirklich scheint das nicht das zu sein was ich suche. Mit typedef den Typen definieren ist nochmal was anderes, aber wenn ich nun in der Header das so mache:</p>
<p>static void __fastcall (__closure *pbEditBoxPaintStatic)(TObject *Sender);</p>
<p>und in der CPP dann:</p>
<p>void __fastcall TEditField::pbEditBoxPaintStatic( TObject *Sender ) { }</p>
<p>kriege ich den Fehler:<br />
E2316 '_fastcall TEditField::pbEditBoxPaintStatic(TObjecT *)' ist kein Element von 'TEditField'</p>
<p>Dann weiß ich nicht, wie ich da das __closure rein kriege.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/974035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/974035</guid><dc:creator><![CDATA[ProfEich]]></dc:creator><pubDate>Mon, 23 Jan 2006 15:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 17:44:42 GMT]]></title><description><![CDATA[<p>Warum machst du einen Zeiger auf eine Funktion, wenn du dann doch nen Funktionsrumpf erstellst? Macht keinen Sinn. Du musst schon in einer anderen Klasse eine void __fastcall (TObject *Sender) - Funktion erstellen und die dann zuweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/974188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/974188</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Mon, 23 Jan 2006 17:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 18:25:14 GMT]]></title><description><![CDATA[<p>Also: Ich bin mal wieder zu blöd, mein Problem richtig zu formulieren :&lt;</p>
<p>Sogesehen will ich einen Ersatz für eine Komponente schreiben. Ich will keine &quot;ECHTE&quot; Komponente schreiben, sondern sie einfach direkt in den Quellcode schreiben.</p>
<p>Dazu habe ich auf dem Formular eine PaintBox gesetzt (pbEditBox).<br />
Diese PaintBox hat bei dem Ereignis 'OnPaint' nun noch gar nichts stehen.</p>
<p>Nun wird aufgerufen:<br />
TEditField *edBox = new TEditField( pbEditBox );</p>
<p>Dies soll dann letzendlich aus der PaintBox meine eigene Komponente machen:</p>
<p>Als Parameter wird an den Konstruktor die PaintBox übergeben. Der Konstruktor soll nun der PaintBox eine OnPaint-Funktion zuweisen, die IN der TEditField-Klasse definiert ist.</p>
<p>Also etwa nach dem Motto:<br />
pbEditBox-&gt;OnPaint = TEditField::pbEditBoxPaintStatic;</p>
<p>Und da tritt mein Problem nun auf! Genau in dieser Zeile habe ich dieses Konvertierungsproblem. Wie muss ich die Funktion 'pbEditBoxPaintStatic' nun in der Klasse deklarieren, damit ich diese Zuweisung so machen kann?</p>
<p>Ich hoffe, mein Problem ist nun etwas verständlicher erklärt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Das Interessante ist ja, wenn meine neu definierte Funktion IN DER TForm1 Klasse währe, funktioniert das ganze problemlos. Aber sobald die neu definierte Funktion außerhalb der TForm1 Klasse ist, geht gar nichts mehr. Dann kommt der oben benannte Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/974214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/974214</guid><dc:creator><![CDATA[ProfEich]]></dc:creator><pubDate>Mon, 23 Jan 2006 18:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 19:03:08 GMT]]></title><description><![CDATA[<p>Jo, ich kapier wirklich dein Problem nicht. Muss aber nicht an dir liegen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Hmm... dann ist das ja eigentlich andersrum. Dann braucht die <strong>Paintbox</strong> das __closure in der Deklaration. Hat es wahrscheinlich auch. Problem gelöst, dein erster Versuch funktioniert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Was ist wenn du einfach das static wegschmeißt?</p>
<p>Ich versuch mal, deinen Code bei mir hin zu bekommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/974253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/974253</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Mon, 23 Jan 2006 19:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Event aus externer Klasse zuweisen (__closure Problem) on Mon, 23 Jan 2006 19:05:49 GMT]]></title><description><![CDATA[<p>Habs ausprobiert.</p>
<p>static raus, fastcall rein, glücklich sein. <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/974255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/974255</guid><dc:creator><![CDATA[HEZ]]></dc:creator><pubDate>Mon, 23 Jan 2006 19:05:49 GMT</pubDate></item></channel></rss>