<?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[TMainMenu im Canvas zeichnen (Kopfzeile)]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich zeichnen mein komplettes Menü selbst, klappt auch wunderbar.</p>
<p>Nur die Kopfzeile bekomme ich nicht komplett gezeichnet, sondern nur<br />
den Bereich, in dem die Menütexte stehen. Der Rest der Menüzeile<br />
bis zum rechten Rand bleibt in der Farbe clBtnFace. Wie komme ich da<br />
aber zum Zeichnen ran? Die Komponente bietet keine Funktion OnDrawItem<br />
oder so wie die Menüeinträge selbst.</p>
<p>Danke für jeden Tip. Im Google und hier finde ich leider nichts oder<br />
ich suche falsch.... <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>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179881/tmainmenu-im-canvas-zeichnen-kopfzeile</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 13:49:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179881.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Apr 2007 09:14:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Thu, 26 Apr 2007 09:14:20 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich zeichnen mein komplettes Menü selbst, klappt auch wunderbar.</p>
<p>Nur die Kopfzeile bekomme ich nicht komplett gezeichnet, sondern nur<br />
den Bereich, in dem die Menütexte stehen. Der Rest der Menüzeile<br />
bis zum rechten Rand bleibt in der Farbe clBtnFace. Wie komme ich da<br />
aber zum Zeichnen ran? Die Komponente bietet keine Funktion OnDrawItem<br />
oder so wie die Menüeinträge selbst.</p>
<p>Danke für jeden Tip. Im Google und hier finde ich leider nichts oder<br />
ich suche falsch.... <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>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273781</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Thu, 26 Apr 2007 09:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Thu, 26 Apr 2007 10:52:30 GMT]]></title><description><![CDATA[<p>Du mußt einfach mit Canvas-&gt;FillRect() den Hintergrund erst &quot;leeren&quot; (vorher Farbe mit Brush-&gt;Color setzen) und danach dann den Menu-Text zeichnen.</p>
<p>Schau dir mal die Eigenschaft Brush-&gt;Style an, dann findest du weitere Infos (evtl. kommt dann bei dir der AHA-Effekt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273834</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 26 Apr 2007 10:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Thu, 26 Apr 2007 11:06:57 GMT]]></title><description><![CDATA[<p>Hallo, TH</p>
<p>ich fürchte nicht ganz. Die Menüs werden ja korrekt gezeichnet, aber eben nur die Fläche, wo auch in der Menüzeile (Datei, Bearbeiten... Hilfe) ein Menütext steht. Es geht aber um die restliche Fläche rechts daneben (also ab dem Menü Hilfe bis zum rechten Rand des Forms), für den ich keine Meldung erhalte, daß er neu gezeichnet werden muss, obwohl dieser Bereich ja zum TMainMenu gehört (oder nicht?) Die Komponente TMainMenu hat aber kein Ereignis OwnerDraw, sondern nur die Menüs selbst.</p>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273842</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Thu, 26 Apr 2007 11:06:57 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Thu, 26 Apr 2007 11:37:06 GMT]]></title><description><![CDATA[<p>Zeig mal deinen Code von OnDrawItem...</p>
<p>Du kannst das Rechteck auch selbst wählen, d.h. du brauchst nicht unbedingt den übergebenen Rect-Parameter 1:1 übernehmen (vergrößere doch einfach das Rechteck ein bißchen nach rechts (nur für die Hautpmenü-Einträge), bevor du den Hintergrund und den Text zeichnest).</p>
<p>P.S: ich habe gerade deinen Beitrag zum TabControl gelesen. Dort verwendest du ja auch das übergebene Rechteck (kopierst es sogar unnötigerweise). Und dann kannst du es aber genausogut vergrößern (z.B. mit Rect.Right = 800 ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273852</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 26 Apr 2007 11:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Thu, 26 Apr 2007 11:38:03 GMT]]></title><description><![CDATA[<p>Hei, TH</p>
<p>danke für Deine Tipps...</p>
<p>Die Kopie auf Rect ist notwendig wegen DrawText; sonst kommt Meldung das Mehrdeutigikeit zwischen 'Rect' und 'tabRet*' besteht. Mit der scheinbaren<br />
Übergabe auf CRect funktioniert es. <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>Mit der RECT Vergrösserung werde ich mir anschauen, sehe aber ein Problem:<br />
Die Verlängerung der RECT wäre ja beim Menü Hilfe notwendig; wird aber nur rechts<br />
ein Teil des Forms überlappt, kommt keine OnDraw Meldung, da das Menü Hilfe nicht neugezeichnet werden würde/müsste. Wozu gehört denn die Fläche rechts daneben?</p>
<p>Aber für alle mal hier den Code zum Selbstzeichnen eines Menüs:<br />
Dazu TMainMenu auf OwnerDraw=true setzen und jedem (!) Menüeintrag bei OnDrawItem=Bearbeiten1AdvancedDrawItem() zuordnen. PrgFarbe ist ein<br />
Integerwert z.B. PrgFarbe=clBtnFace</p>
<pre><code class="language-cpp">void __fastcall TForm1::Bearbeiten1AdvancedDrawItem(TObject *Sender, TCanvas *ACanvas, TRect &amp;ARect, TOwnerDrawState State)
{try {                                                                          // Fehlerroutine Start
 Integer i2,iSymb; AnsiString z1,z2; TColor f1,f2; Boolean o1;                  // Vars definieren

 TMenuItem *CurItem = dynamic_cast&lt;TMenuItem *&gt; (Sender);                       // Versuchen, Sender als MenuItem anzusprechen
 if (!CurItem) { return; }                                                      // Wenn Versuch nicht erfolgreich, dann raus

 z1=CurItem-&gt;Caption;                                                           // Menübeschriftung
 z2=ShortCutToText(CurItem-&gt;ShortCut);                                          // Tastenkombination z.B. Alt+F4

 f1=PrgFarbe; if(State.Contains(odSelected)==true) { f1=clMenuHighlight; }      // HG Farbe
 ACanvas-&gt;Brush-&gt;Color=f1;                                                      // Farbe HG festlegen
 ACanvas-&gt;FillRect(ARect);                                                      // HG befüllen

 if(z1==&quot;-&quot;) {                                                                  // TRENNSTRICH
  ARect.Top+=1; ARect.Bottom-=3;                                                // Strich dünner machen
  ACanvas-&gt;Brush-&gt;Color=clGray;                                                 // Farbe HG festlegen
  ACanvas-&gt;Font-&gt;Color =clWhite;                                                // Farbe VG festlegen
  ACanvas-&gt;FrameRect(ARect);                                                    // dünnen Balken zeichnen
  return;                                                                       // und fertig
 }                                                                              // ende if(z1

 f1=PrgFarbe;   if(State.Contains(odSelected)==true) { f1=clMenuHighlight; }    // HG Farbe
 f2=clMenuText; if(State.Contains(odDisabled)==true) { f2=clGrayText; }         // VG Farbe

 o1=false;                                                                      // Voreinstellung
 if(CurItem-&gt;Tag==9999) { ARect.Left-=20; ARect.Right+=25; ARect.Top+=1; o1=true; } // Hauptmenüthema (immer linksbündig schreiben da keine Symbole)

 iSymb=CurItem-&gt;ImageIndex;                                                     // Grafiksymbol?
 if(State.Contains(odChecked)==true) { iSymb=58; }                              // Eintrag hat vorne einen Haken

 if(Form1-&gt;PrgComp &amp;&amp; o1==false) { z1=z1+&quot; (iSymb: &quot;+IntToStr(iSymb)+&quot;)&quot;; }     // nur im IDE
 if(iSymb&gt;-1) {                                                                 // ja, vorhanden
  Graphics::TBitmap *bmp =new Graphics::TBitmap();                              // neue Grafik anlegen
  frm1_ImageList1-&gt;GetBitmap(iSymb,bmp);                                        // und aus Imageliste auslesen
  ACanvas-&gt;Draw(1,ARect.Top+1,bmp);                                             // und  zeichnen
  delete bmp;                                                                   // Bitmap löschen
 }                                                                              // ende if(iSymb

 ARect.Left+=25; ARect.Right-=25;                                               // Koords anpassen wegen Symbole
 ARect.Top+=2; ARect.Bottom-=2;                                                 // Text x Pixel tiefer setzen

 ACanvas-&gt;Brush-&gt;Color=f1;                                                      // Farbe HG festlegen
 ACanvas-&gt;Font-&gt;Color =f2;                                                      // Farbe VG festlegen

 z1=z1+&quot;  &quot;;                                                                    // damit Abstand zu ShortCuts grösser wird
 DrawText(ACanvas-&gt;Handle,z1.c_str(),-1,&amp;ARect,DT_LEFT  | DT_SINGLELINE);       // Menütext z.B. Beenden
 if(z2.Length()==0) { return; }                                                 // keine Tastenkombination mehr, fertig

 ARect.Right+=14;                                                               // mehr nach rechts rücken
 DrawText(ACanvas-&gt;Handle,z2.c_str(),-1,&amp;ARect,DT_RIGHT | DT_SINGLELINE);       // Tastenkombination z.B. Alt+F4

 } catch(Exception&amp; e) { MessageBox(NULL, e.Message.c_str(), &quot;TForm1::Datei1DrawItem()&quot;, MB_OK); }  // Fehler anzeigen
}
</code></pre>
<p>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273866</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Thu, 26 Apr 2007 11:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Thu, 26 Apr 2007 14:34:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Wozu gehört denn die Fläche rechts daneben?</p>
</blockquote>
<p>Die Menüleiste selbst wird von Windows gemalt (der sogenannte NonClient-Bereich (NC area)). Da müßtest du schon mit Windows-Messages dran, um diese komplett selbst zu zeichnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274038</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 26 Apr 2007 14:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Fri, 27 Apr 2007 06:29:29 GMT]]></title><description><![CDATA[<p>Hei, TH</p>
<p>habe jetzt eine einfache Lösung gefunden:<br />
Ein leeres Pseudomenü angehängt (nach Hilfe), den TAG auf 9998<br />
gesetzt und dies im OnDrawMenü angefangen; RECT.Right auf Screen-&gt;Width<br />
gesetzt, Menü Disabled und voila, funktioniert einwandfrei <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>Gruss Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274343</guid><dc:creator><![CDATA[Stefan71242]]></dc:creator><pubDate>Fri, 27 Apr 2007 06:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to TMainMenu im Canvas zeichnen (Kopfzeile) on Fri, 27 Apr 2007 10:58:18 GMT]]></title><description><![CDATA[<p>Na, geht doch <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/1274497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274497</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 27 Apr 2007 10:58:18 GMT</pubDate></item></channel></rss>