falla de brush con xharbour.com

falla de brush con xharbour.com

Postby carlos vargas » Thu Aug 11, 2011 3:07 am

Antonio

Usando FWH 11.03 con xhb.com ultima version, tiene la particularidad de que fallan los brush, con la ultima version de xharbour para borland no hay problema, para ejemplo adjunto una screenshot del ejemplo testxbrw.exe de la carpeta samples, incluso un redefine bitmap en un dialogo falla tambien, oBrush:hBrush tiene un valor de cero.
Image

Uploaded with ImageShack.us

incluso e probado una fivehcm.lib de junio 2011 que has posteado en el foro y aun falla.
salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby carlos vargas » Fri Aug 12, 2011 2:21 am

por favor antonio, daniel... ayuda :-)

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby nageswaragunupudi » Sat Aug 13, 2011 9:02 am

You said it works on XP but fails on Windows 7 64 bit Home.
Can you confirm it is exactly the same exe file? Or have you built the exes separately on XP and on home 64 bits pc?
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: falla de brush con xharbour.com

Postby carlos vargas » Sat Aug 13, 2011 4:44 pm

the error is strange, since I've taken a old app, I've compiled latest version with FWH xhb.com 11.03 and works fine, but now I'm developing application that fails, I have no third party libraries or classes FWH changes , no extra code. I have two days with this problem and I can not figure it out.
I have functions PALBMPLOAD (used in TBITMAP CLASS) and LOADBITMAP (BRUSH CLASS) both return zero

Compiled con xharbour last version all work ok.
Code: Select all  Expand view

FUNCTION Main()
   LOCAL oBrush, oFont

   oApp := TApplication():New()

   IF !Main_Configure()
      RETURN
   ENDIF

   IF !Acceso()
      Main_Close()
      RETURN
   ENDIF

   DEFINE BRUSH oBrush NAME "BM_FONDO2"

?oBrush:hBrush // fwh xhb return zero, i verify what bitmap "BM_FONDO2" is include in the exe

   DEFINE FONT  oFont  NAME GetDefaultFontName() SIZE 0, GetDefaultFontHeight()

   DEFINE WINDOW oApp:oMainWnd   ;
      FROM 1, 1 TO 600, 800      ;
      TITLE "Sistema de control - CREDICOM, version 1.1a" ;
      ICON  GetIcon()            ;
      BRUSH oBrush

      DEFINE MSGBAR oApp:oMsgBar OF oApp:oMainWnd PROMPT "KDSoft(c), Managua, Agosto 2011" 2010

      DEFINE MSGITEM oApp:aoItemsMsgBar[ IMB_INFO_CONN  ] OF oApp:oMsgBar PROMPT oApp:InfoConn()  SIZE 330 COLOR CLR_BLUE, NIL
      DEFINE MSGITEM oApp:aoItemsMsgBar[ IMB_INFO_UTYPE ] OF oApp:oMsgBar PROMPT oUser:cUserType  SIZE 080 COLOR CLR_BLUE, NIL
      DEFINE MSGITEM oApp:aoItemsMsgBar[ IMB_INFO_UID   ] OF oApp:oMsgBar PROMPT oUser:cUserAlias SIZE 100 COLOR CLR_BLUE, NIL

      oApp:oMsgBar:KeybOn()

      oApp:oMainWnd:bInit := {|| oApp:oMainWnd:SetFont( oFont ), ShowMenu() }

   ACTIVATE WINDOW oApp:oMainWnd MAXIMIZED VALID MsgNoYes( "Desea salir de la aplicación?", "Seleccione" )

   Main_Close()

RETURN NIL
 


Code: Select all  Expand view

/*-------------------------------------------------------------------------------------------------*/
#include "credicom.ch"

/*-------------------------------------------------------------------------------------------------*/
GLOBAL EXTERNAL oApp, oUser

