<?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[Frage zu Baloontips]]></title><description><![CDATA[<p>Hallo,</p>
<p>wollte mal fragen, ob es ohne Probleme möglich wäre einen vorhandenen Delphi-Code in C/C++ umzusetzen?</p>
<p>Ich bin auf der Suche nach Baloontips. Habe zu Delphi tausende von Inhalten gefunden, jedoch nichts zum Builder, weder unter Suchmaschinen, noch hier im Forum.</p>
<p>Fall jemand eine Freeware Komponente hätte würde mir die auch reichen, ansonsten wollte ich mal fragen, ob das hier jemand schafft zu übersetzen?</p>
<pre><code>{....}

uses Commctrl;

{....}

const
  TTS_BALLOON    = $40;
  TTM_SETTITLE = (WM_USER + 32);

var
  hTooltip: Cardinal;
  ti: TToolInfo;
  buffer : array[0..255] of char;

{....}

procedure CreateToolTips(hWnd: Cardinal);
begin
  hToolTip := CreateWindowEx(0, 'Tooltips_Class32', nil, TTS_ALWAYSTIP or TTS_BALLOON,
    Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
    Integer(CW_USEDEFAULT), hWnd, 0, hInstance, nil);
  if hToolTip &lt;&gt; 0 then
  begin
    SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or
      SWP_NOSIZE or SWP_NOACTIVATE);
    ti.cbSize := SizeOf(TToolInfo);
    ti.uFlags := TTF_SUBCLASS;
    ti.hInst  := hInstance;
  end;
end;

procedure AddToolTip(hwnd: DWORD; lpti: PToolInfo; IconType: Integer;
  Text, Title: PChar);
var
  Item: THandle;
  Rect: TRect;
begin
  Item := hWnd;
  if (Item &lt;&gt; 0) and (GetClientRect(Item, Rect)) then
  begin
    lpti.hwnd := Item;
    lpti.Rect := Rect;
    lpti.lpszText := Text;
    SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(lpti));
    FillChar(buffer, SizeOf(buffer), #0);
    lstrcpy(buffer, Title);
    if (IconType &gt; 3) or (IconType &lt; 0) then IconType := 0;
    SendMessage(hToolTip, TTM_SETTITLE, IconType, Integer(@buffer));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateToolTips(Form1.Handle);
  AddToolTip(Memo1.Handle, @ti, 1, 'Tooltip text', 'Title');
end;

{
IconType can be:

 0 - No icon
 1 - Information
 2 - Warning
 3 - Error
}
</code></pre>
<p>Danke im voraus und Gruß Gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119915/frage-zu-baloontips</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 19:54:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119915.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Sep 2005 23:45:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Baloontips on Tue, 06 Sep 2005 23:45:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wollte mal fragen, ob es ohne Probleme möglich wäre einen vorhandenen Delphi-Code in C/C++ umzusetzen?</p>
<p>Ich bin auf der Suche nach Baloontips. Habe zu Delphi tausende von Inhalten gefunden, jedoch nichts zum Builder, weder unter Suchmaschinen, noch hier im Forum.</p>
<p>Fall jemand eine Freeware Komponente hätte würde mir die auch reichen, ansonsten wollte ich mal fragen, ob das hier jemand schafft zu übersetzen?</p>
<pre><code>{....}

uses Commctrl;

{....}

const
  TTS_BALLOON    = $40;
  TTM_SETTITLE = (WM_USER + 32);

var
  hTooltip: Cardinal;
  ti: TToolInfo;
  buffer : array[0..255] of char;

{....}

procedure CreateToolTips(hWnd: Cardinal);
begin
  hToolTip := CreateWindowEx(0, 'Tooltips_Class32', nil, TTS_ALWAYSTIP or TTS_BALLOON,
    Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
    Integer(CW_USEDEFAULT), hWnd, 0, hInstance, nil);
  if hToolTip &lt;&gt; 0 then
  begin
    SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or
      SWP_NOSIZE or SWP_NOACTIVATE);
    ti.cbSize := SizeOf(TToolInfo);
    ti.uFlags := TTF_SUBCLASS;
    ti.hInst  := hInstance;
  end;
