Page 2 of 3

Re: Nuevo FWH 13.07

PostPosted: Wed Jul 31, 2013 4:36 pm
by Antonio Linares
Manuel,

No creo que sea buena idea redimensionar el listview puesto que las mini páginas no pueden redimensionarse (son bitmaps pertenecientes a un ImageList -salvo que este admita redimensionamiento) por lo que habria que volver a crearlas todas nuevamente en cada redimensión...

preferible mantener su ancho y evitar esperas ó parpadeos :-)

Re: Nuevo FWH 13.07

PostPosted: Wed Jul 31, 2013 4:47 pm
by mastintin
Antonio Linares wrote:Manuel,

No creo que sea buena idea redimensionar el listview puesto que las mini páginas no pueden redimensionarse (son bitmaps pertenecientes a un ImageList -salvo que este admita redimensionamiento) por lo que habria que volver a crearlas todas nuevamente en cada redimensión...

preferible mantener su ancho y evitar esperas ó parpadeos :-)

Me refiero a acortar el alto , si se hace aparece un control vscroll para poder ver las miniaturas que no entren , pero estas no se redimensionan ;-) .
En otro orden de cosas , el comportamiento de las ventans MDI a cambiado notablemente . Mañana si tengo tiempo intentaré hacer un código "contenido" que muestre "mi" problema , pero te adelanto lo que pasa . su pongamos una ventana MDI con botonBar , un boton lanza una ventana MDICHILD que tiene un xbrowse con foco ( permite moverse por los registros) . pulso otro boton que me saca un msginfo con informacion , cuando cierro ese msginfo , el foco queda "perdido".
Antes devolvía el foco al brwse de la ventana MDICHILD , ahora no se realmente donde queda el foco , pero no es el browse seguro.

Re: Nuevo FWH 13.07

PostPosted: Wed Jul 31, 2013 5:17 pm
by fgondi
Antonio,
Funciono. Muchas gracias

Re: Nuevo FWH 13.07

PostPosted: Wed Jul 31, 2013 5:31 pm
by Antonio Linares
Manuel,

Entendido, gracias :-)

Te agradezco si me proporcionas un ejemplo de lo que comentas de las MDI, gracias

Re: Nuevo FWH 13.07

PostPosted: Wed Jul 31, 2013 9:23 pm
by mastintin
Antonio Linares wrote:Te agradezco si me proporcionas un ejemplo de lo que comentas de las MDI, gracias


Aqui te coloco para descargar un archivo zip con testfoco.prg y los programas compilados con las dos versiones para que veas la diferencia .
http://ge.tt/3a4PtTn/v/0?c

Para ver la diferencia lanza el programa , pulsa el primer boton de la barra , se abre una ventana hija , con las teclas de cursor te mueves por los registros , pulsas el boton dos , sale un msginfo , lo cierras y pulsas las teclas de cursor , veras que en una version el foco sigue en el browse y en la nueva no .
El codigo :

Code: Select all  Expand view

// Working with MDI enviroments

#include "FiveWin.ch"
#include "xbrowse.ch"


REQUEST DBFCDX

static oWnd

//----------------------------------------------------------------------------//

function Main()

   local oWndEdit, oBar, oIcon, oImage
   local cName := "FiveWin power"

   USE Clientes NEW SHARED VIA "DBFCDX"
 
   DEFINE ICON oIcon RESOURCE "test"

   DEFINE WINDOW oWnd FROM 1, 1 TO 20, 70 TITLE "I am the MDI Frame" ;
      MDI ;
     ICON oIcon


   SET MESSAGE OF oWnd TO "Main Window"

   DEFINE BUTTONBAR oBar 2007 OF ownd

    DEFINE BUTTON OF oBar GROUP ;
    PROMPT  "mdi" TOOLTIP "lanzar mdichild"  ;
    ACTION CreaMdiChild()
   
   DEFINE BUTTON OF oBar GROUP ;
    PROMPT  "info" TOOLTIP "lanzar msginfo"  ;
    ACTION Msginfo("hola")
   

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      VALID MsgYesNo( "Want to End ?" )

return nil

//----------------------------------------------------------------------------//

Function CreaMdiChild()
   local oChild, oBrw

   DEFINE WINDOW oChild TITLE "Basic Cell selector browse" MDICHILD OF oWnd

    DEFINE BUTTONBAR oBar 2007 OF oChild

   @ 0,0 XBROWSE oBrw OF oChild ALIAS Alias() AUTOCOLS

   oBrw:CreateFromCode()
   oBrw:cToolTip = "This is a test"
   oChild:oClient := oBrw
   oBrw:SetFocus()

RETURN NIL

 


Saludos.

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 8:34 am
by mastintin
Respecto al redimensionado del listview . Ya lo tengo funcionanado . El código
Code: Select all  Expand view


METHOD Activate() CLASS TPreview

   ACTIVATE WINDOW ::oWnd MAXIMIZED ;
      ON RESIZE  (  ::PaintMeta()   , ::ChangeListView()  )    
     ......
   

METHOD ChangeListView() CLASS TPreview
local oRect          := ::oWnd:GetCliRect()
local nHeight        := oRect:nHeight

::oLvw:nHeight := nHeight -  If( ::oWnd:oBar != nil, ::oWnd:oBar:nHeight() - 2,;
                             ::oWnd:oTop:nHeight() ) - ;
                             If( ::oWnd:oMsgBar != nil, ::oWnd:oMsgBar:nHeight(),;
                             ::oWnd:oBottom:nHeight() )
                       
