Problems with Checkbox

User avatar
Richard Chidiak
Posts: 946
Joined: Thu Oct 06, 2005 7:05 pm
Location: France
Contact:

Re: Problems with Checkbox

Post by Richard Chidiak »

Enrico

I agree, i think we need Antonio for this now

Richard
http://www.cbati.com

Uestudio
Fwh 13.05 Harbour 3.2 MSVC 2013
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Re: Problems with Checkbox

Post by Silvio »

Antonio is with TheFull now!!!!
Best Regards, Saludos

Falconi Silvio
User avatar
reinaldocrespo
Posts: 918
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: Problems with Checkbox

Post by reinaldocrespo »

Hi everyone.

The checkbox problem is really becoming annoying. Here is a self contained reduced sample that reproduces the problem:

Code: Select all

#include "fivewin.ch"

function main()
local oDlg, oChk, oGet1, oGet2
local bNew, bEdit, bSave, bCancel 
local lChk1, lChk2, lChk3
local lEdit         := .f.
local cJob          := ''
local cRevCode  := Spac( 10 )
local cDesc         := Spac( 30 )

   bnew    := {|| lEdit := .T., cJob := 'NEW', oDlg:update(), ;
                     oDlg:aEvalWhen(), oGet1:setFocus() }

   bEdit   := {|| lEdit := .T., cJob := 'EDIT', ;
                      oDlg:update(), oDlg:aEvalWhen(), ;
                      oGet2:setFocus() }

   bSave   := {|| oDlg:update(), lEdit := .F., cJob := '', oDlg:aEvalWhen() }
   bCancel := {|| lEdit := .F., cJob := '', oDlg:aEvalWhen(), oDlg:update(), .F. }

   DEFINE DIALOG oDlg RESOURCE "RevCode" TRANSPARENT COLOR CLR_BLUE, RGB(240,240,240)

   REDEFINE BUTTONBMP ID 127 OF oDlg ACTION EVAL( bNew )    WHEN ! lEdit
   REDEFINE BUTTONBMP ID 128 OF oDlg ACTION Eval( bEdit )   WHEN ! lEdit
   REDEFINE BUTTONBMP ID 129 OF oDlg WHEN ! lEdit
   REDEFINE BUTTONBMP ID 132 OF oDlg ACTION Eval( bSave )   WHEN lEdit
   REDEFINE BUTTONBMP ID 133 OF oDlg ACTION Eval( bCancel ) WHEN lEdit

   REDEFINE GET oGet1 VAR cRevCode ID 101 OF oDlg UPDATE WHEN lEdit .AND. cJob = 'NEW'
   REDEFINE GET oGet2 VAR cDesc    ID 102 OF oDlg UPDATE WHEN lEdit 
   
   REDEFINE CHECKBOX oChk VAR lchk1 ID 106 OF oDlg UPDATE ;
       WHEN lEdit
       
    oChk:bChange := { || oDlg:Update() }
    
   REDEFINE CHECKBOX lChk2 ID 107 OF oDlg UPDATE ;
       WHEN lEdit .and. lChk1
       
   REDEFINE CHECKBOX lChk3 ID 108 OF oDlg UPDATE ;
       WHEN lEdit .and. lChk1
   
   REDEFINE BUTTONBMP ID 126 OF oDlg ACTION oDlg:END() WHEN ! lEdit

   ACTIVATE DIALOG oDlg ;
   VALID IF( GetKeyState(VK_ESCAPE) .AND. lEdit, ;
            EVAL( bCancel ), .t. )
    
    RETURN NIL
And this is revcode.rc:

Code: Select all

REVCODE DIALOG 30, 21, 405, 101
STYLE DS_3DLOOK |DS_SETFONT |DS_MODALFRAME |WS_POPUP |WS_VISIBLE |WS_SYSMENU |WS_CAPTION 
CAPTION "Centros de Costo"
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL, 0
BEGIN
  CONTROL "",1001,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,9,20,392,53
  CONTROL "",101,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,100,28,92,12
  CONTROL "",102,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,100,42,169,12
  CONTROL "    Nuevo",127,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,6,7,50,14
  CONTROL "    Modificar",128,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,60,7,50,14
  CONTROL "    Grabar",132,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,167,7,50,14
  CONTROL "     Cancelar",133,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,221,7,50,14
  CONTROL "    Salir",126,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,348,78,50,14
  CONTROL "Centro De Costo",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,31,75,8
  CONTROL "Descripción",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,44,75,8
  CONTROL "    Eliminar",0,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,73,289,50,14
  CONTROL "    Eliminar",129,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,113,7,50,14
  CONTROL "Crear Orden",106,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,305,31,70,10
  CONTROL "Imprimir Orden",107,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,305,42,70,10
  CONTROL "Imprimir Etiqueta",108,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,305,54,70,10
END
 
Image on program startup (Notice how the border is erased):
Image

Image after clicking on "Nuevo" o "Modificar" (notice some controls are erased):
Image