STATIC nIntentos

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Acceso()
   LOCAL oDlg
   LOCAL oFnt1
   LOCAL lAcceso
   PRIVATE cAlias, cContrasena

   #ifdef __PRUEBA__
   cAlias       := PadR( LOGIN_USERDEV, 10 )
   cContrasena  := PadR( LOGIN_PASSDEV, 10 )
   #else
   cAlias       := Space( 10 )
   cContrasena  := Space( 10 )
   #endif

   lAcceso   := FALSE
   nIntentos := 0

   DBSELECT "USUA"
   USUA->( OrdSetFocus( "ALIAS" ), DBGoTop() )

   DEFINE FONT oFnt1 NAME "Tahoma" SIZE 0,-12

   DEFINE DIALOG oDlg NAME "DLG_ACCESO" ICON GetIcon() FONT oFnt1

   REDEFINE BITMAP ID 301 OF oDlg NAME "BM_ACCESO" //this bitmap is not show in dialog, i verify what bitmap "BM_ACCESO" is included in the exe

   REDEFINE GET cAlias      ID 101 OF oDlg PICTURE "@!"
   REDEFINE GET cContrasena ID 102 OF oDlg

   REDEFINE BUTTON ID 201 OF oDlg ACTION IIf( lAcceso := Acceso_Validar( oDlg ), oDlg:END(), NIL )
   REDEFINE BUTTON ID 202 OF oDlg ACTION oDlg:END() CANCEL

   ACTIVATE DIALOG oDlg CENTER

   LimpiarAreas()

   RELEASE FONT oFnt1
   RELEASE cAlias, cContrasena

RETURN lAcceso

/*-------------------------------------------------------------------------------------------------*/
 

Code: Select all  Expand view

HB_FUNC( LOADBITMAP )
{
   #ifndef UNICODE
      #ifndef _WIN64
         HBITMAP hBmp = LoadBitmap( ( HINSTANCE ) hb_parnl( 1 ),
                                    IF( HB_ISCHAR( 2 ), hb_parc( 2 ),
                                    ( LPSTR ) MAKEINTRESOURCE( hb_parnl( 2 ) ) ) );
      #else                              
         HBITMAP hBmp = LoadBitmap( ( HINSTANCE ) hb_parnll( 1 ),
                                    IF( HB_ISCHAR( 2 ), hb_parc( 2 ),
                                    ( LPSTR ) MAKEINTRESOURCE( hb_parnl( 2 ) ) ) );
      #endif
   #else
      LPWSTR pW = AnsiToWide( ( char * ) hb_parc( 2 ) );                              
      HBITMAP hBmp = LoadBitmap( ( HINSTANCE ) hb_parnl( 1 ),
                                 IF( HB_ISCHAR( 2 ), pW,
                                 ( LPWSTR ) MAKEINTRESOURCE( hb_parnl( 2 ) ) ) );
      _xfree( pW );
   #endif                              

   RegisterResource( hBmp, "BMP" );

   hb_retnl( ( unsigned long ) hBmp );
}
 


Code: Select all  Expand view

HB_FUNC( PALBMPLOAD ) // ( cResourceName )
{
    #ifndef UNICODE
       HRSRC  hRes = FindResource( ( HMODULE ) GetResources(),
                     IF( HB_ISCHAR( 1 ), hb_parc( 1 ), MAKEINTRESOURCE( hb_parni( 1 ) ) ),
                     RT_BITMAP );
    #else
       LPWSTR pW = AnsiToWide( ( char * ) hb_parc( 1 ) );
       HRSRC  hRes = FindResource( ( HMODULE ) GetResources(),
                     IF( HB_ISCHAR( 1 ), pW, MAKEINTRESOURCE( hb_parni( 1 ) ) ),
                     RT_BITMAP );
    #endif                
    HANDLE hResource = IF( hRes, LoadResource( GetResources(), hRes ), 0 );

    #ifdef UNICODE
       _xfree( pW );
    #endif  

    if( hRes )
    {
       #ifndef __FLAT__
          hb_reta( 2 );
          hb_stornl( ( LONG ) hPalBitmapNew( 0, (LPBITMAPINFO) GlobalLock( hResource ) ), -1, 1 );
          hb_stornl( ( LONG ) hPalette, -1, 2 );
          GlobalUnlock( hResource );
       #else
          hb_reta( 2 );
          hb_storvnl( ( LONG ) hPalBitmapNew( 0, ( struct tagBITMAPINFO * ) hResource ), -1, 1 );
          hb_storvnl( ( LONG ) hPalette, -1, 2 );
       #endif
       #ifndef UNICODE
          FreeResource( hResource );
       #endif  
    }
    else
    {
       hb_reta( 2 );
       hb_storvnl( 0, -1, 1 );
       hb_storvnl( 0, -1, 2 );
    }
}
 


