Page 3 of 4

Re: Primera consulta sobre fiveMac

PostPosted: Wed Jun 30, 2010 6:00 pm
by Antonio Linares
Manuel,

Respecto a CurDir() yo creo que la solución es no usarlo y especificar una trayectoria absoluta.

Otra opción muy interesante, es la que comentas de poner las DBFs dentro de la propia carpeta del ejecutable.

Re: Primera consulta sobre fiveMac

PostPosted: Wed Jun 30, 2010 9:51 pm
by mastintin
He cambiado la ruta del dbf en el ejemplo browse :

USE /Applications/browse.app/Test

He tenido en cuenta que las aplicaciones siempre se deben de instalar en la carpeta "aplicaciones" y he metido el dbf dentro del programa . Funciona a la perfección.
dejo una captura del Monitor de actividad donde se ve funcionando la aplicacion browse compilada en nativo a 64bits.
Image

Saludos.

Re: Primera consulta sobre fiveMac

PostPosted: Wed Jun 30, 2010 10:28 pm
by Antonio Linares
Manuel,

Muy bien! :-)

Excelente idea la de usar la carpeta de la aplicación para guardar los datos, DBFs, etc que necesite :-)

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 3:32 pm
by mastintin
He mirado como podria conseguir una aplicacion la referencia de su paquete , para poder introducir en el una imagen( o cualquier cosa ) y poder llamarla sin tener que saber la ruta absoluta donde se tiene instalado el programa .
He creado esta funcion para cargarla , puede que no este bien , que tenga algun gazapo y ademas no puedo probarla pues ahora mismo estoy sobre windows , pero la idea es esa mas o menos ...La he llamado resfile para emular imagenes en recursos y el secreto esta en la clase NSBundle que es una clase de manejo del paquete .
Saludos.

Code: Select all  Expand view

HB_FUNC( IMGSETRESFILE )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 2 ) ? hb_parc( 2 ) : "" ] autorelease ];
   NSString *myImagePath = [[[NSBundle mainBundle] resourcePath]  stringByAppendingString:@"/"+string];
   
   
   [ image setImage : [ [ NSImage alloc ] initWithContentsOfFile : myImagePath ] ];
}
 

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 6:51 pm
by mastintin
He estado corrigiendo el archivo makefile que viene en la distrbución con los nombres correctos de las librerias para que funcione . .
Code: Select all  Expand view


# FiveMac makefile sample (c) FiveTech Software 2007
# Use TABs instead of spaces
# just type make to build it

all : ./one.app/Contents/MacOS/one
    ./one.app/Contents/MacOS/one
    reset
   
PRG_OBJS = ./one.o  \
    ./two.o \
    ./three.o   \

./one.app/Contents/MacOS/one : $(PRG_OBJS)
    if [ ! -d one.app ]; then mkdir one.app; fi
    if [ ! -d one.app/Contents ]; then mkdir one.app/Contents; fi
    if [ ! -d one.app/Contents/MacOS ]; then mkdir one.app/Contents/MacOS; fi
    gcc one.o two.o three.o -o ./one.app/Contents/MacOS/one -L./../lib -lfive -lfivec -L./../../harbour/lib -lhbdebug -lhbvm -lhbrtl -lhblang -lhbrdd -lhbrtl -lgtstd -lgttrm -lhbvm -lhbmacro -lhbpp -lrddntx -lrddcdx -lrddfpt -lhbsix -lhbcommon -framework Cocoa

./%.c : ./%.prg
    ./../../harbour/bin/harbour $< -o./$@ -n -I./../../harbour/include -I./../include

./%.o : ./%.c
    gcc -c -o $@ -I./../../harbour/include $<


 

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 7:46 pm
by mastintin
una captura de browse funcionando con la dbf dentro del contenedor y con su propio icono tambien en el contenedor .
Image
Saludos.

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 8:57 pm
by mastintin
Continuo avanzando con el tema del contenedor ... he conseguido que el ejemplo testimg encuentre la imagen dentro de la carpetas Resources del contenedor ...
los cambios son los siguientes :
en el archivo fivemac.ch
esto es algo provisional y rapido :
Code: Select all  Expand view