end;

procedure AddToolTip(hwnd: DWORD; lpti: PToolInfo; IconType: Integer;
  Text, Title: PChar);
var
  Item: THandle;
  Rect: TRect;
begin
  Item := hWnd;
  if (Item &lt;&gt; 0) and (GetClientRect(Item, Rect)) then
  begin
    lpti.hwnd := Item;
    lpti.Rect := Rect;
    lpti.lpszText := Text;
    SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(lpti));
    FillChar(buffer, SizeOf(buffer), #0);
    lstrcpy(buffer, Title);
    if (IconType &gt; 3) or (IconType &lt; 0) then IconType := 0;
    SendMessage(hToolTip, TTM_SETTITLE, IconType, Integer(@buffer));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateToolTips(Form1.Handle);
  AddToolTip(Memo1.Handle, @ti, 1, 'Tooltip text', 'Title');
end;

{
IconType can be:

 0 - No icon
 1 - Information
 2 - Warning
 3 - Error
}
</code></pre>
<p>Danke im voraus und Gruß Gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866680</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Tue, 06 Sep 2005 23:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 05:57:19 GMT]]></title><description><![CDATA[<p>das ding heisst ja auch <strong>balloon</strong>... gibt auch schon genau einen thread hier dazu. <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="😉"
    /> ausserdem gibts keinen delphi-code sondern nur object-pascal-code.</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-113829-and-highlight-is-balloon.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-113829-and-highlight-is-balloon.html</a></p>
<p>nachtrag: ich glaub ich hab das jetzt verwechselt, naja macht nix, vlei hilft dir der link ja trotzdem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866708</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Wed, 07 Sep 2005 05:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 06:09:52 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Das ganze ist auch ein bisschen schwerer und auch nicht wirklich Borland sprezifisch. Das tendiert also eher Richtung WinAPI.</p>
<p>Ich hab aber in einem Projekt mal für den Borland Balloontips verwendet. Ich packe hier mal den Code rein, vielleicht hilfts dir!</p>
<pre><code class="language-cpp">// In der Header
BEGIN_MESSAGE_MAP  // needed for tray icon (messages)
MESSAGE_HANDLER(WM_DRAWITEM, TMessage,DrawItem)
//MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)
END_MESSAGE_MAP(TForm)

// In der cpp
LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi)
{
   HICON hIcon;

   hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi-&gt;CtlID), IMAGE_ICON,
		16, 16, 0);
   if (!hIcon)
      return(FALSE);

   DrawIconEx(lpdi-&gt;hDC, lpdi-&gt;rcItem.left, lpdi-&gt;rcItem.top, hIcon,
		16, 16, 0, NULL, DI_NORMAL);

   return(TRUE);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::DrawItem(TMessage&amp; Msg)
{
     IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam);
     TForm::Dispatch(&amp;Msg);
}
//---------------------------------------------------------------------------

bool __fastcall TMainForm::BalloonTip(AnsiString title, AnsiString text)
{
   NOTIFYICONDATA tnd;

   tnd.cbSize           = sizeof(NOTIFYICONDATA);
   tnd.hWnd             = Handle;
   tnd.uID              = IDC_MYICON;
   tnd.uFlags           = NIF_INFO;
   tnd.dwInfoFlags      = NIIF_INFO;
   tnd.uCallbackMessage	= MYWM_NOTIFY;
   tnd.uTimeout = 1000; // in milliseconds *10?

   lstrcpyn(tnd.szTip, &quot;Der 'mit-der-Maus-drüberfahr-Text' muss hier rein&quot;, sizeof(tnd.szTip));
   lstrcpyn(tnd.szInfoTitle, title.c_str(), sizeof(tnd.szInfoTitle));

   tnd.hIcon		= Application-&gt;Icon-&gt;Handle;// oder irgend ein anderer Icon

   lstrcpyn(tnd.szInfo, text.c_str(), sizeof(tnd.szInfo));

   return (Shell_NotifyIcon(NIM_MODIFY, &amp;tnd));
}
//---------------------------------------------------------------------------

