colorize btnbmp with diagonal

Post Reply
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

colorize btnbmp with diagonal

Post by Silvio.Falconi »

I tried a test I found on this forum

Image

Code: Select all | Expand

 
#include "fivewin.ch"

// colorize btnbmp with diagonal

Function test()
local oDlg
local oBtn
local lmenu:=.f.

DEFINE DIALOG oDlg SIZE 400,400

@  10, 10 BTNBMP    oBtn  SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND  ; //
        RESOURCE "GRID_DWN_REC", "", LinesBmp(oBtn,50,50), "" ;
     ACTION NIL WHEN lmenu
        obtn:nClrBorder := RGB(195,195,185)

 @  70, 10 BTNBMP    oBtn  SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND  ; //
        RESOURCE "GRID_DWN_REC", "", LinesBmp(oBtn,50,90), "" ;
     ACTION NIL WHEN lmenu
        obtn:nClrBorder := RGB(195,195,185)
ACTIVATE DIALOG oDlg
RETURN NIL
//---------------------------------------------------------//

Function LinesBmp(oControl,n1,n2)
   local hBmp, oBrush
   DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR  Rgb(195,195,185)
   hBmp  := FW_MakeYourBitmap( n1,n2, <|hDC,w,h|
     FillRect( hDC, { 0,0,h,w }, oBrush:hBrush )
            return nil
            > )
            RELEASE BRUSH oBrush
    return hBm
I wish have all the area of button with diagonal
so how I must make to have it ?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: colorize btnbmp with diagonal

Post by karinha »

Algo asi?

https://imgur.com/7TrVjPp

Image

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: colorize btnbmp with diagonal

Post by Silvio.Falconi »

Yes
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: colorize btnbmp with diagonal

Post by karinha »

Listo:

Code: Select all | Expand

// C:\FWH\SAMPLES\SILVDIAG.PRG

#include "fivewin.ch"

// colorize btnbmp with diagonal

FUNCTION test()

   local oBtn, hBmp := LinesBmp()
   LOCAL oDlg, oBtn1, oBtn2, lMenu := .T., cTitle

   LOCAL nLarg1 := 095 // Largura
   LOCAL nAlt1  := 095 // altura

   LOCAL nLarg2 := 095 // Largura
   LOCAL nAlt2  := 170 // altura

   cTitle := "Colorize BTNBMP con DIAGONAL"

   DEFINE DIALOG oDlg SIZE 400, 400 TITLE cTitle TRANSPARENT

   oDlg:lHelpIcon := .F.

   @  10, 10 BTNBMP oBtn1 SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND   ;
      RESOURCE "PREV", "", LinesBmp( oBtn1, nLarg1, nAlt1 ), "" ;
      ACTION NIL WHEN lMenu

   oBtn1:nClrBorder := RGB( 195, 195, 185 )

   @  70, 10 BTNBMP oBtn2 SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND   ;
      RESOURCE "EXIT", "", LinesBmp( oBtn2, nLarg2, nAlt2 ), "" ;
      ACTION NIL WHEN lMenu

   oBtn2:nClrBorder := RGB( 195, 195, 185 )

   @ 150, 80 CHECKBOX lMenu PROMPT "Enabled" SIZE 80, 20 PIXEL OF oDlg

   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

FUNCTION LinesBmp( oControl, nDiag1, nDiag2 )

   LOCAL hBmp, oBrush

   // DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR Rgb( 195, 195, 185 )

   // test:
   DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR nRGB( 000, 100, 255 ) // nRGB( 255, 000, 035 )

   hBmp := FW_MakeYourBitmap( nDiag1, nDiag2, < | hDC, w, h |
      FillRect( hDC, { 0, 0, h, w }, oBrush:hBrush )
      RETURN NIL
      > )

   RELEASE BRUSH oBrush

RETURN( hBmp )

