<?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[Komponentenentwicklung und Application Messages]]></title><description><![CDATA[<p>Hi,<br />
ich entwickle gerade ein Komponente die den JournalRecordHook und den JournalPlaybackHook kapselt.</p>
<p>Nun möchte ich dieser Komponente &quot;beibringen&quot; solche Messages, wie die WM_CANCELJOURNAL Message zu behandeln.<br />
Theoretisch würde es gehen, dass ich in Application-&gt;OnMessage eine Funktion der Komponente reinschreibe und da dann die Nachrichten auswerte. Allerdings gibt es Probleme wenn der Benutzer im Programm dann auch das Aplication-&gt;OnMessage Ereignis nutzen möchte.</p>
<p>So, wie nun tun?</p>
<p>MfG</p>
<p>Alexander Sulfrian</p>
<p>PS: Ich hab garade ca. 1h gegoogelt und gegoogelgroupet <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="😉"
    /> und hab keine nützlichen Hinweise gefunden. Zumal 50% des Codes im INet auch noch Delphi ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/78592/komponentenentwicklung-und-application-messages</link><generator>RSS for Node</generator><lastBuildDate>Mon, 29 Jun 2026 19:49:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/78592.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Jul 2004 21:08:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Fri, 02 Jul 2004 21:09:56 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich entwickle gerade ein Komponente die den JournalRecordHook und den JournalPlaybackHook kapselt.</p>
<p>Nun möchte ich dieser Komponente &quot;beibringen&quot; solche Messages, wie die WM_CANCELJOURNAL Message zu behandeln.<br />
Theoretisch würde es gehen, dass ich in Application-&gt;OnMessage eine Funktion der Komponente reinschreibe und da dann die Nachrichten auswerte. Allerdings gibt es Probleme wenn der Benutzer im Programm dann auch das Aplication-&gt;OnMessage Ereignis nutzen möchte.</p>
<p>So, wie nun tun?</p>
<p>MfG</p>
<p>Alexander Sulfrian</p>
<p>PS: Ich hab garade ca. 1h gegoogelt und gegoogelgroupet <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="😉"
    /> und hab keine nützlichen Hinweise gefunden. Zumal 50% des Codes im INet auch noch Delphi ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552047</guid><dc:creator><![CDATA[Alexander Sulfrian]]></dc:creator><pubDate>Fri, 02 Jul 2004 21:09:56 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sat, 03 Jul 2004 06:49:57 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Du müsstest dir im Konstruktor deiner Komponente einen Zeiger auf Application-&gt;OnMessage speichern.<br />
Dann machst du Application-&gt;OnMessage = DEINEFUNKTION;<br />
Und in Deiner Funktion rufst du dann wiederum die Funktion auf, die du in deinem Zeiger gespeichert hast.</p>
<p>So müsste es gehn...</p>
<p>tschüss<br />
Robert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552145</guid><dc:creator><![CDATA[rowisoft]]></dc:creator><pubDate>Sat, 03 Jul 2004 06:49:57 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sat, 03 Jul 2004 08:21:40 GMT]]></title><description><![CDATA[<p>Hi,<br />
und was passiert wenn jemand während der Anwendung das Application-&gt;OnMessage benutzt? Ergeht ja nicht automatisch davon aus, das ein Komponente dieses Ereignis benutzt. Und überschreibt meine Methode einfach....</p>
<p>MfG</p>
<p>Alexander Sulfrian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552162</guid><dc:creator><![CDATA[Alexander Sulfrian]]></dc:creator><pubDate>Sat, 03 Jul 2004 08:21:40 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sat, 03 Jul 2004 08:38:21 GMT]]></title><description><![CDATA[<p>Wenn Du eine eigene Komponente enwickelst, kannst Du einfach die Windows-Hooks<br />
verwenden. Borland-Komponenten sind ja nichts anderes als spezielle DLLs. Ich<br />
habe das selbst auch schon gemacht und es funktioniert.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552169</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sat, 03 Jul 2004 08:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sat, 03 Jul 2004 08:54:11 GMT]]></title><description><![CDATA[<p>Hi,<br />
meinst du so einen Hook wie in der FAQ beschrieben?</p>
<p>Hört sich erstmal nicht schlecht an....<br />
Werd's mal ausprobieren.<br />
Danke</p>
<p>MfG</p>
<p>Alexander Sulfrian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552174</guid><dc:creator><![CDATA[Alexander Sulfrian]]></dc:creator><pubDate>Sat, 03 Jul 2004 08:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sat, 03 Jul 2004 08:55:39 GMT]]></title><description><![CDATA[<p>Alexander Sulfrian schrieb:</p>
<blockquote>
<p>meinst du so einen Hook wie in der FAQ beschrieben?</p>
</blockquote>
<p>Genau so einen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552175</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sat, 03 Jul 2004 08:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sat, 03 Jul 2004 19:34:15 GMT]]></title><description><![CDATA[<p>Irgendwie bekomme ich es nicht gebacken....<br />
Hast du vielleicht irgendwo ein Quellcodestück rumliegen?</p>
<p>Danke</p>
<p>MfG</p>
<p>Alexander Sulfrian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552613</guid><dc:creator><![CDATA[Alexander Sulfrian]]></dc:creator><pubDate>Sat, 03 Jul 2004 19:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Sun, 04 Jul 2004 12:28:45 GMT]]></title><description><![CDATA[<p>Alexander Sulfrian schrieb:</p>
<blockquote>
<p>Hast du vielleicht irgendwo ein Quellcodestück rumliegen?</p>
</blockquote>
<p>Ich werde morgen mal schauen.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552879</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Sun, 04 Jul 2004 12:28:45 GMT</pubDate></item><item><title><![CDATA[Reply to Komponentenentwicklung und Application Messages on Mon, 05 Jul 2004 08:50:23 GMT]]></title><description><![CDATA[<p>So, ich habe jetzt nochmal das Projekt wieder ausgegraben, in dem ich das verwendet habe. Vieles ist mehr oder weniger<br />
das, was auch schon in der FAQ zum Thema Windows-Hooks steht.</p>
<p>So sieht die Projekt-cpp aus:</p>
<pre><code class="language-cpp">#include &lt;basepch.h&gt;
#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------

//   Package-Quelltext.
//---------------------------------------------------------------------------
#include &quot;MeineKomponente.h&quot;

//---------------------------------------------------------------------------
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
   if (reason == DLL_PROCESS_ATTACH)
      TMeineKomponente::ghInst = hinst;
   return 1;
}
//---------------------------------------------------------------------------
</code></pre>
<p>Hier mal die wesentlichen Teile aus der Komponente:<br />
Header:</p>
<pre><code class="language-cpp">class PACKAGE TMeineKomponente: public TComponent
{
private:
   HOOKPROC lpfnHookProc;

   void initializeHook();
   void deinitializeHook();
protected:
   virtual void __fastcall Loaded(void);
public:
   /* Summary
      Handle der Komponente

      Description
      FWindowHandle ist das Handle der Komponente. Dieses darf
      nicht verändert werden.                                  */
   static HWND FWindowHandle;
   /* Summary
      Internes Handle

      Description
      Dies ist das intern verwendete Handle für einen Windows-Hook.
      Das Handle darf nicht verändert werden.                       */
   static HHOOK hookHandle;
   /* Summary
      Handle des Package (bpl)

      Description
      Dies ist das Handle das von Windows dem Package zur Laufzeit
      zugeteilt wird.

      Es entspricht dem Handle einer Dll und darf nicht verändert
      werden.                                                      */
   static HINSTANCE ghInst;

   __fastcall TMeineKomponente(TComponent* AOwner);
   __fastcall ~TMeineKomponente();
};
HWND TMeineKomponente::FWindowHandle = NULL;
HHOOK TMeineKomponente::hookHandle = NULL;
HINSTANCE TMeineKomponente::ghInst = NULL;
</code></pre>
<p>Und die entsprechende cpp:</p>
<pre><code class="language-cpp">extern &quot;C&quot; __declspec(dllexport) __stdcall LRESULT CALLBACK CALLWNDProc(int, WPARAM, LPARAM);

LRESULT CALLBACK __stdcall CALLWNDProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   if (nCode &lt; 0)
      return CallNextHookEx(TMeineKomponente::hookHandle, nCode, wParam, lParam);
   CWPSTRUCT* cwps = (CWPSTRUCT*) lParam;
   // Tun, was immer man möchte
   return CallNextHookEx(TMeineKomponente::hookHandle, nCode, wParam, lParam);
}

//---------------------------------------------------------------------------
__fastcall TMeineKomponente::~TMeineKomponente()
{
   if (!this-&gt;ComponentState.Contains(csDesigning))
      deinitializeHook();

   DeallocateHWnd(FWindowHandle);
}

void __fastcall TMeineKomponente::Loaded(void)
{
   TComponent::Loaded();

   FWindowHandle = AllocateHWnd(WndProc);
   lpfnHookProc = GetProcAddress(GetModuleHandle(&quot;MeineKomponente.bpl&quot;),&quot;CALLWNDProc&quot;);
   if (!lpfnHookProc || !ghInst)
      ShowMessage(&quot;Fehler beim Initialisieren der Komponente. Überprüfen Sie, ob MeineKomponente in der Liste &quot;
                  &quot;der Laufzeitpackages enthalten ist.&quot;);
   initializeHook();
}

void TMeineKomponente::initializeHook()
{
   if (!hookHandle)
      hookHandle = SetWindowsHookEx(WH_CALLWNDPROC, lpfnHookProc, ghInst, NULL);
}

void TMeineKomponente::deinitializeHook()
{
   if (hookHandle)
   {
      if (!UnhookWindowsHookEx(hookHandle))
         ShowMessage(&quot;Hook konnte nicht entfernt werden&quot;);
      else
         hookHandle = NULL;
   }
}
</code></pre>
<p>Ich hoffe, ich habe nichts wesentliches vergessen. Ist schon 'ne Weile her...</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/553397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/553397</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Mon, 05 Jul 2004 08:50:23 GMT</pubDate></item></channel></rss>