bool __fastcall TMainForm::TrayMessage(DWORD dwMessage)
{
   NOTIFYICONDATA tnd;

   tnd.cbSize           = sizeof(NOTIFYICONDATA);
   tnd.hWnd             = Handle;
   tnd.uID              = IDC_MYICON;
   tnd.uFlags           = NIF_MESSAGE | NIF_ICON | NIF_TIP;
   tnd.uCallbackMessage	= MYWM_NOTIFY;

   if (dwMessage == NIM_MODIFY)
    {
        tnd.hIcon	= Application-&gt;Icon-&gt;Handle; // oder irgend ein anderer Icon
        lstrcpyn(tnd.szTip, &quot;Der 'mit-der-Maus-drüberfahr-Text' muss hier rein&quot;, sizeof(tnd.szTip));
    }
   else
    {
        tnd.hIcon = NULL;
        tnd.szTip[0] = '\0';
    }

   return (Shell_NotifyIcon(dwMessage, &amp;tnd));
}
//---------------------------------------------------------------------------

// Im Konstruktor von deinem Haupt-Formular
TrayMessage(NIM_ADD);  // TrayIcon hinzufügen
TrayMessage(NIM_MODIFY);

// Im Destruktor von deinem Haupt-Formular
TrayMessage(NIM_DELETE);

// Von egal wo
BalloonTip(&quot;Ich bin der Titel&quot;, &quot;Und ich bin der fette Text in der Mitte&quot;);
</code></pre>
<p>Wie gesagt, hoffe es hilft.<br />
Das sieht so erstmal ziemlich mächtig aus, aber keine Angst! Im wesentlichen musste nur die 3 Aufrufe im Konstruktor und Destruktor plazieren und dann kannste mit der BalloonTip()-Funktion deine Texte absetzen.<br />
In der Header-Dateihab ich noch eine Notify()-Callbackfunktion deklariert (die auskommentierte Zeile), die mir die Mausklicks auf den TryIcon signalisiert.</p>
<p>Viel Spass damit <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>
]]></description><link>https://www.c-plusplus.net/forum/post/866712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866712</guid><dc:creator><![CDATA[el Clio]]></dc:creator><pubDate>Wed, 07 Sep 2005 06:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 06:16:38 GMT]]></title><description><![CDATA[<p><a href="http://www.lmdinnovative.com/download/" rel="nofollow">http://www.lmdinnovative.com/download/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/866717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866717</guid><dc:creator><![CDATA[xyz_]]></dc:creator><pubDate>Wed, 07 Sep 2005 06:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 07:54:54 GMT]]></title><description><![CDATA[<p>vielen dank euch dreien!</p>
<p>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866754</guid><dc:creator><![CDATA[gerd01-off]]></dc:creator><pubDate>Wed, 07 Sep 2005 07:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 10:50:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12999">@el</a> clio:</p>
<p>hallo,</p>
<p>ich habe versucht deinen code in mein projekt einzubinden. jedoch ohne erfolge.<br />
er mosert beim kompilieren rum, dass er DrawItem nicht kennt:</p>
<p>habe dies in der header im public bereich reinkopiert:</p>
<pre><code class="language-cpp">public:
    [...]
    // In der Header
    BEGIN_MESSAGE_MAP  // needed for tray icon (messages)
    MESSAGE_HANDLER(WM_DRAWITEM, TMessage,DrawItem)
    //MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)
    END_MESSAGE_MAP(TForm)