/* // SILVDIAG.RC
ico  ICON ".\.\..\ICONS\fivewin.ico"

#ifndef __64__
  1 24 "WinXP\WindowsXP.Manifest"
#endif

#ifdef __64__
  1 24 "WinXP\WindowsXP.Manifest64"
#endif

new      BITMAP .\..\bitmaps\32x32\new.bmp
open     BITMAP .\..\bitmaps\32x32\open.bmp
copy     BITMAP .\..\bitmaps\32x32\copy.bmp
prev     BITMAP .\..\bitmaps\32x32\previous.bmp
next     BITMAP .\..\bitmaps\32x32\next.bmp
exit     BITMAP .\..\bitmaps\32x32\exit.bmp
*/

// FIN / END
 
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: colorize btnbmp with diagonal

Post by Silvio.Falconi »

karinha wrote:Listo:

Code: Select all | Expand

// C:\FWH\SAMPLES\SILVDIAG.PRG

#include "fivewin.ch"

// colorize btnbmp with diagonal

FUNCTION test()

   local oBtn, hBmp := LinesBmp()
   LOCAL oDlg, oBtn1, oBtn2, lMenu := .T., cTitle

   LOCAL nLarg1 := 095 // Largura
   LOCAL nAlt1  := 095 // altura

   LOCAL nLarg2 := 095 // Largura
   LOCAL nAlt2  := 170 // altura

   cTitle := "Colorize BTNBMP con DIAGONAL"

   DEFINE DIALOG oDlg SIZE 400, 400 TITLE cTitle TRANSPARENT

   oDlg:lHelpIcon := .F.

   @  10, 10 BTNBMP oBtn1 SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND   ;
      RESOURCE "PREV", "", LinesBmp( oBtn1, nLarg1, nAlt1 ), "" ;
      ACTION NIL WHEN lMenu

   oBtn1:nClrBorder := RGB( 195, 195, 185 )

   @  70, 10 BTNBMP oBtn2 SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND   ;
      RESOURCE "EXIT", "", LinesBmp( oBtn2, nLarg2, nAlt2 ), "" ;
      ACTION NIL WHEN lMenu

   oBtn2:nClrBorder := RGB( 195, 195, 185 )

   @ 150, 80 CHECKBOX lMenu PROMPT "Enabled" SIZE 80, 20 PIXEL OF oDlg

   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

FUNCTION LinesBmp( oControl, nDiag1, nDiag2 )

   LOCAL hBmp, oBrush

   // DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR Rgb( 195, 195, 185 )

   // test:
   DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR nRGB( 000, 100, 255 ) // nRGB( 255, 000, 035 )

   hBmp := FW_MakeYourBitmap( nDiag1, nDiag2, < | hDC, w, h |
      FillRect( hDC, { 0, 0, h, w }, oBrush:hBrush )
      RETURN NIL
      > )

   RELEASE BRUSH oBrush

RETURN( hBmp )

/* // SILVDIAG.RC
ico  ICON ".\.\..\ICONS\fivewin.ico"

#ifndef __64__
  1 24 "WinXP\WindowsXP.Manifest"
#endif

#ifdef __64__
  1 24 "WinXP\WindowsXP.Manifest64"
#endif

new      BITMAP .\..\bitmaps\32x32\new.bmp
open     BITMAP .\..\bitmaps\32x32\open.bmp
copy     BITMAP .\..\bitmaps\32x32\copy.bmp
prev     BITMAP .\..\bitmaps\32x32\previous.bmp
next     BITMAP .\..\bitmaps\32x32\next.bmp
exit     BITMAP .\..\bitmaps\32x32\exit.bmp
*/

// FIN / END
 
Regards, saludos.
certainly darling, but I wanted it automatically, I didn't want to insert the width and height of each button, if in a window I have 80 buttons all with different sizes, how many lines of source do you think I should write?

