Dark mode

User avatar
Jimmy
Posts: 1740
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany
Has thanked: 2 times

Dark mode

Post by Jimmy »

hi,

is there a FW Sample using "Dark Mode" :?:

Image
greeting,
Jimmy
User avatar
joseluisysturiz
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Dark mode

Post by joseluisysturiz »

Sakudos, aiempre he querodps hacer mis sistemas asi, pero no conseguido como, gracias... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
Antonio Linares
Site Admin
Posts: 42602
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 43 times
Been thanked: 88 times
Contact:

Re: Dark mode

Post by Antonio Linares »

Jimmy,

If your app is going to use a RibbonBar here you have the source code to build a "dark" RibbonBar:

viewtopic.php?p=221683#p221683

Using these colors and applying them to your app you should get the desired "dark" app
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Jimmy
Posts: 1740
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany
Has thanked: 2 times

Re: Dark mode

Post by Jimmy »

hi,
joseluisysturiz wrote:Sakudos, aiempre he querodps hacer mis sistemas asi, pero no conseguido como, gracias... :shock:

when using Ownerdraw you can react on visual Style / Effekt and paint what you want.
Image
so the Question is does FW Controls support Ownerdraw :?:

---
do you remember Color under Windows XP ?
Image

Color of Apps depend on OS Theme which can be found in Registry under

Code: Select all | Expand

HKEY_CURRENT_USER\Control Panel\Colors


there are COLOR_ Constant to use it with GetSysColor() / SetSysColors() API

https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getsyscolor
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setsyscolors

using SetSysColors() will change Color for all Apps :!: but only as long as User is login.
after re-login OS load default so Registry is not change :!:
greeting,
Jimmy
User avatar
Jimmy
Posts: 1740
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany
Has thanked: 2 times

Re: Dark mode

Post by Jimmy »

hi,

i found this working Code
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=17578&p=91694&hilit=SETSYSCOLORS#p91694

Code: Select all | Expand

nRet := clrtest( CLR_YELLOW, CLR_HRED )

HB_FUNC( CLRTEST )
{
   int aElements[2] = { COLOR_CAPTIONTEXT, COLOR_SCROLLBAR };
   DWORD aColors[2];

   aColors[ 0 ] = hb_parnl( 1 );
   aColors[ 1 ] = hb_parnl( 2 );
   hb_retl (SetSysColors( 2, aElements, aColors ));
}


now i try this code with modify Function and it work

Code: Select all | Expand

nRet := SETSYSCOLORSEX({COLOR_SCROLLBAR}, CLR_HMAGENTA)
nRet := SETSYSCOLORSEX({COLOR_CAPTIONTEXT},CLR_HBLUE)

HB_FUNC( SETSYSCOLORSEX )
{
   int aElements[1];
   DWORD aColors[1];

   aElements[ 0 ] = hb_parnl( 1 );
   aColors[ 0 ]   = hb_parnl( 2 );
   hb_retl (SetSysColors( 1, aElements, aColors ));
}
 

but this function have only 2 Parameter and it start with Array.
what i like to have are 3 Parameter where 2nd and 3rd are test for "VALTYPE" = "C" or "A"

who can help me to write a new SETSYSCOLORSEX :?:

p.s. not sure if Answer is like this Thread http://forums.fivetechsupport.com/viewtopic.php?f=6&t=28506&p=159545
greeting,
Jimmy
User avatar
karinha
Posts: 7951
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Dark mode

Post by karinha »

Jimmy, any solution?


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Jimmy
Posts: 1740
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany
Has thanked: 2 times

Re: Dark mode

Post by Jimmy »

hi,

have to say that i still work with HMG ... still Newbie under harbour
most of my HMG Apps now have "DarkMode" but as HMG have no "OwnerDraw" i can not "paint" black all.
special "Background" like WM_CTLCOLORSTATIC need "more" Code to handle it