#xcommand @ <nRow>, <nCol> RESIMAGE [ <oImg> ] ;
             [ OF <oWnd> ] ;
                 [ SIZE <nWidth>, <nHeight> ] ;
                 [ FILENAME <cFileName> ] ;
              => ;
                 [ <oImg> := ] TImage():New( <nRow>, <nCol>, <nWidth>, <nHeight>, [<oWnd>],;
                                             [<cFileName>] , .t. )
                               

 


en la clase image :

Añade el metodo :
Code: Select all  Expand view

  METHOD SetResfile(cFileName) INLINE ImgSetresFile( ::hWnd , cFileName )
 


modificado metodo :
Code: Select all  Expand view

METHOD New( nTop, nLeft, nWidth, nHeight, oWnd, cFileName, lres ) CLASS TImage

   DEFAULT nWidth := 100, nHeight := 100
   DEFAULT lres:= .f.

   ::hWnd = ImgCreate( nTop, nLeft, nWidth, nHeight, oWnd:hWnd )
   ::oWnd  = oWnd

   if lres
     if ! Empty( cFileName )  
       ::SetresFile( cFileName )
   endif  
  else
   if ! Empty( cFileName ) .and. File( cFileName )
      ::SetFile( cFileName )
   endif  
   endif
   oWnd:AddControl( Self )
   
return Self  

 


Añadida function al archivo images.m de la api .
Code: Select all  Expand view

HB_FUNC( IMGSETRESFILE )
{
    NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
    NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 2 ) ? hb_parc( 2 ) : "" ] autorelease ];
    NSString *myImagePath = [[[NSBundle mainBundle] resourcePath]  stringByAppendingString:string];
    [ image setImage : [ [ NSImage alloc ] initWithContentsOfFile : myImagePath ] ];
   
   
}
 


cambiando en el programa la linea :

@ 100, 139 RESIMAGE oImg OF oWnd SIZE 107, 91 FILENAME "/error.tif"

Funciona perfectamente y sabe en todo momento donde debe buscar los archivos de imagen . Supongo que sacar la ruta del contenedor no será demasiado complicado .
Saludos.

---------------- editado para añadir ---------------------

Con esta otra funcion conseguimos el path de la carpeta resource correcto :
Code: Select all  Expand view

HB_FUNC( RESPATH )
{
        NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
        hb_retc( [ bundlePath cStringUsingEncoding : NSASCIIStringEncoding ] );
}  
 


Y con esta otra el path de la aplicacion :

Code: Select all  Expand view

HB_FUNC( APPPATH )
{
        NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
        NSString *secondParentPath = [[bundlePath stringByDeletingLastPathComponent] stringByDeletingLastPathComponent];
        hb_retc( [ secondParentPath cStringUsingEncoding : NSASCIIStringEncoding ] );
}  

 


:-))

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 9:45 pm
by Antonio Linares
Manuel,

He estado corrigiendo el archivo makefile que viene en la distrbución con los nombres correctos de las librerias para que funcione . .


Actualizado para el próximo build que publiquemos :-)

Muchas gracias! :-)

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 9:48 pm
by Antonio Linares
Manuel,

browse funcionando con la dbf dentro del contenedor y con su propio icono tambien en el contenedor


Muy bien! :-)

Podrias publicar aqui el código del ejemplo browse.prg modificado ? gracias

En que subcarpeta has situado el icono ? Algún requerimiento en especial en cuanto a tamaño, formato, etc ?

Muchas gracias por tus valiosas aportaciones! :-)

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 11:27 pm
by Antonio Linares
Manuel,

gracias por las funciones AppPath() y ResPath(). Añadidas para el próximo build de FiveMac.

Hemos probado hb_ArgV( 0 ) y devuelve bien el path del ejecutable. Esto es algo propio de los compiladores en C.

Vamos ahora a probar tu trabajo relativo a las imágenes. Muchas gracias por tus aportaciones que estan siendo muy interesantes y útiles :-)

Re: Primera consulta sobre fiveMac

PostPosted: Thu Jul 01, 2010 11:46 pm
by Antonio Linares
Manuel,