ciertamente cariño, pero lo quería automáticamente, no quería insertar el ancho y alto de cada botón, si en una ventana tengo 80 botones todos con diferentes tamaños, ¿cuántas líneas de fuente crees que debería escribir?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: colorize btnbmp with diagonal

Post by karinha »

Teste e comente:

Code: Select all | Expand

// C:\FWH\SAMPLES\SILVDIAG.PRG - VERSION: 1.2 by Kapiaba.

#Include "FiveWin.ch"

STATIC oChkSil

// colorize btnbmp with diagonal

FUNCTION test()

   LOCAL oBtn, hBmp := LinesBmp(), oFont, cVersion := "Version: 1.2"
   LOCAL oDlg, oBtn1, oBtn2, oBtn3, oBtn4, oBtn5, oBtn6, oBtn7,              ;
         lMenu := .T., cTitle, oSalida

   LOCAL nLarg  := 095 // Largura
   LOCAL nAlt   := 095 // altura

   SET _3DLOOK ON

   SkinButtons()

   cTitle := "Colorize BTNBMP con DIAGONAL - " + cVersion

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 14

   DEFINE DIALOG oDlg SIZE 400, 450 TITLE cTitle TRANSPARENT FONT oFont

   oDlg:lHelpIcon := .F.

   @  10, 10 BTNBMP oBtn1 SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND  ;
      RESOURCE "PREV", "", LinesBmp( oBtn1, nLarg, nAlt ), ""          ;
      ACTION NIL WHEN lMenu

   oBtn1:nClrBorder := RGB( 195, 195, 185 )

   // nLarg := nLarg +...
   nAlt := nAlt + 75

   @  70, 10 BTNBMP oBtn2 SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND  ;
      RESOURCE "NEXT", "", LinesBmp( oBtn2, nLarg, nAlt ), ""          ;
      ACTION NIL WHEN lMenu

   oBtn2:nClrBorder := RGB( 195, 195, 185 )

   // nLarg := nLarg +...
   nAlt := nAlt - 75

   @  10, 70 BTNBMP oBtn3 SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND  ;
      RESOURCE "PREV", "", LinesBmp( oBtn3, nLarg, nAlt ), ""          ;
      ACTION NIL WHEN lMenu

   oBtn3:nClrBorder := RGB( 195, 195, 185 )

   // nLarg := nLarg +...
   nAlt := nAlt + 75

   @  70, 70 BTNBMP oBtn4 SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND  ;
      RESOURCE "NEXT", "", LinesBmp( oBtn4, nLarg, nAlt ), ""          ;
      ACTION NIL WHEN lMenu

   oBtn4:nClrBorder := RGB( 195, 195, 185 )

   // nLarg := nLarg +...
   nAlt := nAlt - 75

   @  10, 130 BTNBMP oBtn5 SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND ;
      RESOURCE "PREV", "", LinesBmp( oBtn5, nLarg, nAlt ), ""          ;
      ACTION NIL WHEN lMenu

   oBtn5:nClrBorder := RGB( 195, 195, 185 )

   // nLarg := nLarg +-...
   nAlt := nAlt + 75

   @  70, 130 BTNBMP oBtn4 SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND ;
      RESOURCE "NEXT", "", LinesBmp( oBtn4, nLarg, nAlt ), ""          ;
      ACTION NIL WHEN lMenu

   oBtn4:nClrBorder := RGB( 195, 195, 185 )

   @ 160, 80 CHECKBOX oChkSil VAR lMenu PROMPT "Enabled" SIZE 80, 14 PIXEL ;
      OF oDlg UPDATE // Cambiar color en el ON INIT.

   @ 165, 10 SAY "I Love FiveWin" OF oDlg SIZE 100, 12 PIXEL FONT oFont    ;
      COLORS METRO_PINK, CLR_WHITE TRANSPARENT UPDATE

   @ 185, 10 SAY "kapiabafwh@gmail.com" OF oDlg SIZE 120, 12 PIXEL         ;
      FONT oFont COLORS METRO_VIOLET, CLR_WHITE TRANSPARENT UPDATE

   @ 205, 010 BUTTON oSalida PROMPT "&Exit" SIZE 30, 12 PIXEL OF oDlg      ;
      ACTION( oDlg:End() ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED  ;
      ON INIT CTRLS_COLORS( oDlg ) // Color in CheckBox

   oFont:End()

RETURN NIL

FUNCTION LinesBmp( oControl, nDiag1, nDiag2 )

   LOCAL hBmp, oBrush

   DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR nRGB( 000, 100, 255 ) // nRGB( 255, 000, 035 )

   hBmp := FW_MakeYourBitmap( nDiag1, nDiag2, < | hDC, w, h |
      FillRect( hDC, { 0, 0, h, w }, oBrush:hBrush )
      RETURN NIL
      > )

   RELEASE BRUSH oBrush

RETURN( hBmp )
// By Giovanny Vecchi
FUNCTION CTRLS_COLORS( f_oDlgContainer )

   LOCAL lc_aCtrls := {}, lc_iFor := 0
   LOCAL lc_aItemsRadio := {}

   lc_aCtrls := f_oDlgContainer:aControls

   FOR lc_iFor := 1 TO Len( lc_aCtrls )

      IF ValType( lc_aCtrls[lc_iFor] ) == "O"

         IF lc_aCtrls[lc_iFor]:ClassName() == "TRADIO"

            aEval( lc_aCtrls[lc_iFor]:oRadMenu:aItems,                 ;
                   {|_oRadId|{ SetWindowTheme( _oRadId:hWnd, "", "" ), ;
                   _oRadId:SetColor( CLR_CYAN, CLR_WHITE ) } } )
                    
         ELSEIF lc_aCtrls[lc_iFor]:ClassName() == "TCHECKBOX"

            SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

            lc_aCtrls[lc_iFor]:SetColor( METRO_ORANGE, CLR_WHITE )

         ENDIF

      ENDIF

   NEXT

RETURN NIL

/* // SILVDIAG.RC
ico  ICON ".\.\..\ICONS\fivewin.ico"

#ifndef __64__
  1 24 "WinXP\WindowsXP.Manifest"
#endif

#ifdef __64__
  1 24 "WinXP\WindowsXP.Manifest64"
#endif

new      BITMAP .\..\bitmaps\32x32\new.bmp
open     BITMAP .\..\bitmaps\32x32\open.bmp
copy     BITMAP .\..\bitmaps\32x32\copy.bmp
prev     BITMAP .\..\bitmaps\32x32\previous.bmp
next     BITMAP .\..\bitmaps\32x32\next.bmp
exit     BITMAP .\..\bitmaps\32x32\exit.bmp
*/

// FIN / END - kapiabafwh@gmail.com
 
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: colorize btnbmp with diagonal

Post by karinha »

https://imgur.com/wDGWLGO

Image

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: colorize btnbmp with diagonal

Post by Silvio.Falconi »

NO GOOD FOR ME
si tengo un diálogo con 80 botones (con diferentes medidas WxL) ¿cuántas líneas de código crees que debería escribir?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: colorize btnbmp with diagonal

Post by nageswaragunupudi »

Silvio.Falconi wrote:I tried a test I found on this forum

Image

Code: Select all | Expand

 
#include "fivewin.ch"

// colorize btnbmp with diagonal

Function test()
local oDlg
local oBtn
local lmenu:=.f.

DEFINE DIALOG oDlg SIZE 400,400

@  10, 10 BTNBMP    oBtn  SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND  ; //
        RESOURCE "GRID_DWN_REC", "", LinesBmp(oBtn,50,50), "" ;
     ACTION NIL WHEN lmenu
        obtn:nClrBorder := RGB(195,195,185)

 @  70, 10 BTNBMP    oBtn  SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND  ; //
        RESOURCE "GRID_DWN_REC", "", LinesBmp(oBtn,50,90), "" ;
     ACTION NIL WHEN lmenu
        obtn:nClrBorder := RGB(195,195,185)
ACTIVATE DIALOG oDlg
RETURN NIL
//---------------------------------------------------------//

Function LinesBmp(oControl,n1,n2)
   local hBmp, oBrush
   DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR  Rgb(195,195,185)
   hBmp  := FW_MakeYourBitmap( n1,n2, <|hDC,w,h|
     FillRect( hDC, { 0,0,h,w }, oBrush:hBrush )
            return nil
            > )
            RELEASE BRUSH oBrush
    return hBm
I wish have all the area of button with diagonal
so how I must make to have it ?
Your function LinesBmp() works correctly (filling full area) if you created the Dialog with TRUEPIXEL clause.
Because you have not created the dialog with TRUEPIXEL clause,
make this small change in your LinesBmp() function.
Change this line

Code: Select all | Expand

   hBmp  := FW_MakeYourBitmap( n1,n2, <|hDC,w,h|
as

Code: Select all | Expand

   hBmp  := FW_MakeYourBitmap( n1*2,n2*2, <|hDC,w,h|
With this change, the bitmap covers the full area of the button.

We need to keep in mind the effect of using or not using the TRUEPIXEL clause on the dimensions of the controls.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: colorize btnbmp with diagonal

Post by Silvio.Falconi »

nageswaragunupudi wrote:
Silvio.Falconi wrote:I tried a test I found on this forum

Image

Code: Select all | Expand

 
#include "fivewin.ch"

// colorize btnbmp with diagonal

Function test()
local oDlg
local oBtn
local lmenu:=.f.

DEFINE DIALOG oDlg SIZE 400,400

@  10, 10 BTNBMP    oBtn  SIZE 50, 50 PIXEL OF oDlg FLAT GDIP NOROUND  ; //
        RESOURCE "GRID_DWN_REC", "", LinesBmp(oBtn,50,50), "" ;
     ACTION NIL WHEN lmenu
        obtn:nClrBorder := RGB(195,195,185)

 @  70, 10 BTNBMP    oBtn  SIZE 50, 90 PIXEL OF oDlg FLAT GDIP NOROUND  ; //
        RESOURCE "GRID_DWN_REC", "", LinesBmp(oBtn,50,90), "" ;
     ACTION NIL WHEN lmenu
        obtn:nClrBorder := RGB(195,195,185)
ACTIVATE DIALOG oDlg
RETURN NIL
//---------------------------------------------------------//

Function LinesBmp(oControl,n1,n2)
   local hBmp, oBrush
   DEFINE BRUSH oBrush STYLE BDIAGONAL COLOR  Rgb(195,195,185)
   hBmp  := FW_MakeYourBitmap( n1,n2, <|hDC,w,h|
     FillRect( hDC, { 0,0,h,w }, oBrush:hBrush )
            return nil
            > )
            RELEASE BRUSH oBrush
    return hBm
I wish have all the area of button with diagonal
so how I must make to have it ?
Your function LinesBmp() works correctly (filling full area) if you created the Dialog with TRUEPIXEL clause.
Because you have not created the dialog with TRUEPIXEL clause,
make this small change in your LinesBmp() function.
Change this line

Code: Select all | Expand

   hBmp  := FW_MakeYourBitmap( n1,n2, <|hDC,w,h|
as

Code: Select all | Expand

   hBmp  := FW_MakeYourBitmap( n1*2,n2*2, <|hDC,w,h|
With this change, the bitmap covers the full area of the button.

We need to keep in mind the effect of using or not using the TRUEPIXEL clause on the dimensions of the controls.

Nages look this differences

Without Truepixel

Image

With Truepixel

Image

the space between the lines is greater if the dialog is truepixel
Is there a method to get the lines closer together?

or maybe they are the same and I see them as different :D
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Post Reply