to "manipulate" those "System-Color" does work "System-wide" so some "other" App does not like Color (black on black) :(

---

i do have other Tool called "Codejock SkinFrameWork"
https://codejock.com/products/skinframework/?2yn6s14z=p1z
i bought it Years ago to "learn" about ActiveX but only SkinFrameWork is left (other i have re-write as native Control for Xbase++ )

SkinFrameWork can "load" a Theme "just" for "the" App
as it is for "only" that App it does not "hurt" other App and i can use "my" Color
greeting,
Jimmy
User avatar
karinha
Posts: 7951
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Dark mode

Post by karinha »

Thank you Jimmy.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
nageswaragunupudi
Posts: 10729
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 10 times
Contact:

Re: Dark mode

Post by nageswaragunupudi »

using SetSysColors() will change Color for all Apps :!: but only as long as User is login.

Only with Windows Versions prior to 10.

From Windows 10 onwards, the functions SetSysColors() may not be of much use.

For Windows 10, setting this registry entry

Code: Select all | Expand


HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme
 

to 0 sets dark theme ON. But this applies to UWP applications only and not to classic win32 applications. We can see the difference in applications like Explorer, Calculator, etc but not with Notepad, etc.

So,

We need to adopt 2 different approaches for OS upto Windows 8.1 and for OS Windows 10 and later. For older versions we can use SetSysColors()
For W10 and later, we still don't have clear answers.

Using FWH, we can draw most controls in Dark Mode using SetColor or ownerdraw but not all (Eg. Scrollbars, dialog/window borders, etc)
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 10729
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 10 times
Contact:

Re: Dark mode

Post by nageswaragunupudi »

Code: Select all | Expand

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SETSYSCOLORS ) // ( aItems, aColors ) --> lSuccess
{
   BOOL     bRet        = FALSE;
   int      iElements;
   INT      aElements[22];
   COLORREF aRgbValues[22];

   if ( ( iElements = hb_parinfa( 1, 0 ) ) == ( int ) hb_parinfa( 2, 0 ) )
   {
      int i;
      for ( i = 1; i <= iElements; i++ )
      {
         aElements [ i - 1 ]  = hb_parvni( 1, i );
         aRgbValues[ i - 1 ]  = hb_parvnl( 2, i );
         bRet  = SetSysColors( iElements, aElements, aRgbValues );
      }
   }
   hb_retl( bRet );
}

#pragma ENDDUMP
 


Testing the function:

Code: Select all | Expand

  ? SetSysColors( { COLOR_WINDOW, COLOR_WINDOWTEXT }, { CLR_BLACK, CLR_WHITE } )
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
karinha
Posts: 7951
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Dark mode

Post by karinha »

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=41065&sid=3ac19fbcf1d34a23eaf18df0660ae40e

// \samples\DARKMODE.PRG - En windows 7 32 bits, no funciona.

/*
In xHarbour, Error:

DARKMODE.c:
Warning W8065 DARKMODE.prg 59: Call to function 'hb_parvni' with no prototype in
function HB_FUN_SETSYSCOLORS
Warning W8065 DARKMODE.prg 60: Call to function 'hb_parvnl' with no prototype in
function HB_FUN_SETSYSCOLORS
*/

Code: Select all | Expand


#Include "FiveWin.ch"

#Define COLOR_WINDOW     nRGB( 130, 130, 130 )
#Define COLOR_WINDOWTEXT nRGB( 130, 130, 130 )

STATIC oWnd

FUNCTION Main()

   // RETORNA: .T. => TRUE.
   // ? SetSysColors( { COLOR_WINDOW, COLOR_WINDOWTEXT }, { CLR_BLACK, CLR_WHITE } )

   LOCAL oBar, cTitle, nRet

                                                       // AQUI:
   cTitle := "RODRIGUES & AMORIM MECANICA LTDA TESTE"  // WHITE NO FUNCIONA.

   DEFINE WINDOW oWnd TITLE cTitle COLORS CLR_WHITE, CLR_WHITE

   DEFINE BUTTONBAR oBar _3D OF oWnd

   DEFINE BUTTON OF oBar ACTION( Finaliza() )

   SET MESSAGE OF oWnd TO cTitle NOINSET CLOCK DATE KEYBOARD

   // SetSysColors - Harbour Compila, mas NO FUNCIONA Master Nages.
   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( SetSysColors( { COLOR_WINDOW, COLOR_WINDOWTEXT }, ;
                             { CLR_WHITE, CLR_WHITE } ) )

RETURN NIL

FUNCTION Finaliza()

   oWnd:End()

