FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Guardando la posici贸n de un dialogo
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM

Guardando la posici贸n de un dialogo

Posted: Wed Nov 12, 2014 03: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

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Re: Guardando la posici贸n de un dialogo

Posted: Thu Nov 13, 2014 12:05 PM
En FWH1306 funciona bien, guarda en el dlgpos.ini.

Code (fw): Select all Collapse
#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
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Re: Guardando la posici贸n de un dialogo

Posted: Thu Nov 13, 2014 12:06 PM
Code (fw): Select all Collapse
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
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM

Re: Guardando la posici贸n de un dialogo

Posted: Thu Nov 13, 2014 12:07 PM
DlgPos.ini

Code (fw): Select all Collapse
[Dialog]
nTop=164
nLeft=180
nBottom=664
nRight=880


Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM

Re: Guardando la posici贸n de un dialogo

Posted: Fri Nov 14, 2014 04: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 (fw): Select all Collapse
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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Guardando la posici贸n de un dialogo

Posted: Fri Nov 14, 2014 05: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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Guardando la posici贸n de un dialogo

Posted: Fri Nov 14, 2014 05: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
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM

Re: Guardando la posici贸n de un dialogo

Posted: 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

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Guardando la posici贸n de un dialogo

Posted: Sat Nov 15, 2014 01:43 PM

Horacio,

Prueba a asignarle el tama帽o usando oDlg:SetSize( nAncho, nAlto, lRepintar )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM

Re: Guardando la posici贸n de un dialogo

Posted: Sat Nov 15, 2014 03: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

Continue the discussion