User:Miha

From Free Pascal wiki

Example of using msegraphics.setcolormapvalue

 unit GuiStyle;
 {$ifdef FPC}{$mode objfpc}{$h+}{$INTERFACES CORBA}{$endif}
 
 interface
 
 uses
   msegraphics, msebits 
   {$ifdef mswindows},windows{$endif}
   {$ifdef linux},msestat,strutils,sysutils,classes{$endif};
 
   procedure SetDesktopSkin;
 
 implementation
 {$ifdef linux}
 const
   QT_COLOR_BACKGROUND = 1;
   QT_COLOR_HILIGHT = 2;
   QT_COLOR_LIGHT = 3;
   QT_COLOR_DKSHADOW = 4;
   QT_COLOR_SHADOW = 5;
   QT_COLOR_TEXT = 6;
   QT_COLOR_BTNTEXT = 8;
   QT_COLOR_FOREGROUND = 9;
   QT_COLOR_INFOBG = 10;
   QT_COLOR_SELBACKGROUND = 12;
   QT_COLOR_SELECTEDTEXT = 13;
   QT_COLOR_GRAYTEXT = 24;
 {$endif}
 
 procedure SetDesktopSkin;
 {$ifdef linux}
 var
   sr: tstatreader;
   s: string;
   sl: TStringList;
   I, int1: Integer;
   clrs: colorarty;
   
   function StaStringToInt(Str: String): Integer;
   begin
     Result := 0;
     try
       Result := Hex2Dec(AnsiReplaceStr(Str, '#', ));
     except
     end;
   end;
   
 {$endif}
 begin
   {$ifdef mswindows}
   SetColorMapValue(cl_dkshadow, swaprgb(GetSysColor(COLOR_3DDKSHADOW)));
   SetColorMapValue(cl_shadow, swaprgb(GetSysColor(COLOR_3DSHADOW)));
   SetColorMapValue(cl_mid, swaprgb(GetSysColor(COLOR_BTNTEXT)));
   SetColorMapValue(cl_light, swaprgb(GetSysColor(COLOR_3DLIGHT)));
   SetColorMapValue(cl_highlight, swaprgb(GetSysColor(COLOR_3DHILIGHT)));
   SetColorMapValue(cl_background, swaprgb(GetSysColor(COLOR_BTNFACE)));
   SetColorMapValue(cl_foreground, swaprgb(GetSysColor(COLOR_WINDOW)));
   SetColorMapValue(cl_active, swaprgb(GetSysColor(COLOR_HIGHLIGHT)));
   SetColorMapValue(cl_noedit, swaprgb(GetSysColor(COLOR_GRAYTEXT)));
   SetColorMapValue(cl_text, swaprgb(GetSysColor(COLOR_WINDOWTEXT)));
   SetColorMapValue(cl_selectedtext, swaprgb(GetSysColor(COLOR_HIGHLIGHTTEXT)));
   SetColorMapValue(cl_selectedtextbackground, swaprgb(GetSysColor(COLOR_HIGHLIGHT)));
   SetColorMapValue(cl_infobackground, swaprgb(GetSysColor(COLOR_INFOBK)));
   {$else}
   try
     sr := tstatreader.create('~/.qt/qtrc');
     sl := TStringList.Create;
     try
       if sr.FindSection('General') then
       begin
         s := sr.ReadString('font', s);
         sl.Text := AnsiReplaceStr(s, ',', #13);
         if sl.Count > 2 then
         begin
           RegisterFontAlias('stf_default', sl[0], fam_overwrite,
             StrToIntDef(sl[1], 16));
           RegisterFontAlias('stf_menu', sl[0], fam_overwrite,
             StrToIntDef(sl[1], 16));
         end;
       end;
       if sr.FindSection('Palette') then
       begin
         s := sr.ReadString('active', s);
         sl.Text := AnsiReplaceStr(AnsiReplaceStr(s, '#', ), '^e', #13);
         SetLength(clrs, sl.Count * 2);
         for I := 0 to sl.count - 1 do
           clrs[I] := StaStringToInt(sl[I]);
         int1 := sl.Count;
         s := sr.ReadString('disabled', s);
         sl.Text := AnsiReplaceStr(AnsiReplaceStr(s, '#', ), '^e', #13);
         for I := 0 to sl.count - 1 do
           clrs[I + int1] := StaStringToInt(sl[I]);
         SetColorMapValue(cl_dkshadow, clrs[QT_COLOR_DKSHADOW]);
         SetColorMapValue(cl_shadow, clrs[QT_COLOR_SHADOW]);
         SetColorMapValue(cl_mid, clrs[QT_COLOR_BTNTEXT]);
         SetColorMapValue(cl_highlight, clrs[QT_COLOR_HILIGHT]);
         SetColorMapValue(cl_light, clrs[QT_COLOR_LIGHT]);
         SetColorMapValue(cl_background, clrs[QT_COLOR_BACKGROUND]);
         SetColorMapValue(cl_foreground, clrs[QT_COLOR_FOREGROUND]);
         SetColorMapValue(cl_active, clrs[QT_COLOR_HILIGHT]);
         SetColorMapValue(cl_noedit, clrs[QT_COLOR_GRAYTEXT]);
         SetColorMapValue(cl_text, clrs[QT_COLOR_TEXT]);
         SetColorMapValue(cl_selectedtext, clrs[QT_COLOR_SELECTEDTEXT]);
         SetColorMapValue(cl_selectedtextbackground, clrs[QT_COLOR_SELBACKGROUND]);
         SetColorMapValue(cl_infobackground, clrs[QT_COLOR_INFOBG]);
       end;
     finally
       sl.Free;
       sr.Free;
     end;
   except
   end;
   {$endif}
 end;
 
 end.