RETURN NIL

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SETSYSCOLORS ) // ( aItems, aColors ) --> lSuccess
{
   BOOL     bRet        = FALSE;
   int      iElements;
   INT      aElements[22];
   COLORREF aRgbValues[22];

   if ( ( iElements = hb_parinfa( 1, 0 ) ) == ( int ) hb_parinfa( 2, 0 ) )
   {
      int i;
      for ( i = 1; i <= iElements; i++ )
      {
         aElements [ i - 1 ]  = hb_parvni( 1, i );
         aRgbValues[ i - 1 ]  = hb_parvnl( 2, i );
         bRet  = SetSysColors( iElements, aElements, aRgbValues );
      }
   }
   hb_retl( bRet );
}

#pragma ENDDUMP

// FIN / END
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
nageswaragunupudi
Posts: 10729
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 10 times
Contact:

Re: Dark mode

Post by nageswaragunupudi »

karinha wrote:http://forums.fivetechsupport.com/viewtopic.php?f=6&t=41065&sid=54ad898a54718ceb4499289b28c0db17

// \samples\DARKMODE.PRG - En windows 7 32 bits, no funciona.

/*
In xHarbour, Error:

DARKMODE.c:
Warning W8065 DARKMODE.prg 59: Call to function 'hb_parvni' with no prototype in
function HB_FUN_SETSYSCOLORS
Warning W8065 DARKMODE.prg 60: Call to function 'hb_parvnl' with no prototype in
function HB_FUN_SETSYSCOLORS
*/

Code: Select all | Expand


#Include "FiveWin.ch"

#Define COLOR_WINDOW     nRGB( 130, 130, 130 )
#Define COLOR_WINDOWTEXT nRGB( 130, 130, 130 )

STATIC oWnd

FUNCTION Main()

   // RETORNA: .T. => TRUE.
   // ? SetSysColors( { COLOR_WINDOW, COLOR_WINDOWTEXT }, { CLR_BLACK, CLR_WHITE } )

   LOCAL oBar, cTitle, nRet

                                                       // AQUI:
   cTitle := "RODRIGUES & AMORIM MECANICA LTDA TESTE"  // WHITE NO FUNCIONA.

   DEFINE WINDOW oWnd TITLE cTitle COLORS CLR_WHITE, CLR_WHITE

   DEFINE BUTTONBAR oBar _3D OF oWnd

   DEFINE BUTTON OF oBar ACTION( Finaliza() )

   SET MESSAGE OF oWnd TO cTitle NOINSET CLOCK DATE KEYBOARD

   // SetSysColors - Harbour Compila, mas NO FUNCIONA Master Nages.
   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( SetSysColors( { COLOR_WINDOW, COLOR_WINDOWTEXT }, ;
                             { CLR_WHITE, CLR_WHITE } ) )

RETURN NIL

FUNCTION Finaliza()

   oWnd:End()

RETURN NIL

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SETSYSCOLORS ) // ( aItems, aColors ) --> lSuccess
{
   BOOL     bRet        = FALSE;
   int      iElements;
   INT      aElements[22];
   COLORREF aRgbValues[22];

   if ( ( iElements = hb_parinfa( 1, 0 ) ) == ( int ) hb_parinfa( 2, 0 ) )
   {
      int i;
      for ( i = 1; i <= iElements; i++ )
      {
         aElements [ i - 1 ]  = hb_parvni( 1, i );
         aRgbValues[ i - 1 ]  = hb_parvnl( 2, i );
         bRet  = SetSysColors( iElements, aElements, aRgbValues );
      }
   }
   hb_retl( bRet );
}

#pragma ENDDUMP

// FIN / END
 


Regards, saludos.

For xHarbour change hb_parvni as hb_parni and hb_parvnl as hb_parnl
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 10729
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 10 times
Contact:

Re: Dark mode

Post by nageswaragunupudi »

This function is included in the next version of FWH
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 10729
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 10 times
Contact:

Re: Dark mode

Post by nageswaragunupudi »

Supported by All Versions of Windows

Code: Select all | Expand

COLOR_BTNFACE                15
COLOR_BTNTEXT                18
COLOR_GRAYTEXT               17  // disabled text
COLOR_HIGHLIGHT              13
COLOR_WINDOW                  5  // window background
COLOR_WINDOWTEXT              8  // window text
 


NOT SUPPORTED BY WINDOWS 10 AND LATER.
Some are not supported even on Windows 2000