La nueva cláusula del comando para imágenes creemos que es preferible implementarla de esta manera por mantener la mayor compatibilidad posible con FiveWin:
Code: Select all  Expand view

#xcommand @ <nRow>, <nCol> IMAGE [ <oImg> ] ;
                 [ OF <oWnd> ] ;
                 [ SIZE <nWidth>, <nHeight> ] ;
                 [ FILENAME <cFileName> ] ;
                 [ <resource: NAME, RESOURCE, RESNAME> <cResName> ] ;
              => ;
                 [ <oImg> := ] TImage():New( <nRow>, <nCol>, <nWidth>, <nHeight>, [<oWnd>],;
                                             [<cFileName>], [<cResName>] )
 

Re: Primera consulta sobre fiveMac

PostPosted: Fri Jul 02, 2010 12:01 am
by Antonio Linares
Manuel,

Hemos publicado un nuevo build de FiveMac con los cambios más recientes :-)

Gracias!

Re: Primera consulta sobre fiveMac

PostPosted: Fri Jul 02, 2010 5:57 am
by mastintin
en browse he realizado "a mano" (parte de ello se puede hacer en build.sh ) lo siguiente :

He colocado dentro de brwse.app el fichero test.dbf ( se podría crear un carpeta llamada dbf para colocar todos los archivos dbf dentro) .
Detro de la carpeta Contents he creado una carpeta Resources donde he metido todas las imagenes que se necesiten en el programa , en esta caso el icono .
El icono lo he realizado con el programa Icon composer ( en developper->applications->utilidades) y tiene un formato ICNS con todos los tamaños dentro (512,256,128,32,16) .
Tambien he introducido dentro de Contents un archivo info.plist ( archivo xml con información del programa ) donde le he dicho como se llama el icono del programa .
A nivel de codigo el cambio es minimo :
so lo he puesto estas dos lineas :
Code: Select all  Expand view

 local cpath:=apppath()
   USE  ( cpath+"/Test" )
 

Adjunto el ejectutable :
http://rapidshare.com/files/404424172/browse.zip.html

Re: Primera consulta sobre fiveMac

PostPosted: Fri Jul 02, 2010 7:01 am
by Antonio Linares
Manuel,

Gracias! :-)

Re: Primera consulta sobre fiveMac

PostPosted: Fri Jul 02, 2010 10:20 am
by mastintin
Antonio la funcion apppath() creo que se puede simplificar asi ( FUNCIONA ) :
Code: Select all  Expand view

 HB_FUNC( APPPATH2 )
{
   NSString *buPath = [[NSBundle mainBundle] bundlePath];
   hb_retc( [ buPath cStringUsingEncoding : NSASCIIStringEncoding ] );
}
 


Por otro lado he realizado estas funciones para el manejo de imagenes FUNCIONA( por lo menos scalenonen y scaleajustratio ) :
Code: Select all  Expand view


 HB_FUNC( IMGSETSCALENONE )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling : NSImageScaleNone ];
}

  HB_FUNC( IMGSETSCALEAJUST )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling : NSImageScaleProportionallyDown ];
}

 HB_FUNC( IMGSETSCALEINDEPENDEN )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling : NSImageScaleAxesIndependently ];
}

 HB_FUNC( IMGSETSCALEAJUSTRATIO )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling :NSImageScaleProportionallyUpOrDown  ];
}
 


Tambien para el toolbar ( sin probar ) :
(nota ) no lo he conseguido probar porque al intentar compilar toolbars.m me da este error :

toolbars.m: In function ‘HB_FUN_TBRCREATE’:
toolbars.m:54: warning: class 'ToolBar' does not implement the 'NSToolbarDelegate' protocol


Code: Select all  Expand view

HB_FUNC( TBSETMODEICOLBL )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeIconAndLabel   ] ;
}

HB_FUNC( TBSETMODEICO )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeIconOnly   ] ;
}

HB_FUNC( TBSETMODEICOLBL )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeLabelOnly   ] ;
}

HB_FUNC( TBSETMODEDEFAULT )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeDefault  ] ;
}
 


Probablemente se podra realizar una sola función que resuma todas ;-)

Saludos.