<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Lazarus Pascal - Big Sur - TrayIcon color fix - Delphi, Lazarus, Free Pascal				            </title>
            <link>https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/lazarus-pascal-big-sur-trayicon-color-fix/</link>
            <description>Tweaking4All.nl Discussie Forum</description>
            <language>nl-NL</language>
            <lastBuildDate>Mon, 10 Aug 2026 10:58:03 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>RE: Lazarus Pascal - Big Sur - TrayIcon color fix</title>
                        <link>https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/lazarus-pascal-big-sur-trayicon-color-fix/#post-1265</link>
                        <pubDate>Tue, 24 Nov 2020 12:06:26 +0000</pubDate>
                        <description><![CDATA[Al dit in een generieke functie:
B.B.: deze functie gebruikt ExtCtrls (voor TTrayIcon) en CocoaGDIObjects (voor TCocoaBitmap) 
procedure FixTrayIconColors(aTrayIcon: TTrayIcon);
{$IFDEF D...]]></description>
                        <content:encoded><![CDATA[<p>Al dit in een generieke functie:</p>
<p>B.B.: deze functie gebruikt <strong>ExtCtrls</strong> (voor TTrayIcon) en <strong>CocoaGDIObjects</strong> (voor TCocoaBitmap) </p>
<pre>procedure FixTrayIconColors(aTrayIcon: TTrayIcon);
<span style="color: #ff0000">{$IFDEF DARWIN}</span>
var
  image: NSImage;
<span style="color: #ff0000">{$ENDIF}</span>
begin
  <span style="color: #ff0000">{$IFDEF DARWIN}</span>
    if Assigned(aTrayIcon.Icon) then
      begin
        image := TCocoaBitmap(aTrayIcon.icon.Handle).image;
        image.setTemplate(true);
        aTrayIcon.InternalUpdate;
      end;
  <span style="color: #ff0000">{$ENDIF}</span>
end;         </pre>]]></content:encoded>
						                            <category domain="https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/">Delphi, Lazarus, Free Pascal</category>                        <dc:creator>Hans</dc:creator>
                        <guid isPermaLink="true">https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/lazarus-pascal-big-sur-trayicon-color-fix/#post-1265</guid>
                    </item>
				                    <item>
                        <title>Lazarus Pascal - Big Sur - TrayIcon color fix</title>
                        <link>https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/lazarus-pascal-big-sur-trayicon-color-fix/#post-1258</link>
                        <pubDate>Sun, 22 Nov 2020 15:48:21 +0000</pubDate>
                        <description><![CDATA[Met Big Sur, kunnen we niet meer met zekerheid bepalen welke kleur we onze Trayicons moeten geven in de systeem mebubar.Helaas is nu de menubalk standaard transparant, en heeft de opmaak en ...]]></description>
                        <content:encoded><![CDATA[<p>Met <strong>Big Sur</strong>, kunnen we niet meer met zekerheid bepalen welke kleur we onze Trayicons moeten geven in de systeem mebubar.<br />Helaas is nu de menubalk standaard transparant, en heeft de opmaak en kleur van wallpaper een grote invloed op hoe donker of hoe licht de achtergrondkleur van de balk gaat zijn. Simpel bepalen of het nu Dark of Light theme is, is niet meer genoeg.</p>
<p>Na lang zoeken vond ik dat de image van een Coca trayicon (<strong>NSStatusItem</strong>?) optineel op op automatisch kan worden gezxet met de <strong>setTemplate</strong> functie. Als je dit doet, dan bepaald macOS automatisch de kleur voor de Trayicon - mits je een transparante icon hebt met alleen maar zwarte pixels.</p>
<p>In Lazarus kunnen we dit snel doen door het volgende bestand aan te passen:</p>
<pre>lazarus/lcl/interfaces/cocoa/cocoatrayicon.inc </pre>
<p>Hier moeten we de image op "template"=true zetten.</p>
<p>In <strong>cocoatrayicon.inc</strong> heb ik de volgende regel aan de <strong>lclSetTrayIcon</strong> procedure toegevoegd om dit te bewerkstelligen:</p>
<pre>image.setTemplate(true);</pre>
<p>Ik heb deze regel in het (ATrayIcon.icon &lt;&gt; nil) blok gezet (regel 11):</p>
<pre>procedure TCocoaStatusItemHandle.lclSetTrayIcon(ATrayIcon: TCustomTrayIcon);
var
  image: NSImage;
begin
  TrayIcon := ATrayIcon;
 
  // Shows the icon 
  if (ATrayIcon.icon &lt;&gt; nil) and (ATrayIcon.icon.Handle &lt;&gt; 0) then
  begin
    image := TCocoaBitmap(ATrayIcon.icon.Handle).image;
<strong><span style="color: #ff0000">    image.setTemplate(true); // &lt; --- added this line</span></strong>
    if image &lt;&gt; nil then statusitem.setImage(image);
  end;
 
  // Show the menu
  if (ATrayIcon.PopUpMenu &lt;&gt; nil) then
  begin
    ATrayIcon.PopUpMenu.HandleNeeded();
    //ATrayIcon.PopUpMenu.
    if Assigned(statusitem.menu) and (statusitem.menu.delegate = NSMenuDelegateProtocol(self)) then
      statusitem.menu.setDelegate(nil);
 
    statusitem.setMenu(TCocoaMenu(ATrayIcon.PopUpMenu.Handle));
 
    TCocoaMenu(ATrayIcon.PopUpMenu.Handle).setDelegate( self);
  end;
end;</pre>
<p>Did werk geweldig goed, alleen moet je nu wel opletten met icons die meerdere kleuren gebruiken omdat het automatisch omzetten van de kleuren niet altijd even goed gaat. Alleen transparante icons met zwarte pixels werkt uitstekend.</p>]]></content:encoded>
						                            <category domain="https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/">Delphi, Lazarus, Free Pascal</category>                        <dc:creator>Hans</dc:creator>
                        <guid isPermaLink="true">https://www.tweaking4all.nl/forum/delphi-lazarus-free-pascal/lazarus-pascal-big-sur-trayicon-color-fix/#post-1258</guid>
                    </item>
							        </channel>
        </rss>
		