</code></pre>
<p><strong>er kennt allerdings kein g_inst, IDC_MYICON vieleicht auch weitere</strong></p>
<p>fehlen da eventuell noch einige konstanten? muss da dringend noch etwas inkludiert werden?</p>
<p>achja, ist es jetzt so, dass der ballon weggeklickt werden kann, wäre nämlich von Vorteil. <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>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866899</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Wed, 07 Sep 2005 10:50:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 18:04:41 GMT]]></title><description><![CDATA[<p>Autsch! Hab ich ganz vergessen zu erwähnen: Innerhalb deiner Klasse, ich habs im public gemacht müssen noch die Funktionsprototypen deklariert werden:</p>
<pre><code class="language-cpp">public:	[...]
        void __fastcall DrawItem(TMessage&amp; Msg);
        void __fastcall MyNotify(TMessage&amp; Msg);
        bool __fastcall TrayMessage(DWORD dwMessage);
        bool __fastcall BalloonTip(AnsiString title, AnsiString text);
</code></pre>
<p>Und in der gleichen Headerdatei ganz oben müssen noch ein paar andere Geschichten definiert werden:</p>
<pre><code class="language-cpp">#define MYWM_NOTIFY (WM_APP+100)    
#define IDC_MYICON 1006 
extern HINSTANCE g_hinst;                    
LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi); ///&lt; Callback function
</code></pre>
<p>Dann sollte das gehen, sofern ich nicht nochwas übersehen hab... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/866983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866983</guid><dc:creator><![CDATA[el Clio]]></dc:creator><pubDate>Wed, 07 Sep 2005 18:04:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 12:59:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12999">@el</a> Clio</p>
<p>hallo,</p>
<p>habe es jetzt ergänzt, funktioniert auch soweit prima. hatte zwar schon selber die f-prototypen drin, nur leider den nicht von DrawItem. <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>allerdings bekomme ich das fenster immer nur im tray, ich hätte es allerdings gern so:</p>
<p><a href="http://www.swissdelphicenter.ch/de/showcode.php?id=1555" rel="nofollow">http://www.swissdelphicenter.ch/de/showcode.php?id=1555</a></p>
<p>haste da noch ne möglichkeit es dort hinzubekommen, als beim entsprechenden control?</p>
<p>achja: funktioniert das ganze auch unter 2000 und 98?</p>
<p>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867011</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Wed, 07 Sep 2005 12:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 18:04:05 GMT]]></title><description><![CDATA[<p>Keine Ahnung, wie das gehen soll. Vielleicht, wenn man etwas mit den Handles rumspielt... Aber ne Lösung habe ich dafür nicht. Sorry.</p>
<p>Ich denke, das geht nur unter xp... Vielleicht noch 2000, aber ich meine nicht, na und 98 auf gar keinen Fall <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>
]]></description><link>https://www.c-plusplus.net/forum/post/867080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867080</guid><dc:creator><![CDATA[el Clio]]></dc:creator><pubDate>Wed, 07 Sep 2005 18:04:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Wed, 07 Sep 2005 18:03:32 GMT]]></title><description><![CDATA[<p>Bei den LMD Tools ist ne Komponente dabei, wo du deinen Balloon Tip beliebig positionieren kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867260</guid><dc:creator><![CDATA[xyz_]]></dc:creator><pubDate>Wed, 07 Sep 2005 18:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Thu, 06 Oct 2005 11:32:26 GMT]]></title><description><![CDATA[<p>ja, danke ich weiss, aber die sieht etwas unschön aus. <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12999">@el</a> Clio:</p>
<p>ist es vielleicht auch möglich das icon der TTrayIcon komponente dafür zu nutzen? oder aber eventuell ein popup menu auf das icon zu setzen? ich habe schon etwas versucht zu fummeln, leider ohne erfolg. da reichen meine winapi kenntnisse nicht aus. (schade eigentlich)</p>
<p>kannst du da eventuell nochmal nen tipp geben, sodass ich auf das ergebnis komme?</p>
<p>vielen dank und gruß im voraus</p>
<p>gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886337</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Thu, 06 Oct 2005 11:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Thu, 06 Oct 2005 13:59:54 GMT]]></title><description><![CDATA[<p>TTrayIcon taugt da nix, aber frag micht nicht warum! Irgendwas ging damit nicht...</p>
<p>Mit dem PopUp-Menü geht auf jeden Fall. Den genauen Code kann ich dir allerdings nicht geben, weil mein Laptop momentan zur Reparatur ist und ich deshalb nicht an den Quellcode kommen.</p>
<p>Der erste Schritt ist aber eine &quot;Notify&quot;-Routine die über die auskommentierte Messagemap (in meinen letzten Beiträgen) zugewiesen wird:</p>
<p>MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)</p>
<p>im Code:</p>
<pre><code class="language-cpp">public:
    [...]
    // In der Header
    BEGIN_MESSAGE_MAP  // needed for tray icon (messages)
    [...]
    MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)
    END_MESSAGE_MAP(TForm)