It is all reproducible with the sample code and .rc attached.

Is there an official solution?


Reinaldo.
User avatar
Richard Chidiak
Posts: 946
Joined: Thu Oct 06, 2005 7:05 pm
Location: France
Contact:

Re: Problems with Checkbox

Post by Richard Chidiak »

Reinaldo

I have tested your sample and the problem shows obviously , the only solution i found is to link my modified control.prg that I published , the problem disappears and checkbox show ok

HTH

Richard
http://www.cbati.com

Uestudio
Fwh 13.05 Harbour 3.2 MSVC 2013
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Problems with Checkbox

Post by Antonio Linares »

I will be back tomorrow morning in my office and I will personally check it, thanks! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Re: Problems with Checkbox

Post by Silvio »

Antonio,
on x,y source code run ok the problem is only on resources !!!!!!!!!!
Best Regards, Saludos

Falconi Silvio
User avatar
Maurizio
Posts: 705
Joined: Mon Oct 10, 2005 1:29 pm
Contact:

Re: Problems with Checkbox

Post by Maurizio »

Antonio,

I tested the original examples in FWH\samples regarding the RADIO controll problems .

testrad resource in RC -> OK
testrad2 no resource -> ERROR
testrad3 rsource in DLL -> OK
testrad5 no resource -> ERROR
testrad6 no resource -> OK

I use :WindowsXP , FW 11.04 ,xHArbour , BCC 582 .

This problem has been around for a long time and now we need a solution. :cry:

Maurizio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problems with Checkbox

Post by Enrico Maria Giordano »

Enrico Maria Giordano wrote:the first thing we have to know is what DrawPBack() is for.
DrawPBack() draws the background of the parent control containing the transparent object.

We have to test radios and checkboxes inside a folder too.

EMG
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problems with Checkbox

Post by Enrico Maria Giordano »

This is a sample. Please test it with and without theme manifest. Unfortunately TEST1 dialog without folder doesn't seem to work (without themes) even if I comment out DrawPBack() calls:

Code: Select all

#include "Fivewin.ch"


FUNCTION MAIN()

    TEST1()
    TEST2()

    RETURN NIL


STATIC FUNCTION TEST1()

    LOCAL oDlg

    LOCAL oCk1, lCk1 := .F.
    LOCAL oCk2, lCk2 := .F.

    LOCAL oRad, nRad := 1

    DEFINE DIALOG oDlg;
           RESOURCE "TEST1";
           TRANSPARENT

    REDEFINE CHECKBOX oCk1 VAR lCk1;
             ID 101 OF oDlg

    REDEFINE CHECKBOX oCk2 VAR lCk2;
             ID 102 OF oDlg

    REDEFINE RADIO oRad VAR nRad;
             ID 103, 104 OF oDlg

    ACTIVATE DIALOG oDlg;
             ON INIT GRADIENTBRUSH( oDlg, ACLRGRAD() );
             CENTER

    RETURN NIL


STATIC FUNCTION TEST2()

    LOCAL oDlg, oFld

    LOCAL oCk1, lCk1 := .F.
    LOCAL oCk2, lCk2 := .F.

    LOCAL oRad, nRad := 1

    DEFINE DIALOG oDlg;
           RESOURCE "TEST2F"

    REDEFINE FOLDER oFld;
             ID 101 OF oDlg;
             PROMPTS "Test 2";
             DIALOGS "TEST2D"

    REDEFINE CHECKBOX oCk1 VAR lCk1;
             ID 101 OF oFld:aDialogs[ 1 ]

    REDEFINE CHECKBOX oCk2 VAR lCk2;
             ID 102 OF oFld:aDialogs[ 1 ]

    REDEFINE RADIO oRad VAR nRad;
             ID 103, 104 OF oFld:aDialogs[ 1 ]

    ACTIVATE DIALOG oDlg;
             CENTER

    RETURN NIL


STATIC FUNCTION GRADIENTBRUSH( oDlg, aColors )

    LOCAL hDC, hBmp, hBmpOld, oBrush

    hDC = CREATECOMPATIBLEDC( oDlg:GetDC() )

    hBmp = CREATECOMPATIBLEBITMAP( oDlg:hDC, oDlg:nWidth, oDlg:nHeight )

    hBmpOld = SELECTOBJECT( hDC, hBmp )

    GRADIENTFILL( hDC, 0, 0, oDlg:nHeight, oDlg:nWidth, aColors )

    oBrush = TBrush():New( ,,,, hBmp )

    oDlg:SetBrush( oBrush )

    AEVAL( oDlg:aControls, { | oCtl | If( oCtl:lTransparent, oCtl:SetBrush( oDlg:oBrush ), ) } )

    RELEASE BRUSH oBrush

    SELECTOBJECT( hDC, hBmpOld )

    DELETEDC( hDC )

    oDlg:ReleaseDC()

    RETURN NIL


STATIC FUNCTION ACLRGRAD()

    RETURN { { 1, RGB( 216, 230, 238 ), RGB( 103, 154, 194 ) } }