::oLvw:refresh()

Return nil

 

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 12:00 pm
by Antonio Linares
Manuel,

Localizado el problema del foco, se debe al cambio reciente en mdi.c:

Antes teníamos (y con este código el foco va bien):
Code: Select all  Expand view
LRESULT WINAPI _WndFrameProc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
   return DefFrameProc( hWnd, GetWindow( hWnd, GW_CHILD ), wMsg, wParam, lParam );
}


Este es el más reciente y que causa el problema:
Code: Select all  Expand view
LRESULT WINAPI _WndFrameProc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
   HWND hWndClient = GetWindow( hWnd, GW_CHILD );
   char szName[ 20 ];
   
   GetClassName( hWndClient, szName, 19 );
   
   while( hWndClient && strcmp( szName, "MDICLIENT" ) != 0 )
   {
      hWndClient = GetWindow( hWndClient, GW_HWNDNEXT );
      GetClassName( hWndClient, szName, 19 );
   }
       
   return DefFrameProc( hWnd, hWndClient, wMsg, wParam, lParam );
}


Asi que de momento hay que usar la versión anterior hasta que verifiquemos si hay algun error en el código del nuevo.

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 12:56 pm
by Antonio Linares
El asunto me ha hecho desempolvar mi viejo libro Windows++ de Paul Dilascia, para ver que decía el gran maestro:

Image

Y en base a mis pruebas, salvo que me equivoque, parece que ese código no es correcto...

Asi que tengo que ver donde está mi error ó el suyo

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 1:21 pm
by Antonio Linares
Para aquellos que se pregunten por que quiero modificar
un codigo que ha funcionado bien durante años y que ademas
avala Paul Dilascia, la razon es que ese codigo parece fallar
en 64 bits.

De todas formas voy a tracearlo con OutputDebugString() y ver
si es correcto o si mis cambios estaban mal

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 2:32 pm
by Antonio Linares
Pues el código de Paul Dilascia y el que usaba FWH está bien,

el fallo, en la nueva versión, era comparar el nombre de la clase con "MDICLIENT" cuando el nombre que usa Windows es "MDIClient"

asi que volvemos a usar el código que hasta ahora hemos usado :-) y seguir buscando cual pueda ser la causa de que a veces falle en 64 bits.

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 3:17 pm
by Antonio Linares
Bueno, pues pese a lo que diga Paul Dilascia, este el es código que vamos a usar:

Code: Select all  Expand view
LRESULT WINAPI _WndFrameProc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
   if( wMsg == WM_SETFOCUS )
      return DefFrameProc( hWnd, GetWindow( hWnd, GW_CHILD ), wMsg, wParam, lParam );
   else  
      return DefFrameProc( hWnd, NULL, wMsg, wParam, lParam );
}
 


La razón es que con este codigo aplicaciones MDI con un control situado a un lado, funcionan correctamente. Podeis probar samples\test2003.prg. Suprimir la funcion WinRun() incluida en el ejemplo y vereis que con los cambios propuestos funciona bien :-)

Y con esa pequeña salvedad para WM_SETFOCUS para que nos situe bien el foco.

Vamos a publicar un nuevo build de FWH 13.07 con estos cambios.

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 4:05 pm
by Antonio Linares
Podemos mantener el código de Paul Dilascia:

Code: Select all  Expand view
LRESULT WINAPI _WndFrameProc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
   return DefFrameProc( hWnd, GetWindow( hWnd, GW_CHILD ), wMsg, wParam, lParam );
}


Si hacemos esta modificación en La Clase TMdiFrame Method Command:
Code: Select all  Expand view
METHOD Command( nWParam, nLParam ) CLASS TMdiFrame

   local lToolBar := ( GetClassName( nLParam ) == "ToolbarWindow32" )

   if ::oWndActive != nil
      do case
         case nWParam == 61472
              ::oWndActive:Minimize()
           
         case nWParam == 61728
              ::oWndActive:Restore()
           
         case nWParam == 61536
              ::oWndActive:End()
      endcase
   endif  

   do case
      case ! lToolBar .and. nWParam - If( IsExe64(), 1791, 0 ) < 100   // MdiChild Menu Selection
           nWParam -= 1791
           if nWParam >= 1 .and. nWParam <= Len( ::oWndClient:aWnd )
              ::oWndClient:aWnd[ nWParam ]:SetFocus()
           endif

      otherwise
         ::Super:Command( nWParam, nLParam )
   endcase

return 0


Asi que este va a ser el código definitivo. Funciona bien samples/test2003.prg sin necesidad de la función WinRun() que incluye y funciona bien con FWH 64 tambien :-)

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 4:28 pm
by lucasdebeltran
Antonio,

Por favor, ¿podrías esperar hasta solucionar los errores del rpreview que te he comentado?.

Adicionalmente, en el icono, las opciones PDF y WORD format, en español deben llamarse formato o quitar el format.

Muchas gracias.

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 4:36 pm
by Antonio Linares
Lucas,

En el preview el botón de exportar a PDF funciona en 32 bits y de momento no funciona en 64 bits. No sabemos lo que tardaremos en solucionar esto. Igual ocurre con la opción de email, teneis que probarla en distintas configuraciones y que nos comenteis los resultados.

Pero no podemos esperar a todo eso para publicar un nuevo build que es necesario ya :-)

Re: Nuevo FWH 13.07

PostPosted: Thu Aug 01, 2013 4:47 pm
by Antonio Linares
Lucas,

Las traducciones en prev64sp.dll y los literales que faltaban se han incluido debidamente traducidos