Guardando la posición de un dialogo

Guardando la posición de un dialogo

Postby horacio » Wed Nov 12, 2014 3:03 pm

Colegas, quiero que los diálogos guarden su posición al cerrar. Estoy tomando como modelo el código de "dlgsave.prg" que se encuentra en samples. Me guarda la posición del dialogo pero no respeta las dimensiones del mismo ( el dialogo es de recursos ).

Aquí el dialogo original
http://imagizer.imageshack.us/a/img537/7756/ueQMqp.jpg

Aquí con las funciones para mantener la última posición
http://imageshack.com/a/img540/3066/QGfTZO.jpg

Alguna idea ? Muchísimas gracias.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Guardando la posición de un dialogo

Postby karinha » Thu Nov 13, 2014 12:05 pm

En FWH1306 funciona bien, guarda en el dlgpos.ini.

Code: Select all  Expand view

#include "fivewin.ch"

function Main()

   local oWnd

   DEFINE WINDOW oWnd

   @ 40,40 BUTTON "Dialog" OF oWnd SIZE 80,28 PIXEL ACTION CreateDlg()

   ACTIVATE WINDOW oWnd MAXIMIZED

return nil

static function CreateDlg()

   static lOk  := .t.

   local oDlg
   local lInit := .t.

   if ! lOK
      return nil
   endif

   // In case of resource
   DEFINE DIALOG oDlg RESOURCE "DIALOGO" ;
      STYLE nOr( WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, ;
      WS_MINIMIZEBOX, WS_MAXIMIZEBOX )


   /* //Desde codigo
   DEFINE DIALOG oDlg ;
      STYLE nOr( WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, ;
      WS_MINIMIZEBOX, WS_MAXIMIZEBOX )
   */


   oDlg:bMoved    := { || If( ! lInit, SaveDlgPos( oDlg ), nil ) }
   oDlg:bResized  := { || SaveDlgPos( oDlg ) }

   ACTIVATE DIALOG oDlg ON INIT ( RestoreDlgPos( oDlg ), lInit := .f. ) ;
      VALID ( SaveDlgPos( oDlg ), lOK := .t. )

return nil

static function SaveDlgPos( oDlg )

   local oIni, oRect

   oIni     := TIni():New( ".\dlgpos.ini" )

   if ! IsIconic( oDlg:hWnd ) .and. ! IsZoomed( oDlg:hWnd )
      oRect    := oDlg:GetRect()
      oIni:Set( "Dialog", "nTop",    oRect:nTop    )
      oIni:Set( "Dialog", "nLeft",   oRect:nLeft   )
      oIni:Set( "Dialog", "nBottom", oRect:nBottom )
      oIni:Set( "Dialog", "nRight",  oRect:nRight  )
   endif

return nil

static function RestoreDlgPos( oDlg )

   local oIni
   local nTop,nLeft, nBottom, nRight

   oIni     := TIni():New( ".\dlgpos.ini" )
   nTop     := oIni:Get( "Dialog", "nTop",    100 )
   nLeft    := oIni:Get( "Dialog", "nLeft",   100 )
   nBottom  := oIni:Get( "Dialog", "nBottom", 600 )
   nRight   := oIni:Get( "Dialog", "nRight",  800 )

   oDlg:Move( nTop, nLeft, nRight - nLeft, nBottom - nTop )

return nil
 


Salu2

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Guardando la posición de un dialogo

Postby karinha » Thu Nov 13, 2014 12:06 pm

Code: Select all  Expand view

DIALOGO DIALOG 145, 70, 336, 213
STYLE DS_ABSALIGN | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
CAPTION "Dialogo"
FONT 8, "MS Sans Serif"
{
}
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Guardando la posición de un dialogo

Postby karinha » Thu Nov 13, 2014 12:07 pm

DlgPos.ini

Code: Select all  Expand view

[Dialog]
nTop=164
nLeft=180
nBottom=664
nRight=880
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Guardando la posición de un dialogo

Postby horacio » Fri Nov 14, 2014 4:12 pm

Karinha, gracias por responder. Con la versión 14.09 funciona tal cual detallé en el primer post de este hilo. Desde recursos el diálogo no mantiene las dimensiones, si respeta las coordenadas donde cerró por última vez. Lo resolví de la siguiente manera:

Code: Select all  Expand view

static function RestoreDlgPos( oDlg )

   local oIni
   local nTop,nLeft, nBottom, nRight

   oIni     := TIni():New( ".\dlgpos.ini" )
   nTop     := oIni:Get( "Dialog", "nTop",    100 )
   nLeft    := oIni:Get( "Dialog", "nLeft",   100 )
   nBottom  := oIni:Get( "Dialog", "nBottom", 600 )
   nRight   := oIni:Get( "Dialog", "nRight",  800 )

   //oDlg:Move( nTop, nLeft, nRight - nLeft, nBottom - nTop )
   oDlg:Move( nTop, nLeft )

 


Gracias nuevamente por tus sugerencias

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Guardando la posición de un dialogo

Postby Antonio Linares » Fri Nov 14, 2014 5:15 pm

Horacio,

Prueba a llamar a oDlg:CoorsUpdate() antes de tomar los valores de nBottom y nRight
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: Guardando la posición de un dialogo

Postby Antonio Linares » Fri Nov 14, 2014 5:17 pm

Estas usando oDlg:GetRect() asi que no sirve lo que te he dicho.

A que te refieres que no respeta esos valores ? Aumenta, disminuye ?
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: Guardando la posición de un dialogo

Postby horacio » Sat Nov 15, 2014 11:17 am

Antonio, gracias por tus respuestas. En el primer post de este hilo adjunte dos imagenes, la primera muestra las dimensiones correctas del dialogo, la otra aplicando las funciones para que el cuadro mantenga su ultima posicion. La posicion la mantiene pero las dimensiones del cuadro no las respeta. En mi caso aumenta. Tome estas funciones de DlgSave.prg que se encuentra en la carpeta samples. Solo que cambie el dialogo por uno de recursos ( el original es por codigo y funciona bien ).

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Guardando la posición de un dialogo

Postby Antonio Linares » Sat Nov 15, 2014 1:43 pm

Horacio,

Prueba a asignarle el tamaño usando oDlg:SetSize( nAncho, nAlto, lRepintar )
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: Guardando la posición de un dialogo

Postby horacio » Sat Nov 15, 2014 3:52 pm

Antonio, nuevamente gracias. La solución que le postee a Karinha para mi funciona. Rara vez utilizo dialogos desde código, por lo tanto mantendré el código de esta manera. Siguiendo la máxima del programador "si funciona no lo toques ". Gracias :)

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 95 guests