Guardando la posición de un dialogo
Guardando la posición de un dialogo
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
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
- karinha
- Posts: 7935
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Guardando la posición de un dialogo
En FWH1306 funciona bien, guarda en el dlgpos.ini.
Salu2
Code: Select all | Expand
#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
- karinha
- Posts: 7935
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Guardando la posición de un dialogo
Code: Select all | Expand
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
- karinha
- Posts: 7935
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Guardando la posición de un dialogo
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:
Gracias nuevamente por tus sugerencias
Saludos
Code: Select all | Expand
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
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: Guardando la posición de un dialogo
Horacio,
Prueba a llamar a oDlg:CoorsUpdate() antes de tomar los valores de nBottom y nRight
Prueba a llamar a oDlg:CoorsUpdate() antes de tomar los valores de nBottom y nRight
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: Guardando la posición de un dialogo
Estas usando oDlg:GetRect() asi que no sirve lo que te he dicho.
A que te refieres que no respeta esos valores ? Aumenta, disminuye ?
A que te refieres que no respeta esos valores ? Aumenta, disminuye ?
Re: Guardando la posición de un dialogo
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
Saludos
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: Guardando la posición de un dialogo
Horacio,
Prueba a asignarle el tamaño usando oDlg:SetSize( nAncho, nAlto, lRepintar )
Prueba a asignarle el tamaño usando oDlg:SetSize( nAncho, nAlto, lRepintar )
Re: Guardando la posición de un dialogo
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 ![Smile :)](./images/smilies/icon_smile.gif)
Saludos
![Smile :)](./images/smilies/icon_smile.gif)
Saludos