Image
Image
Image
Image
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby Antonio Linares » Sat Aug 13, 2011 6:25 pm

Carlos,

Could you please test it using samples\buildx.bat with free xHarbour ? thanks

Here it is working fine with MSVC 2010 and samples\buildh32.bat
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: falla de brush con xharbour.com

Postby carlos vargas » Sat Aug 13, 2011 7:20 pm

Antonio lo interesante de esto es que tengo un app mas pequeña en la cual funciona correctamente todo, pero esta ultima es mas grande, y creme cuando te digo que en estos dos dias he buscado en el codigo cualquier cosa que alterase los resultados, repito que no he usado libs de terceros, ni modificaciones a las clases tbitmap y brush, ambas app usa las misma libs, el mismo orden, y ambas funcionan muy bien con xharbour free de bcc, pero al usar xhb.com solo la mas pequeña no presenta el problema.

ahora he cometido un error al indicar que se usara testxbrw como proueba ya que cuando compile para xhb.com no he incluido el rc por lo cual el recurso no fue incluido y por tanto no fue presentado el fondo. por lo cual por favvor disculap al señalar que se usara como ejemplo-
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby Antonio Linares » Sun Aug 14, 2011 10:00 pm

Carlos,

Por favor modifica la clase TBrush para que justo despues de llamar a LoadBitmap() llame a MsgInfo( GetErrMsg() ) y asi sepamos que error de Windows ha ocurrido para que no se cargue el bitmap, gracias

O prueba a llamar a esa función despues de mostrar hBrush. Lo que ocurre es que alguna operación previa de Windows puede cambiar la información del ultimo error a estado de no error.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: falla de brush con xharbour.com

Postby carlos vargas » Sun Aug 14, 2011 11:55 pm

en este caso muestra correctamente el nombre del recurso, el cual he verificado exista en el exe usando resedit
GetResource esta retornando un valor numerico.

en brush.prg
Code: Select all  Expand view

        case cBmpRes != nil
           ::hBitmap = LoadBitmap( GetResources(), cBmpRes )
           MsgInfo( GetErrMsg() )
           ?ProcName(),cBmpRes, GetResources(),::hBitmap
           MsgInfo( GetErrMsg() )
           ::hBrush  = If( ::hBitmap != 0, CreatePatternBrush( ::hBitmap ),)
           MsgInfo( GetErrMsg() )
 


TBRUSH:NEW
BM_FONDO2
4194304
0

retorno de GetErrMsg es: El nombre de recurso especificado no se encuentra en el archivo de imagen.


en bitmap.prg
Code: Select all  Expand view

METHOD LoadImage( cResName, cBmpFile ) CLASS TBitmap

   local lChanged := .f.
   local hBmpOld  := ::hBitmap
   local hPalOld  := ::hPalette
   local aBmpPal

   DEFAULT cResName := ::cResName, cBmpFile := ::cBmpFile

   if ! Empty( cResName )
       ?cBmpRes, GetResources()
       aBmpPal    = PalBmpLoad( cResName )
       MsgInfo( GetErrMsg() )
       ::hBitmap  = aBmpPal[ 1 ]
       ::hPalette = aBmpPal[ 2 ]
       lChanged  := .t.
       cBmpFile  := nil
 


TBITMAP:LOADIMAGE
BM_ACCESO
4194304
2
0
0
aca MsgInfo( GetErrMsg() ) indica operacion realizada correctamente, lo que pasa es que los valores del array son 0
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby carlos vargas » Mon Aug 15, 2011 3:09 am

un dato extra

he pasado mis recursos a una dll y usado set resources to "mifile.dll" y todo funciona bien con fwh + xhb.com
la falla esta con los recursos agregados al exe, los cuales la funciones indicadas no estan detectando segun los mensajes de error (siguiendo las indicaciones de AL)

hay que ver por que lo desconoce, hay que señalar que otros recursos que se usan como botones en las toolbar iconos, dialogos, manifest funciona bien, de momento he notado falla en los brush, bitmaps, los cuales usan las funciones LoadBitmap y PalBmpLoad.

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby carlos vargas » Mon Aug 15, 2011 4:53 am