</code></pre>
<p>Die dazugehörige Funktion sieht so aus:</p>
<pre><code class="language-cpp">public:    [...]
        void __fastcall MyNotify(TMessage&amp; Msg);
</code></pre>
<p>Die Funktion wird aufgerufen, wenn irgendwas (egal was) mit dem Icon passiert.<br />
In &quot;Msg&quot; steht dann auch drin, obs ein linker oder rechter Mausklick war.<br />
Dann kannste einfach ein PopUp-Menü öffnen...</p>
<p>Genauer gehts im Moment leider nicht... Vielleicht mal nach &quot;MyNotify(TMessage&amp; Msg)&quot; googlen...</p>
<p>Viel Erfolg!</p>
<p>Falls es nicht klappt un ich meinen Lappi wieder habe guck ich auch nochmal nach!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886463</guid><dc:creator><![CDATA[el Clio]]></dc:creator><pubDate>Thu, 06 Oct 2005 13:59:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Thu, 06 Oct 2005 17:39:47 GMT]]></title><description><![CDATA[<p>danke, werde mal versuchen zu fummeln! <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="🙂"
    /> *schwitz*</p>
<p>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886589</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Thu, 06 Oct 2005 17:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Thu, 06 Oct 2005 18:19:47 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12999">@el</a> clio:</p>
<p>habe etwas gefunden, funzt auch prima, nur müsste ich jetzt noch ein bestimmtes icon dafür haben, nicht unbedingt das application icon.</p>
<p>kann ich auch icons nehmen, welche in einer imagelist als bmps drin sind?</p>
<p>gruß gerd</p>
<p>ps: hier die lösung:</p>
<pre><code class="language-cpp">void __fastcall TForm1::MyNotify(TMessage&amp; Msg)
{
    POINT MousePos;

    switch(Msg.LParam)
    {
        case WM_RBUTTONUP:
            if (GetCursorPos(&amp;MousePos))
            {
                PopupMenu1-&gt;PopupComponent = Form1;
                SetForegroundWindow(Handle);
                PopupMenu1-&gt;Popup(MousePos.x, MousePos.y);
            }
            else
                Show();
            break;
        case WM_LBUTTONUP:
            ToggleState();
            break;
        default:
            break;
    }
    TForm::Dispatch(&amp;Msg);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/886631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886631</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Thu, 06 Oct 2005 18:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Thu, 06 Oct 2005 19:27:53 GMT]]></title><description><![CDATA[<p>Ja genau die meinte ich. Hab ich auch in etwa so.</p>
<p>Welches Icon du nimmst ist egal musste halt anpassen in:</p>
<pre><code class="language-cpp">bool __fastcall TMainForm::TrayMessage(DWORD dwMessage)
{
   [...]
        tnd.hIcon    = Application-&gt;Icon-&gt;Handle; // oder irgend ein anderer Icon
   [...]
}
//---------------------------------------------------------------------------
</code></pre>
<p>Die Imagelist-Bilder sollten ja auch kein Problem darstellen. Gibts da nicht ne Funktion GetIcon() oder so, die direkt ein Icon von nem Bitmap zurückgibt...</p>
<p>Du schaffst das! <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>Wenn das alles fertig ist würd ich übrigens gerne mal deine komplettlösung sehen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/886691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886691</guid><dc:creator><![CDATA[el Clio]]></dc:creator><pubDate>Thu, 06 Oct 2005 19:27:53 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 00:43:57 GMT]]></title><description><![CDATA[<p>danke für den zuspruch, jetzt suche ich nur noch nach einer methode für das icon(werde dein mal versuchen), und nach der lösung, wie man die sachen im tray befördert beim minimieren.</p>
<p>werde wenn alles fertig alles posten! <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>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886790</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Fri, 07 Oct 2005 00:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 09:29:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12999">@el</a> clio:</p>
<p>eine frage stellt sich mir, wie bekomme ich einen message handler hin, der mir beim minimze die möglichkeit gibt, darauf zu reagieren?</p>
<p>ps: mit dem Icon muss ich noch etwas testen.</p>
<p>du hattest recht, TImageList hat die möglichkeit ein icon zu liefern:</p>
<pre><code class="language-cpp">TIcon *ic = new TIcon();
ImageList1-&gt;GetIcon(0,ic);
</code></pre>
<p>nur fehlt mir jetzt noch der handle auf ic.</p>
<p>vielleicht muss ich es aber dann, da mir das oberste vielleicht doch probleme bereitet auf eine ressource zurückgreifen, welche ich einlinke.</p>
<p>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886900</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Fri, 07 Oct 2005 09:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 10:54:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12999">@el</a> clio:</p>
<p>ok, hatte (so dachte ich) die möglichkeit gefunden, funzt nur leider nicht so, wie gedacht:</p>
<p>eine eigene memberfunktion ins formular rein, und über:</p>
<pre><code class="language-cpp">Application-&gt;OnMinimize = Eigene_Memberfunktion
</code></pre>
<p>zuweisen:</p>
<p>dann in dieser funktion einfach nur ein:</p>
<pre><code class="language-cpp">Hide();
</code></pre>
<p>einbringen. Klappt anfangs sehr schön, aber nach einiger Zeit nicht mehr. Vielleicht mache ich auch nur etwas falsch. natürlich habe ich noch beim abfangen von MyNotify ein :</p>
<pre><code class="language-cpp">Show();
Application-&gt;Restore();
</code></pre>
<p>drin, aber irgendwie ist das kein richtiger ansatz, siehe oben beschriebenes Problem.</p>
<p>naja, war nur zur info.</p>
<p>gruß gerd</p>
<p>*derweiteraufdersucheist*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/886950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/886950</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Fri, 07 Oct 2005 10:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 12:30:28 GMT]]></title><description><![CDATA[<p>ok, ich hoffe ich freu mich nicht zu früh, aber ich glaube es liegt am</p>
<pre><code class="language-cpp">Hide();
</code></pre>
<p>wenn man nämlich statt dem einfach die API-Funktion:</p>
<pre><code class="language-cpp">ShowWindow(Application-&gt;Handle, SW_HIDE);
</code></pre>
<p>aufruft, spinnt es nicht mehr herum.</p>
<p>*hoffentlich liege ich richtig*</p>
<p>gruß gerd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887013</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Fri, 07 Oct 2005 12:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 13:53:16 GMT]]></title><description><![CDATA[<p>es ist vollbracht, und funzt alles! <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>vielleicht nicht die elegantesten lösungen, aber es erfüllt alles seinen zweck. Wer etwas zu verbessern hat, soll es ruhig dazu beitragen, damit ich fehler erkenne! <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="🙂"
    /> Danke.</p>
<p>hier nochmal als einfachstes beispiel, damit nur code kopieren, und routinen implementieren, damit man auch sieht, was man alles braucht:</p>
<p>Headerdatei:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#ifndef mainH
#define mainH
//---------------------------------------------------------------------------
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
#include &lt;Forms.hpp&gt;
#include &lt;ImgList.hpp&gt;
#include &lt;Menus.hpp&gt;
#define MYWM_NOTIFY WM_USER
#define IDC_MYICON 1006

//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published:	// Von der IDE verwaltete Komponenten
    TPopupMenu *TrayPop;
    TMenuItem *Wiederherstellen1;
    TImageList *ImageList1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &amp;Action);
    void __fastcall FormClick(TObject *Sender);
private:	// Anwender-Deklarationen
public:		// Anwender-Deklarationen
    __fastcall TfrmMain(TComponent* Owner);
    TIcon* ic;
    BEGIN_MESSAGE_MAP  // needed for tray icon (messages)
    MESSAGE_HANDLER(WM_DRAWITEM, TMessage,DrawItem);
    MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify);
    END_MESSAGE_MAP(TForm)
    void __fastcall DrawItem(TMessage&amp; Msg);
    // MySize: wenn die Anwenung minimiert wird
    void __fastcall MySize(TObject *Sender);
    void __fastcall MyNotify(TMessage&amp; Msg);
    bool __fastcall TrayMessage(DWORD dwMessage);
    bool __fastcall BalloonTip(AnsiString title, AnsiString text,int flag);
    // flag bitte mit (NIIF_ERROR,NIIF_WARNING,NIIF_INFO...) füttern
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>Quelldatei:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;main.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TfrmMain *frmMain;
HINSTANCE g_hinst; 
LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi); ///&lt; Callback function 
//--------------------------------------------------------------------------- 
LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi) 
{ 
   HICON hIcon; 
   hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi-&gt;CtlID), IMAGE_ICON, 
        16, 16, 0); 
   if (!hIcon) 
      return(FALSE); 

   DrawIconEx(lpdi-&gt;hDC, lpdi-&gt;rcItem.left, lpdi-&gt;rcItem.top, hIcon, 
        16, 16, 0, NULL, DI_NORMAL); 

   return(TRUE); 
} 
//--------------------------------------------------------------------------- 

