Amiguinho,
Em meu sistema faço assim:
...
ResLargura := GetSysMetrics(0)
ResAltura := GetSysMetrics(1)
Resolucao := alltrim(str(ResLargura))+'x'+alltrim(str(ResAltura))
do case
case Resolucao = "640x480"
? "Resolucao Impropria para trabalho"
quit
case Resolucao = "800x600"
ResLargura := 800
ResAltura := 600
case Resolucao = "1024x768"
ResLargura := 1024 // 800
ResAltura := 768 // 600
case Resolucao = "1280x1024"
ResLargura := 1280 // 1024
ResAltura := 1024 // 768
endcase
...
Após esta verificação, caso queira recuperar a ultima posição salva, use:
...
TelaMTopo := Val(VerifyINI( "PROGRAMA" , "COORDT", "000" , cPath+"seu.ini" ))
TelaMEsque := Val(VerifyINI( "PROGRAMA" , "COORDL", "000" , cPath+"seu.ini" ))
ResAltura := Val(VerifyINI( "PROGRAMA" , "COORDH", str(ResAltura) , cPath+"seu.ini" ))
ResLargura := Val(VerifyINI( "PROGRAMA" , "COORDW", str(ResLargura) , cPath+"seu.ini" ))
ResAltura := ResAltura - TelaMTopo
ResLargura := ResLargura - TelaMEsque
...
Para abrir a janela principal, acrescente:
...
ACTIVATE WINDOW oWnd MAXIMIZED VALID SalvaCoordenadas(oWnd) ; // Salva ultima coordenada antes de sair
oWnd:Move( TelaMTopo,TelaMEsque,ResLargura,ResAltura, .t. ) ; // Aqui a tela é reajustada
ON RESIZE SalvaCoordenadas(oWnd) // Salva coordenadas após alterar posições da janela
...
Para que tudo funcione de forma adequada, acrescente as funções:
...
function SalvaCoordenadas(oWnd)
VerifyINI( "PROGRAMA", "COORDT", GetWndRect(oWnd:hWnd)[1], cPath+"seu.ini", .t. )
VerifyINI( "PROGRAMA", "COORDL", GetWndRect(oWnd:hWnd)[2], cPath+"seu.ini", .t. )
VerifyINI( "PROGRAMA", "COORDH", GetWndRect(oWnd:hWnd)[3], cPath+"seu.ini", .t. )
VerifyINI( "PROGRAMA", "COORDW", GetWndRect(oWnd:hWnd)[4], cPath+"seu.ini", .t. )
return nil
function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
oIni := TIni():New( _inifile_ )
if _grava_ = .t.
oIni:Set( _section_, _entry_, _var_ )
endif
return oIni:Get( _section_, _entry_, _var_, _var_ )
...