Code: Select all | Expand

COLOR_SCROLLBAR               0
COLOR_BACKGROUND              1
COLOR_ACTIVECAPTION           2
COLOR_INACTIVECAPTION         3
COLOR_MENU                    4
COLOR_WINDOWFRAME             6
COLOR_MENUTEXT                7
COLOR_CAPTIONTEXT             9
COLOR_ACTIVEBORDER           10
COLOR_INACTIVEBORDER         11
COLOR_APPWORKSPACE           12  // desktop
COLOR_HIGHLIGHTTEXT          14
COLOR_BTNSHADOW              16
COLOR_INACTIVECAPTIONTEXT    19
COLOR_BTNHIGHLIGHT           20
COLOR_3DDKSHADOW             21
COLOR_3DLIGHT                22
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
karinha
Posts: 7951
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Dark mode

Post by karinha »

Mister Nages, perfect! The window goes all black. Now I need to Change the WINDOW TITLE COLOR. Where it is written:

"RODRIGUES & AMORIM MECANICA LTDA".

Also check that when it is an MDI Window, it is not BLACK but OPAQUE. Excellent work, you are on the right path. Thanks.

Code: Select all | Expand


// \samples\DARKMODE.PRG - 16/11/2021 - Joao.

#Include "FiveWin.ch"

#Define COLOR_BTNFACE                15
#Define COLOR_BTNTEXT                18
#Define COLOR_GRAYTEXT               17  // disabled text
#Define COLOR_HIGHLIGHT              13
#Define COLOR_WINDOW                  5  // window background
#Define COLOR_WINDOWTEXT              8  // window text

STATIC oWnd

FUNCTION Main()

   LOCAL oBar, cTitle, nRet

   cTitle := "RODRIGUES & AMORIM MECANICA LTDA"  // WHITE NO FUNCIONA.

   DEFINE WINDOW oWnd TITLE cTitle // MDI ?? NO FUNCIONA NORMAL.

   DEFINE BUTTONBAR oBar _3D OF oWnd

   DEFINE BUTTON OF oBar ACTION( Finaliza() )

   SET MESSAGE OF oWnd TO cTitle NOINSET CLOCK DATE KEYBOARD

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( SetSysColors( { COLOR_WINDOWTEXT, COLOR_WINDOW  }, ;
                             { CLR_BLACK, CLR_BLACK } ) )

RETURN NIL

FUNCTION Finaliza()

   oWnd:End()

RETURN NIL

#IFDEF __XHARBOUR__  // Modificado em: 16/11/2021 - Joao

// if xHarbour -> Nages:
// For xHarbour change hb_parvni as hb_parni and hb_parvnl as hb_parnl

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SETSYSCOLORS ) // ( aItems, aColors ) --> lSuccess
{
   BOOL     bRet        = FALSE;
   int      iElements;
   INT      aElements[22];
   COLORREF aRgbValues[22];

   if ( ( iElements = hb_parinfa( 1, 0 ) ) == ( int ) hb_parinfa( 2, 0 ) )
   {
      int i;
      for ( i = 1; i <= iElements; i++ )
      {
         aElements [ i - 1 ]  = hb_parni( 1, i );
         aRgbValues[ i - 1 ]  = hb_parnl( 2, i );
         bRet  = SetSysColors( iElements, aElements, aRgbValues );
      }
   }
   hb_retl( bRet );
}

#pragma ENDDUMP

#ELSE

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

// if harbour
HB_FUNC( SETSYSCOLORS ) // ( aItems, aColors ) --> lSuccess
{
   BOOL     bRet        = FALSE;
   int      iElements;
   INT      aElements[22];
   COLORREF aRgbValues[22];

   if ( ( iElements = hb_parinfa( 1, 0 ) ) == ( int ) hb_parinfa( 2, 0 ) )
   {
      int i;
      for ( i = 1; i <= iElements; i++ )
      {
         aElements [ i - 1 ]  = hb_parvni( 1, i );
         aRgbValues[ i - 1 ]  = hb_parvnl( 2, i );
         bRet  = SetSysColors( iElements, aElements, aRgbValues );
      }
   }
   hb_retl( bRet );
}

#pragma ENDDUMP

#ENDIF

// FIN / END
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Post Reply