antonio la funcion FindResource de bajo nivel (en 'c') donde se encuentra?
he llegado rastreando el problema hasta ahi, y no puedo continuar

Code: Select all  Expand view

    #ifndef UNICODE
       HRSRC  hRes = FindResource( ( HMODULE ) GetResources(),
                     IF( HB_ISCHAR( 1 ), hb_parc( 1 ), MAKEINTRESOURCE( hb_parni( 1 ) ) ),
                     RT_BITMAP );
    #else

 


hay una llamada HB_FUNC( FINDRESOURCE), pero ya es una funcion de FWH
Code: Select all  Expand view

HB_FUNC( FINDRESOURCE ) // ( hResources, cResourceName, nResType )
{
   OutputDebugStringA("FindResource\n"); //esto nunca se llega amostrar en el depurador
   #ifndef UNICODE
      #ifndef _WIN64
          hb_retnl( ( LONG ) FindResource( ( HINSTANCE ) hb_parnl( 1 ),
                          hb_parc( 2 ), MAKEINTRESOURCE( hb_parni( 3 ) ) ) );
      #else
          hb_retnl( ( LONG ) FindResource( ( HINSTANCE ) hb_parnll( 1 ),
                          hb_parc( 2 ), MAKEINTRESOURCE( hb_parni( 3 ) ) ) );
      #endif
   #else
       LPWSTR pW = AnsiToWide( ( char * ) hb_parc( 2 ) );
      hb_retnl( ( LONG ) FindResource( ( HINSTANCE ) hb_parnl( 1 ),
                       pW, MAKEINTRESOURCE( hb_parni( 3 ) ) ) );
      _xfree( pW );
   #endif
}
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby carlos vargas » Mon Aug 15, 2011 4:08 pm

baueno :-( continuando con las prueba, ya descarte falla en FindResources, ademas he hecho un cambio
Code: Select all  Expand view

   DEFINE DIALOG oDlg NAME "DLG_ACCESO" ICON GetIcon() FONT oFnt1

   REDEFINE BITMAP ID 301 OF oDlg NAME "BM_ACCESO"
 

por
Code: Select all  Expand view

   DEFINE DIALOG oDlg NAME "DLG_ACCESO" ICON GetIcon() FONT oFnt1

   REDEFINE BITMAP ID 301 OF oDlg NAME "TB_DELETE"
 


he cambiado el nombre del resource bitmap y aparece al bendito bitmap, lo raro es que ambos bitmap son agregados
TB_DELETE BITMAP ".\\bitmaps\\form_delete.bmp"
BM_ACCESO BITMAP ".\\bitmaps\\logo_acceso.bmp"


ambos son de 24 bits.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby carlos vargas » Mon Aug 15, 2011 4:56 pm

para aclarar la falla aun existe, lo que pasa es que cambio la imagen de acceso por una imagen de un boton de borrado y este si aparece loque me llevo a revisar el bitmap de la imagen que no es mostrada, la he eliminado de recursos y la he cargado al rc nuvamente sin resultados positivos, en el caso de la imagen de fondo tengo 6: FONDO0, FONDO1,..FONDO5 y nunguno es mostrada en el fondo de la pantalla como brush.

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby Daniel Garcia-Gil » Mon Aug 15, 2011 5:02 pm

Hola Carlos

Trate de contacterme contigo por medio del msn sin resultado (por el email que tienes asignado), si es posible contactame a ver si juntos podemos resolverlo
si tienes alguna otra via, hazmela saber por mi correo
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: falla de brush con xharbour.com

Postby carlos vargas » Mon Aug 15, 2011 5:52 pm

ok, estare a partir de este momento en 1 1/2 hora en el msn, aca son las 12, por lo que estar a las 1:30 en linea.
voy saliendo hacia el trabajo..

gracias daniel,
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: falla de brush con xharbour.com

Postby Antonio Linares » Thu Aug 18, 2011 8:07 am

Carlos,

FindResource() es una funcion propia del API de Windows

http://msdn.microsoft.com/en-us/library/ms648042(v=vs.85).aspx
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 83 guests