EMG
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problems with Checkbox

Post by Enrico Maria Giordano »

IsAppThemed() returns .T. even if the app has not the manifest file linked in the resources. How can I test if there is the manifest file in the resources? I need it to solve the problem that is the object of this thread. I already tried using FindResource() but it doesn't seem to work.

In the meantime, please try my previous sample without manifest file and with the following changes to control.prg:

- both DrawPBack() calls commented out

- the following line reactivated:

Code: Select all

::oWnd:Refresh( .f. )   // EMG commented out to avoid flicker
Then test the same sample with manifest and with the following changes to control.prg:

- the first call to DrawPBack() commented out, the second activated

- the following line commented out:

Code: Select all

//              ::oWnd:Refresh( .f. )   // EMG commented out to avoid flicker
Please let me know.

EMG
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problems with Checkbox

Post by Enrico Maria Giordano »

Please add the following code to my sample:

Code: Select all

#pragma BEGINDUMP

#include <windows.h>

HMODULE GetResources( void );
HMODULE GetInstance( void );

HB_FUNC( ISMANIFEST )
{
   static BOOL bInit = FALSE;
   static BOOL bIsThemed = FALSE;

   if( ! bInit )
   {
    WIN32_FIND_DATA fd;
    
      bInit = TRUE;
      bIsThemed = ( ( ( BOOL ) FindResource( GetResources(), MAKEINTRESOURCE( 1 ),
                  MAKEINTRESOURCE( 24 ) ) ) ||
                  ( ( BOOL ) FindResource( GetInstance(), MAKEINTRESOURCE( 1 ),
                  MAKEINTRESOURCE( 24 ) ) ) );
                  
      if( ! bIsThemed )
      {
         char AppName[ 256 ];
         HANDLE hFind;
        
         GetModuleFileName( NULL, AppName, 255 );
         lstrcat( AppName, ".Manifest" );
         
         if( ( hFind = FindFirstFile( AppName, &fd ) ) != INVALID_HANDLE_VALUE )
         {
            bIsThemed = TRUE;
            FindClose( hFind );
         }
      }      
   }

   hb_retl( bIsThemed );
}

#pragma ENDDUMP
Then change control.prg so that this

Code: Select all

      if IsAppThemed() .and. Upper( ::ClassName() ) $ "TCHECKBOX;TRADIO;TGROUP"
         DrawPBack( ::hWnd,  hDC )
      endif
become this

Code: Select all

      if IsAppThemed() .and. IsManifest() .and. Upper( ::ClassName() ) $ "TCHECKBOX;TRADIO;TGROUP"
         DrawPBack( ::hWnd,  hDC )
      endif
and this

Code: Select all

           if ::lTransparent .and. ( ::IsKindOf( "TRADIO" ) .or. ::IsKindOf( "TCHECKBOX" ) )
              ::oWnd:Refresh( .f. )   // EMG commented out to avoid flicker
           endif
become this

Code: Select all

           if ::lTransparent .and. !IsManifest() .and. ( ::IsKindOf( "TRADIO" ) .or. ::IsKindOf( "TCHECKBOX" ) )
              ::oWnd:Refresh( .f. )   // EMG commented out to avoid flicker
           endif


Try and let me know.

EMH
User avatar
Maurizio
Posts: 705
Joined: Mon Oct 10, 2005 1:29 pm
Contact:

Re: Problems with Checkbox

Post by Maurizio »

Ciao Enrico,

dall'esempio TEST1.PRG manca TEST1.TC

Maurizio
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Problems with Checkbox

Post by Enrico Maria Giordano »

Here it is:

Code: Select all

TEST1 DIALOG 37, 56, 160, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Test 1"
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
 CONTROL "Checkbox:", 101, "BUTTON", BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 10, 50, 12
 CONTROL "Checkbox:", 102, "BUTTON", BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 25, 50, 12
 CONTROL "Radio:", 103, "BUTTON", BS_AUTORADIOBUTTON | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE, 10, 45, 50, 12
 CONTROL "Radio:", 104, "BUTTON", BS_AUTORADIOBUTTON | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE, 10, 60, 50, 12
}


TEST2D DIALOG 37, 56, 145, 80
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
 CONTROL "Checkbox:", 101, "BUTTON", BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 10, 50, 12
 CONTROL "Checkbox:", 102, "BUTTON", BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 25, 50, 12
 CONTROL "Radio:", 103, "BUTTON", BS_AUTORADIOBUTTON | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE, 10, 45, 50, 12
 CONTROL "Radio:", 104, "BUTTON", BS_AUTORADIOBUTTON | BS_LEFTTEXT | WS_CHILD | WS_VISIBLE, 10, 60, 50, 12
}


TEST2F DIALOG 96, 44, 180, 115
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Test 2"
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
 CONTROL "", 101, "SysTabControl32", 0 | WS_CHILD | WS_VISIBLE, 5, 5, 170, 105
}
EMG
Post Reply