<?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[Ereignisse von eigenen Komponenten (Klappe die tausendste)]]></title><description><![CDATA[<p>Hallo.</p>
<p>Sorry, ich weiß, dass diese Frage hier schon tausendmal gestellt worden ist. Ich habe die entsprechenden Beiträge auch über die Suche gefunden. Leider checke ich sie nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Daher an dieser Stelle noch mal die Frage, mit Bitte auf Antwort im &quot;für newbys, die noch die eigene Komponenten im Builder 6 benutzt haben&quot; Style <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>Also, ich habe meine Komponente TMyStringGrid<br />
Header:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#ifndef MyStringGridH
#define MyStringGridH
//---------------------------------------------------------------------------
#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;Grids.hpp&gt;
//---------------------------------------------------------------------------
class PACKAGE TMyStringGrid : public TStringGrid
{
private:
protected:
public:
  __fastcall TMyStringGrid(TComponent* Owner);
  int colSorted;

__published:

};
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>cpp:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;

#pragma hdrstop

#include &quot;MyStringGrid.h&quot;
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten
// keine rein virtuellen Funktionen besitzen.
//

static inline void ValidCtrCheck(TMyStringGrid *)
{
  new TMyStringGrid(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyStringGrid::TMyStringGrid(TComponent* Owner)
  : TStringGrid(Owner)
{
}
//---------------------------------------------------------------------------
namespace Mystringgrid
{
  void __fastcall PACKAGE Register()
  {
     TComponentClass classes[1] = {__classid(TMyStringGrid)};
     RegisterComponents(&quot;Beispiele&quot;, classes, 0);
  }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Dieser Code wurde automatisch vom Borland Builder erstellt.<br />
Ich möchte jetzt, dass alle Objekte, die ich aus dieser KLasse ableiten, ein bestimmtes OnDraw Ereignis benutzen. Diese möchte ich in die Klasse integrieren.<br />
Was muss ich tun?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/101447/ereignisse-von-eigenen-komponenten-klappe-die-tausendste</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 03:48:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/101447.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Feb 2005 11:10:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ereignisse von eigenen Komponenten (Klappe die tausendste) on Wed, 16 Feb 2005 11:10:44 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Sorry, ich weiß, dass diese Frage hier schon tausendmal gestellt worden ist. Ich habe die entsprechenden Beiträge auch über die Suche gefunden. Leider checke ich sie nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Daher an dieser Stelle noch mal die Frage, mit Bitte auf Antwort im &quot;für newbys, die noch die eigene Komponenten im Builder 6 benutzt haben&quot; Style <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>Also, ich habe meine Komponente TMyStringGrid<br />
Header:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#ifndef MyStringGridH
#define MyStringGridH
//---------------------------------------------------------------------------
#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;Grids.hpp&gt;
//---------------------------------------------------------------------------
class PACKAGE TMyStringGrid : public TStringGrid
{
private:
protected:
public:
  __fastcall TMyStringGrid(TComponent* Owner);
  int colSorted;

__published:

};
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>cpp:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;

#pragma hdrstop

#include &quot;MyStringGrid.h&quot;
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten
// keine rein virtuellen Funktionen besitzen.
//

static inline void ValidCtrCheck(TMyStringGrid *)
{
  new TMyStringGrid(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyStringGrid::TMyStringGrid(TComponent* Owner)
  : TStringGrid(Owner)
{
}
//---------------------------------------------------------------------------
namespace Mystringgrid
{
  void __fastcall PACKAGE Register()
  {
     TComponentClass classes[1] = {__classid(TMyStringGrid)};
     RegisterComponents(&quot;Beispiele&quot;, classes, 0);
  }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Dieser Code wurde automatisch vom Borland Builder erstellt.<br />
Ich möchte jetzt, dass alle Objekte, die ich aus dieser KLasse ableiten, ein bestimmtes OnDraw Ereignis benutzen. Diese möchte ich in die Klasse integrieren.<br />
Was muss ich tun?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/724714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/724714</guid><dc:creator><![CDATA[Clip]]></dc:creator><pubDate>Wed, 16 Feb 2005 11:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to Ereignisse von eigenen Komponenten (Klappe die tausendste) on Wed, 16 Feb 2005 19:17:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>was du mit OnDraw machen willst, weiss ich nicht. Vielleicht etwas genauer erklären was du vorhast.</p>
<p>Hast du dir das Tutorial (in der Signatur) angeschaut ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/725089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/725089</guid><dc:creator><![CDATA[AndreasW]]></dc:creator><pubDate>Wed, 16 Feb 2005 19:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to Ereignisse von eigenen Komponenten (Klappe die tausendste) on Thu, 17 Feb 2005 08:01:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte ein StringGrid haben, welches alle Anforderungen die ich normalerweise an ein Grid habe, erfüllt. D.h. es muss einfach farbige Cellen, reihen usw. darstellen können, muss nach int, String und DateTime sortierbar sein, und sollte einige extra Eigenschaften zur weiteren Nutzung haben.<br />
Bis jetzt habe ich das immer mühsam im Programm realsiert. D.h. jedes grid hatte sein eigenes OnDrawCell Event, mit teils sehr redundanten Code (jede zweite Zeile farbeig etc.). Das gleiche gilt für die Sortieraufrufe. Das ist nur sehr schwer zu pflegen, sondern ist auch noch umständlich.<br />
Daher möchte ich ein Grid schreiben, dass all diese Anforderungen bereits mitbringt. Über Eigenschaften soll dann steuerbar sein, nach welchen Regeln Zellen oder Reihen eingefärbt werden sollen (wenn überhaupt). Zudem sollen die Sortiermethoden mit implementiert werden.</p>
<p>Bis jetzt habe ich den folgenden Code, der zwar nichts bewirkt (geht nicht), aber zumindest auch keine Fehler mehr verursacht.</p>
<p>Header:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#ifndef MyStringGridH
#define MyStringGridH
//---------------------------------------------------------------------------
#include &lt;SysUtils.hpp&gt;
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;Grids.hpp&gt;
//---------------------------------------------------------------------------
class PACKAGE TMyStringGrid : public TStringGrid
{
private:
  TDrawCellEvent FOnDrawCell;

protected:
	virtual void __fastcall DrawCell(int ACol, int ARow, const Types::TRect &amp;ARect, TGridDrawState AState);
  __property TDrawCellEvent OnDrawCell = {read=FOnDrawCell, write=FOnDrawCell};

public:
  __fastcall TMyStringGrid(TComponent* Owner);

__published:

};
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>cpp:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;

#pragma hdrstop

#include &quot;MyStringGrid.h&quot;
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten
// keine rein virtuellen Funktionen besitzen.
//

static inline void ValidCtrCheck(TMyStringGrid *)
{
  new TMyStringGrid(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyStringGrid::TMyStringGrid(TComponent* Owner)
  : TStringGrid(Owner)
{
}
//---------------------------------------------------------------------------
namespace Mystringgrid
{
  void __fastcall PACKAGE Register()
  {
     TComponentClass classes[1] = {__classid(TMyStringGrid)};
     RegisterComponents(&quot;Beispiele&quot;, classes, 0);
  }
}
//---------------------------------------------------------------------------
virtual void __fastcall TMyStringGrid::DrawCell(int ACol, int ARow, const Types::TRect &amp;ARect, TGridDrawState AState)
  {
  TStringGrid::DrawCell(ACol, ARow, Types::TRect &amp;ARect, AState);

  if (ARow != 0)
    {
    Canvas-&gt;Brush-&gt;Color = 0x00DDDDFF;

    Canvas-&gt;FillRect(Rect);
    DrawText(Canvas-&gt;Handle, Cells[ACol][ARow].c_str(), -1, &amp;Rect, DT_SINGLELINE | DT_VCENTER | 0);
    }

  }
//---------------------------------------------------------------------------
</code></pre>
<p>Dein Tut werde ich mir gleich mal anschauen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/725391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/725391</guid><dc:creator><![CDATA[Clip]]></dc:creator><pubDate>Thu, 17 Feb 2005 08:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Ereignisse von eigenen Komponenten (Klappe die tausendste) on Thu, 17 Feb 2005 10:42:23 GMT]]></title><description><![CDATA[<p>Ein Weg wäre, die Methode Loaded() zu überschreiben und darin zu überprüfen, ob das OnDrawCell-Ereignis gesetzt wurde.<br />
Wenn also jemand Deine Komponente verwendet, hat er ja auch die Möglichkeit für das Ereignis eine entsprechende<br />
Methode zuzuweisen. Wenn Loaded aufgerufen wird, sind sämtliche Eigenschaften, die ein Benutzer (in diesem Fall<br />
ein Programmierer, der Deine Komponente verwendet) im Objektinspektor gesetzt hat, eingelesen.<br />
Dann hast Du die Möglichkeit, Deine eigene Routine hier einzuklinken: Immer wenn das OnDrawCell-Ereignis eintritt,<br />
arbeitest Du zuerst Deine Routine ab und anschließend die von außen gesetzte.</p>
<p>Das Problem ist allerdings, dass Du nicht mitbekommst, wenn OnDrawCell per Code gesetzt wird.<br />
OnDrawCell hat leider keine set-Methode, die Du überschreiben kannst. Du kannst höchstens die Eigenschaft neu<br />
implementieren, ob das aber funktioniert, habe ich noch nicht ausprobiert.</p>
<p>Vielleicht könntest Du auch die entsprechende Windows-Message abfangen; entweder über Message-Maps oder über<br />
einen Hook. Hooks funktionieren mit Komponenten, da .bpl-Dateien auch DLLs sind. Allerdings habe ich die<br />
Erfahrung gemacht, dass die Komponente dann in der Liste der Laufzeit-Packages enthalten sein muss.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/725487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/725487</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Thu, 17 Feb 2005 10:42:23 GMT</pubDate></item></channel></rss>