<?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[kommunizierende Komponenten]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich möchte Komponenten schreiben, die miteinander kommunizieren. Zu diesem Zweck habe ich versucht Komponenten abzuleiten, die eine Property haben, in der man die andere Komponente angeben kann, mit der eine Komponente kommunizieren sollen.</p>
<p>Als Beispiel nehme ich hier 'mal ein StringGrid und ein Edit. (Es geht mir aber um die allgemeine Lösung des Problems, da das an mehreren Stellen sehr nützlich wäre.)<br />
Das Edit soll immer den Wert einer bestimmten Spalte in der gerade selektierten Zeile des Grids anzeigen. Das Edit muss also immer Informiert werden, wenn sich die Ausgewählte Zeile des Grids ändert. Umgekehrt sollen änderungen des Textes des Edits sofort in das entsprechende Grid-Feld eingetragen werden, also muss das Grid auch vom Edit aus erreichbar sein.<br />
Ich habe für dieses Beispiel folgenden Code erzeugt:</p>
<p>Header des Edits:</p>
<pre><code>#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
//---------------------------------------------------------------------------

class TEigenGrid; // Wird erst in der Implementierung includiert.
class PACKAGE TEigenEdit : public TEdit
{
private:
  TEigenGrid* FGrid;
protected:
public:
  __fastcall TEigenEdit(TComponent* Owner);
__published:
  __property TEigenGrid* Grid = {read = FGrid, write = FGrid};
};
//---------------------------------------------------------------------------
</code></pre>
<p>Header des Grids:</p>
<pre><code>#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;Grids.hpp&gt;
//---------------------------------------------------------------------------
class TEigenEdit; // Wird erst in der Implementierung includiert.
class PACKAGE TEigenGrid : public TStringGrid
{
private:
  TEigenEdit* FEdit;
protected:
public:
  __fastcall TEigenGrid(TComponent* Owner);
__published:
  __property TEigenEdit* Edit = {read = FEdit, write = FEdit};

};
//---------------------------------------------------------------------------
</code></pre>
<p>Beim Versuch das zu kompilieren meldet der Compiler: &quot;E2109 Kein zulässiger Typ&quot; und der Debugger steht auf der Zeile, in der die Property definiert wird.</p>
<p>Was mache ich falsch?<br />
Gibt es grundsätzlich keine Möglichkeit Komponenten direkt miteinander kommunizieren zu lassen?<br />
Bin ich gezwungen per Ereignis über das Form zu gehen und den Code für die Kommunikation zwischen den Komponenten bei jedem Form, das derartige Komponenten enthält per Copy &amp; Paste zu reproduzieren?</p>
<p>Gruß<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/101652/kommunizierende-komponenten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:26:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/101652.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Feb 2005 07:48:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 07:48:59 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich möchte Komponenten schreiben, die miteinander kommunizieren. Zu diesem Zweck habe ich versucht Komponenten abzuleiten, die eine Property haben, in der man die andere Komponente angeben kann, mit der eine Komponente kommunizieren sollen.</p>
<p>Als Beispiel nehme ich hier 'mal ein StringGrid und ein Edit. (Es geht mir aber um die allgemeine Lösung des Problems, da das an mehreren Stellen sehr nützlich wäre.)<br />
Das Edit soll immer den Wert einer bestimmten Spalte in der gerade selektierten Zeile des Grids anzeigen. Das Edit muss also immer Informiert werden, wenn sich die Ausgewählte Zeile des Grids ändert. Umgekehrt sollen änderungen des Textes des Edits sofort in das entsprechende Grid-Feld eingetragen werden, also muss das Grid auch vom Edit aus erreichbar sein.<br />
Ich habe für dieses Beispiel folgenden Code erzeugt:</p>
<p>Header des Edits:</p>
<pre><code>#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
//---------------------------------------------------------------------------