void __fastcall TfrmMain::DrawItem(TMessage&amp; Msg) 
{ 
     IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam); 
     TForm::Dispatch(&amp;Msg); 
} 

//---------------------------------------------------------------------------
void __fastcall TfrmMain::MySize(TObject *Sender)
{
    ShowWindow(Application-&gt;Handle, SW_HIDE);
}
//--------------------------------------------------------------------------- 
void __fastcall TfrmMain::MyNotify(TMessage&amp; Msg) 
{ 
    POINT MousePos; 
    switch(Msg.LParam) 
    { 
        case WM_RBUTTONUP: 
            if (GetCursorPos(&amp;MousePos)) 
            { 
                TrayPop-&gt;PopupComponent = frmMain;
                SetForegroundWindow(Handle); 
                TrayPop-&gt;Popup(MousePos.x, MousePos.y); 
            } 
            else
                Show();
            break;
        case WM_LBUTTONUP:
            //TrayMessage(NIM_MODIFY);
            break;
        case WM_LBUTTONDBLCLK:
            Application-&gt;Restore();//TrayMessage(NIM_MODIFY);
            Show();
            frmMain-&gt;SetFocus();
            break; 
        default: 
            break; 
    } 
    TForm::Dispatch(&amp;Msg); 
} 
//--------------------------------------------------------------------------- 
bool __fastcall TfrmMain::BalloonTip(AnsiString title, AnsiString text,int flag) 
{ 
    TIcon * ic = new TIcon(); 
    ImageList1-&gt;GetIcon(0,ic);
    NOTIFYICONDATA tnd; 

    tnd.cbSize           = sizeof(NOTIFYICONDATA); 
    tnd.hWnd             = Handle; 
    tnd.uID              = IDC_MYICON; 
    tnd.uFlags           = NIF_INFO; 
    tnd.dwInfoFlags      = flag; 
    tnd.uCallbackMessage    = MYWM_NOTIFY; 
    tnd.uTimeout = 1000; // in milliseconds *10? 

    lstrcpyn(tnd.szTip, &quot;was auch immer&quot;, sizeof(tnd.szTip)); 
    lstrcpyn(tnd.szInfoTitle, title.c_str(), sizeof(tnd.szInfoTitle)); 
    tnd.hIcon        = ic-&gt;Handle;
    lstrcpyn(tnd.szInfo, text.c_str(), sizeof(tnd.szInfo)); 
    return (Shell_NotifyIcon(NIM_MODIFY, &amp;tnd)); 
} 
//--------------------------------------------------------------------------- 
bool __fastcall TfrmMain::TrayMessage(DWORD dwMessage) 
{ 
    TIcon * ic = new TIcon(); 
    ImageList1-&gt;GetIcon(0,ic);
    NOTIFYICONDATA tnd; 

    tnd.cbSize           = sizeof(NOTIFYICONDATA); 
    tnd.hWnd             = Handle; 
    tnd.uID              = IDC_MYICON; 
    tnd.uFlags           = NIF_MESSAGE | NIF_ICON | NIF_TIP; 
    tnd.uCallbackMessage    = MYWM_NOTIFY; 

    if (dwMessage == NIM_MODIFY) 
    { 
        tnd.hIcon    =  ic-&gt;Handle;//Application-&gt;Icon-&gt;Handle;// oder irgend ein anderer Icon 
        lstrcpyn(tnd.szTip, &quot;was auch immer&quot;, sizeof(tnd.szTip)); 
    } 
    else 
    { 
        tnd.hIcon = NULL; 
        tnd.szTip[0] = '\0';
    }
    return (Shell_NotifyIcon(dwMessage, &amp;tnd));
}
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
    : TForm(Owner)
{
    TrayMessage(NIM_ADD);  // TrayIcon hinzufügen
    TrayMessage(NIM_MODIFY); 
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
    Application-&gt;OnMinimize = MySize;
    TIcon* ic=new TIcon();
    ic = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &amp;Action)
{
    Action = caFree;
    TrayMessage(NIM_DELETE);
    delete ic;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClick(TObject *Sender)
{
    BalloonTip(&quot;Überschrift&quot;,&quot;Ein kleiner Text.\nAuch mit Umbruch&quot;,NIIF_INFO);
}
//---------------------------------------------------------------------------
</code></pre>
<p>viel spass, gruß gerd<br />
(dank an el clio)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887080</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Fri, 07 Oct 2005 13:53:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 15:15:46 GMT]]></title><description><![CDATA[<p>Sieht doch gut aus!!!</p>
<p>Allerding denke ich, dass du dir das Hide() (oder ShowWindow()) und das Show() sparen kannst.<br />
Das OnMinimize wird ja beim bzw. vor dem minimieren aufgerufen, somit &quot;verschwindet&quot; deine Anwendung ja sowieso danach, oder? Entsprechend wird die dann auch mit Restore() wieder hergestellt - ohne Show().</p>
<p>Ach so und nochwas - wohlgemerkt völlig egal, aber ich sags trotzdem mal - die Prototypendeklaration für die CallBack-Funktion</p>
<pre><code class="language-cpp">LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi); ///&lt; Callback function
</code></pre>
<p>kannste dir glaub ich sparen, weil deine Callback ja eh ganz oben steht und so ja auch in allen anderen Funktionen bekannt sein sollte... <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>Ansonsten: TOP!!!</p>
<p>Ach noch ne Ergänzung fällt mir grad ein:<br />
Die TrayMessage() könnte man noch um einen Parameter (z.B. int index = 0) erweitern, um so den Icon dynamisch zu machen, also anhand des indexes ein anderes Bild aus der Imagelist verwenden.<br />
(Evtl. sinnvoll für &quot;animierte&quot;-TrayIcons) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /></p>
<pre><code class="language-cpp">in der Header:

public:
    [...]
    bool __fastcall TrayMessage(DWORD dwMessage, int index = 0);
    [...]

in der cpp:

bool __fastcall TfrmMain::TrayMessage(DWORD dwMessage, int index)
{
    [...]
    ImageList1-&gt;GetIcon(index, ic);
    [...]
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/887199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887199</guid><dc:creator><![CDATA[el Clio]]></dc:creator><pubDate>Fri, 07 Oct 2005 15:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Baloontips on Fri, 07 Oct 2005 21:01:26 GMT]]></title><description><![CDATA[<p>mit dem prototypen haste recht, natürlich! <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 mit dem index ist auch ne gute idee, werde ich noch einfügen.</p>
<p>zum hide(), dass kann man nicht weglassen, da sonst die anwendung nur minimiert wird.</p>
<p>aber das Show() kann weg, da restore ebenfalls das formular hoch bringt. <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>gruß gerd</p>
<p>ps: wen es stört, dass das fenster nach dem restore nur wiederhergestellt wird, aber nicht im vordergrund liegt ruft einfach nach dem</p>
<pre><code class="language-cpp">Application-&gt;Restore();
</code></pre>
<p>noch diese funktion auf:</p>
<pre><code class="language-cpp">SetForegroundWindow(Handle);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/887418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887418</guid><dc:creator><![CDATA[gerd01]]></dc:creator><pubDate>Fri, 07 Oct 2005 21:01:26 GMT</pubDate></item></channel></rss>