Difference between revisions of "User:Miha"

From Free Pascal wiki
Jump to navigationJump to search
Line 7: Line 7:
 
    
 
    
 
   uses
 
   uses
     msegraphics  
+
     msegraphics, msebits
     {$ifdef mswindows},windows{$endif};
+
     {$ifdef mswindows},windows{$endif}
 +
    {$ifdef linux},msestat,strutils,sysutils,classes{$endif};
 
    
 
    
     procedure InitColorMapFromOS;
+
     procedure SetDesktopSkin;
 
    
 
    
 
   implementation
 
   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 InitColorMapFromOS;
+
   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
 
   begin
 
     {$ifdef mswindows}
 
     {$ifdef mswindows}
Line 30: Line 64:
 
     SetColorMapValue(cl_selectedtextbackground, swaprgb(GetSysColor(COLOR_HIGHLIGHT)));
 
     SetColorMapValue(cl_selectedtextbackground, swaprgb(GetSysColor(COLOR_HIGHLIGHT)));
 
     SetColorMapValue(cl_infobackground, swaprgb(GetSysColor(COLOR_INFOBK)));
 
     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), StrToIntDef(sl[2], 0));
 +
            RegisterFontAlias('stf_menu', sl[0], fam_overwrite,
 +
              StrToIntDef(sl[1], 16), StrToIntDef(sl[2], 0));
 +
          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}
 
     {$endif}
 
   end;
 
   end;
 
    
 
    
   end.
+
   en

Revision as of 20:04, 26 February 2007

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), StrToIntDef(sl[2], 0));
           RegisterFontAlias('stf_menu', sl[0], fam_overwrite,
             StrToIntDef(sl[1], 16), StrToIntDef(sl[2], 0));
         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;
 
 en