class TEigenGrid; // Wird erst in der Implementierung includiert.
class PACKAGE TEigenEdit : public TEdit
{
private:
  TEigenGrid* FGrid;
protected:
public:
  __fastcall TEigenEdit(TComponent* Owner);
__published:
  __property TEigenGrid* Grid = {read = FGrid, write = FGrid};
};
//---------------------------------------------------------------------------
</code></pre>
<p>Header des Grids:</p>
<pre><code>#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;Grids.hpp&gt;
//---------------------------------------------------------------------------
class TEigenEdit; // Wird erst in der Implementierung includiert.
class PACKAGE TEigenGrid : public TStringGrid
{
private:
  TEigenEdit* FEdit;
protected:
public:
  __fastcall TEigenGrid(TComponent* Owner);
__published:
  __property TEigenEdit* Edit = {read = FEdit, write = FEdit};

};
//---------------------------------------------------------------------------
</code></pre>
<p>Beim Versuch das zu kompilieren meldet der Compiler: &quot;E2109 Kein zulässiger Typ&quot; und der Debugger steht auf der Zeile, in der die Property definiert wird.</p>
<p>Was mache ich falsch?<br />
Gibt es grundsätzlich keine Möglichkeit Komponenten direkt miteinander kommunizieren zu lassen?<br />
Bin ich gezwungen per Ereignis über das Form zu gehen und den Code für die Kommunikation zwischen den Komponenten bei jedem Form, das derartige Komponenten enthält per Copy &amp; Paste zu reproduzieren?</p>
<p>Gruß<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726180</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Fri, 18 Feb 2005 07:48:59 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 09:04:35 GMT]]></title><description><![CDATA[<p>Ich hatte sowas ähnliches auch mal gemacht und dort funktioniert das im Prinzip auch so, wie Du das<br />
in Deinem Code machst. Der einzige Unterschied ist, dass meine beiden Klassen in einer Unit unter-<br />
gebracht sind. Vielleicht muss bei Komponenten die Deklaration der Klasse bekannt sein, so dass<br />
Forward-Deklarieren nicht funktioniert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Auf welcher Eigenschaft wird denn eigentlich der Fehler angezeigt? Oder auf beiden?</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726247</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Fri, 18 Feb 2005 09:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 09:16:51 GMT]]></title><description><![CDATA[<p>Der Fehler tritt prizipiell bei beiden Eigenschaften auf. Wo der Compiler meckert hängt von der Compile-Reihenfolge ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726255</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Fri, 18 Feb 2005 09:16:51 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 09:27:34 GMT]]></title><description><![CDATA[<p>Dann mach doch für beide Komponenten Interfaces, also abstrakte Klassen, die ausschließlich aus Eigenschaften<br />
und rein virtuellen Methoden bestehen. Dann hast Du zwei neue Header-Dateien, die Du jeweils per include hinzu-<br />
nehmen kannst, ohne dass Du Probleme mit zirkulären includes bekommst.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726261</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Fri, 18 Feb 2005 09:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 12:53:25 GMT]]></title><description><![CDATA[<p>Gute Idee. Das letzte Mal, als ich mich an Interfaces versucht habe, hat es allerdings nicht hingehauen.</p>
<p>Ich vermute man kann mit</p>
<pre><code>dynamic_cast&lt;Schnittstelle&gt;(Objekt)
</code></pre>
<p>ein Objekt in eine seiner Schnittstelle casten, oder?</p>
<p>(Zuletzt hatte ich es mit dem normalen</p>
<pre><code>(Schnitstelle)Objekt
</code></pre>
<p>versucht.)</p>
<p>Gruß<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726434</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Fri, 18 Feb 2005 12:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 14:25:21 GMT]]></title><description><![CDATA[<p>Gerade ist mir aufgefallen, dass ich das Casten in die Schnittstelle für diesen Zweck ja gar nicht brauche.<br />
Die Sache würde mich aber trotzdem interessieren. Ich fange mal einen neuen Thread an...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726530</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Fri, 18 Feb 2005 14:25:21 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Fri, 18 Feb 2005 20:56:58 GMT]]></title><description><![CDATA[<p>Mit Interface meinte ich so etwas:</p>
<pre><code class="language-cpp">class MeinInterface
{
public:
  virtual void tuDies() = 0;
  virtual int tuDas(bool WirklichTun, int SoOftTun) = 0;
  // Weitere rein virtuelle Methoden

  __property int Count = {read=getCount, write=setCount};
  // und weitere Eigenschaften
protected:
  virtual int getCount() = 0;
  virtual void setCount(int Value) = 0;
};
</code></pre>
<p>Der Header einer Implementierung könnte dann so aussehen:</p>
<pre><code class="language-cpp">#include &quot;MeinInterface.h&quot;
#include &quot;MeinInterface2.h&quot;

class MeineImplementierung: public MeinInterface
{
public:
  MeineImplementierung();
  ~MeineImplementierung();

  virtual void tuDies();
  virtual int tuDas(bool WirklichTun, int SoOftTun);

  __property MeinInterface2* AnderesInterface = {read=FAnderesInterface, write=FAnderesInterface};
protected:
  virtual int getCount();
  virtual void setCount(int Value);
private:
  MeinInterface2* FAnderesInterface;
};
</code></pre>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/726800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/726800</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Fri, 18 Feb 2005 20:56:58 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Sun, 20 Feb 2005 10:05:05 GMT]]></title><description><![CDATA[<p>Eine sehr schöne Idee. Leider funktioniert es nicht...<br />
Mittlerweile habe ich es so weit eingekreist, dass der Compiler schon meckert (E2109 Kein zulässiger Typ), wenn man überhaupt versucht einen Pointer auf ein Interface als Typ für eine Property zu verwenden. (Also ohne irgendwelche über-Kreuz-Geschichten)</p>
<p>Hat noch jemand eine Idee?</p>
<p>Gruß<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/727761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/727761</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Sun, 20 Feb 2005 10:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Sun, 20 Feb 2005 14:05:14 GMT]]></title><description><![CDATA[<p>MarcE schrieb:</p>
<blockquote>
<p>Leider funktioniert es nicht...</p>
</blockquote>
<p>Solche Aussagen liebe ich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>MarcE schrieb:</p>
<blockquote>
<p>Mittlerweile habe ich es so weit eingekreist, dass der Compiler schon meckert, wenn man überhaupt versucht einen Pointer auf ein Interface als Typ für eine Property zu verwenden.</p>
</blockquote>
<p>Was genau hast Du denn gemacht?</p>
<p>Unter Umständen müssen Klassen, die Du über eine Eigenschaft verwenden willst von TObject erben?</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/727976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/727976</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sun, 20 Feb 2005 14:05:14 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Tue, 22 Feb 2005 18:53:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Unter Umständen müssen Klassen, die Du über eine Eigenschaft verwenden willst von TObject erben?</p>
</blockquote>
<p>Tatsächlich, das war's! Ich find das könnt Borland an eine Stelle der Dokumentation schreiben, wo man es leicht findet...</p>
<p>Vielen Dank,<br />
Marc</p>
]]></description><link>https://www.c-plusplus.net/forum/post/729947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/729947</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Tue, 22 Feb 2005 18:53:17 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Tue, 22 Feb 2005 18:59:09 GMT]]></title><description><![CDATA[<p>MarcE schrieb:</p>
<blockquote>
<p>Ich find das könnt Borland an eine Stelle der Dokumentation schreiben, wo man es leicht findet...</p>
</blockquote>
<p>Wo steht das denn?</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/729957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/729957</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Tue, 22 Feb 2005 18:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Tue, 22 Feb 2005 19:09:01 GMT]]></title><description><![CDATA[<p>Nirgends, wo ich gesucht habe.</p>
<p>Im Übrigen zu früh gefreut: TObject ist nicht abstrakt. Die Property kompiliert so zwar, aber die resultierende Klasse ist keine Schnittstelle mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/729965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/729965</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Tue, 22 Feb 2005 19:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Tue, 22 Feb 2005 19:13:41 GMT]]></title><description><![CDATA[<p>Damit wären wir also wieder bei &quot;E2109 Kein zulässiger Typ&quot;, und zwar mit folgenden Code:</p>
<pre><code>__interface IZusatzfunktionalitaet
{
  public:
    virtual void __fastcall MachWas() = 0;
};
</code></pre>
<pre><code>#include &quot;IZusatzfunktionalitaet.h&quot;
//---------------------------------------------------------------------------
class PACKAGE TEditPlus : public TEdit
{
private:
  IZusatzfunktionalitaet* FZusatz;
protected:
public:
  __fastcall TEditPlus(TComponent* Owner);
__published:
  __property IZusatzfunktionalitaet* Zusatz = {read = FZusatz,
                                              write = FZusatz};
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/729971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/729971</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Tue, 22 Feb 2005 19:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Wed, 23 Feb 2005 22:03:11 GMT]]></title><description><![CDATA[<p>Nachdem ich jetzt noch mal ein bisschen rumprobiert habe, glaube ich, auf eine Lösung für das Problem<br />
gekommen zu sein. Im Prinzip funktioniert meine Lösung so ähnlich, wie ich es schon mal angedeutet<br />
hatte:<br />
- Zuerst habe ich mir zwei abstrakte Komponenten definiert - jeweils ein Abkömmling von TEdit und TStringGrid<br />
- Dann habe ich zwei konkrete Komponenten definiert, die von den ersten beiden erben und jeweils eine<br />
Eigenschaft der abstrakten Komponente besitzen.</p>
<p>Hier mal ein wenig Code:</p>
<pre><code class="language-cpp">//----------------------------------------
// MyAbstractComponents.h
//----------------------------------------

#ifndef MyAbstractComponentsH
#define MyAbstractComponentsH

#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;Grids.hpp&gt;
#include &lt;StdCtrls.hpp&gt;

class PACKAGE TMyAbstractEdit : public TEdit
{
private:
protected:
   __fastcall TMyAbstractEdit(TComponent* Owner);
public:
__published:
};

class PACKAGE TMyAbstractStringGrid : public TStringGrid
{
private:
protected:
   __fastcall TMyAbstractStringGrid(TComponent* Owner);
public:
__published:
};

#endif

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

#pragma hdrstop

#include &quot;MyAbstractComponents.h&quot;
#pragma package(smart_init)

__fastcall TMyAbstractEdit::TMyAbstractEdit(TComponent* Owner)
   : TEdit(Owner)
{
}

__fastcall TMyAbstractStringGrid::TMyAbstractStringGrid(TComponent* Owner)
   : TStringGrid(Owner)
{
}

//----------------------------------------
// MyEdit.h
//----------------------------------------

#ifndef MyEditH
#define MyEditH

#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
#include &lt;MyAbstractEdit.h&gt;

class PACKAGE TMyEdit : public TMyAbstractEdit
{
private:
   TMyAbstractStringGrid* FStringGrid;
protected:
public:
   __fastcall TMyEdit(TComponent* Owner);
__published:
   __property TMyAbstractStringGrid* StringGrid = {read=FStringGrid, write=FStringGrid};
};

#endif

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

#pragma hdrstop

#include &quot;MyEdit.h&quot;
#pragma package(smart_init)

static inline void ValidCtrCheck(TMyEdit *)
{
   new TMyEdit(NULL);
}

__fastcall TMyEdit::TMyEdit(TComponent* Owner)
   : TMyAbstractEdit(Owner)
{
}

namespace Myedit
{
   void __fastcall PACKAGE Register()
   {
       TComponentClass classes[1] = {__classid(TMyEdit)};
       RegisterComponents(&quot;Test&quot;, classes, 0);
   }
}

//----------------------------------------
// MyStringGrid.h
//----------------------------------------

#ifndef MyStringGridH
#define MyStringGridH

#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;MyAbstractEdit.h&gt;

class PACKAGE TMyStringGrid : public TMyAbstractStringGrid
{
private:
   TMyAbstractEdit* FEdit;
protected:
public:
   __fastcall TMyStringGrid(TComponent* Owner);
__published:
   __property TMyAbstractEdit* Edit = {read=FEdit, write=FEdit};
};

#endif

//----------------------------------------
// MyStringGrid.cpp
//----------------------------------------

#include &lt;vcl.h&gt;

#pragma hdrstop

#include &quot;MyStringGrid.h&quot;
#pragma package(smart_init)

static inline void ValidCtrCheck(TMyStringGrid *)
{
   new TMyStringGrid(NULL);
}

__fastcall TMyStringGrid::TMyStringGrid(TComponent* Owner)
   : TMyAbstractStringGrid(Owner)
{
}

namespace Mystringgrid
{
   void __fastcall PACKAGE Register()
   {
       TComponentClass classes[1] = {__classid(TMyStringGrid)};
       RegisterComponents(&quot;Test&quot;, classes, 0);
   }
}
</code></pre>
<p>Das konnte ich bei mir kompilieren, installieren und auch verwenden.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/731094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/731094</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 23 Feb 2005 22:03:11 GMT</pubDate></item><item><title><![CDATA[Reply to kommunizierende Komponenten on Sat, 26 Feb 2005 12:49:02 GMT]]></title><description><![CDATA[<p>Ah, jetzt! Das tut. Vielen Dank!<br />
Das Ganze funktioniert übrigens auch, wenn man die abstrakten Komponenten in einzelne Dateien packt.</p>
<p>Gruß<br />
Marc</p>
<p>PS: Ich hatte (vergeblich) immer das versucht:</p>
<pre><code>class MyAbstractEdit
{
  public:
    ZusatzfunktionEdit() = 0;
}

class MyAbstractGrid
{
  public:
    ZusatzfunktionGrid() = 0; 
}

class MyEdit : public TEdit, public MyAbstractEdit
{
  private:
    MyAbstractGrid* FGrid;
  public:
    ZusatzfunktionEdit();
  __published:
    __property MyAbstractGrid* Grid = {read = FGrid, write = FGrid};
}

class MyGrid : public TStringGrid, public MyAbstractGrid
{
  private:
    MyAbstractEdit* FEdit;
  public:
    ZusatzfunktionGrid();
  published:
    __property MyAbstractEdit* Edit = {read = FEdit, write = FEdit};
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/732733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/732733</guid><dc:creator><![CDATA[MarcE]]></dc:creator><pubDate>Sat, 26 Feb 2005 12:49:02 GMT</pubDate></item></channel></rss>