Redimensionar Dialog automaticamente ao mudar resolução

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por ANDRIL »

O sistema esta aberto, tenho um TIMER que verifica de tempo em tempo se o usuário alterou a resolução da tela no Windows. Eu consigo detectar a alteração, porém, como faço para repintar a Dialog ou atualizá-la para as novas definições.
Uso v2.16
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por janio »

Pesquise sobra "anchor".

Eh meio chatinho de implementar isso, mas funciona
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por asimoes »

Janio,

Depois posta o exemplo pra gente, obrigado
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por janio »

No link abaixo tem um exemplo e explicação de como funciona.

viewtopic.php?f=46&t=9287&p=52872&hilit=anchor#p52872

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por asimoes »

Janio,

Confirma ai:
Fiz essa função e coloquei no on init, tá certo ?

Código: Selecionar todos

ON INIT {|O| Redimensiona(o) } ;
....
FUNCTION Redimensiona( oObject )
LOCAL I

   FOR i:=1 to Len( oObject:aControls )
      obj := oObject:aControls[i]
      IF Type("obj:anchor") != "U"
         obj:anchor := 120 && exemplo
      ENDIF 
   NEXT    
   
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por janio »

aSimoes,

Eu não uso dessa forma pq como o Basso falou às vezes nem todos os objetos do dialog devem ser redimensionados da mesma maneira.

Eh um trabalho chato, que deve ser testado objeto a objeto para ver qual melhor combinação de anchor deve ser usada.

Ultimamente eu tenho preferido fazer janelas com tamanho fixo, justamente para evitar esse tipo de coisa.

Outra coisa...

Fuçando aqui nas minhas coisas encontrei mais explicações e exemplos de como funciona o anchor.
Anchor é uma propriedade que varia de 1 a 512
1 - TOP ABSOLUTO
2 - LEFT ABSOLUTO
4 - BOTTOM ABSOLUTO
8 - RIGHT ABSOLUTO
16 TOP RELATIVO
32 - LEFT RELATIVO
64 - BOTTOM RELATIVO
128 - RIGHT RELATIVO

voce pode combinar os efeitos

Exemplo:
Se voce quer manter uma toolbar ocupando toda a largura do FORM ao maximizar ele USE anchor = 11
Se voce quer manter um botão sempre do lado direito do form mantendo sempre a mesma distancia da borda direita use anchor = 9
Luis Fernando Basso
lfbasso@via-rs.net


Corretamente sim, de acordo com seu valor que voce definiu.

1 - TOP ABSOLUTO
2 - LEFT ABSOLUTO
4 - BOTTOM ABSOLUTO
8 - RIGHT ABSOLUTO
16 TOP RELATIVO
32 - LEFT RELATIVO
64 - BOTTOM RELATIVO
128 - RIGHT RELATIVO


então para se posicionar a direita e mantendo o topo
TOP_ABSOLUTO+RIGHT_ABSOLUTO = 9
OU
TOP_RELATIVO + RIGHT_RELATIVO = 144

Veja este exemplo



MAXIMIZE O DIALOG

#include "hwgui.ch"

STATIC Thisform


FUNCTION _anchor

LOCAL vEdit1 := ""
LOCAL oButtonex1, oEdit1, oLabel1, oBrowse1

INIT DIALOG oDlg TITLE "Form1" ;
AT 257,139 SIZE 486,365 ;
FONT HFont():Add( 'Verdana',0,-13,400,,,) CLIPPER NOEXIT ;
STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_MAXIMIZEBOX+WS_SIZEBOX+DS_CENTER

Thisform := oDlg

@ 370,13 BUTTONEX oButtonex1 CAPTION "Fechar" SIZE 98,32 ;
STYLE WS_TABSTOP ;
ON CLICK {|| ThisForm:CLOSE() }
oButtonex1:Anchor := 9

@ 111,58 GET oEdit1 VAR vEdit1 SIZE 203,22
oEdit1:Anchor := 10

@ 51,60 SAY oLabel1 CAPTION "Nome:" SIZE 47,19

@ 24,94 BROWSE oBrowse1 ARRAY SIZE 431,258 ;
STYLE WS_TABSTOP

oBrowse1:aArray := {}
oBrowse1:AddColumn( HColumn():New(, ColumnArBlock() ,'U',, 0
,.F.,0,0,,,,,,,,,))
oBrowse1:AddColumn( HColumn():New(, ColumnArBlock() ,'U',, 0
,.F.,0,0,,,,,,,,,))
oBrowse1:Anchor := 15

ACTIVATE DIALOG oDlg

RETURN oDlg:lresult
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por ANDRIL »

Agradeço as informações, porém o anchor ele não serve para o que preciso. Anchor ele mantem uma posição absoluta ou relativa do objeto na janela.
Preciso reconstruir a janela com os novos valores da largura e altura da nova resolução da tela definida pelo Windows pelo que Basso informou em algum tópico, Dialog nao tem um Anchor próprio e sim cada elemento. Outra, na v2.16 ainda não tinha ele, acho que entrou na 2.17 adiante.

Tipo se a janela esta em 1024x728 e mudo para 1280x720 a tela do monitor fica grande mas o sistema continua com a janela do mesmo tamanho. Precisava reconstruir a janela para obter todo o espaço da tela.

Tipo
oWnd:Refresh() ou oWnd:Redefine()
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por janio »

Nesse caso, talvez vc precise definir qual a distância de cada objeto deve ter em relação a janela hwgui, que por sua vez esta terá o tamanho x em relação a resolução do monitor.

Se vc já tem a resolução do monitor, eh so definir o dialog em relação a esse tamanho.

tipo:

Código: Selecionar todos

  INIT DIALOG oDlg TITLE "Transacaoes TEF realizadas" ;
    AT 0, 0 SIZE ResoluçãoMonitor-100,ResoluçãoMonitor-200 NOEXIT CLIPPER ;
	 ON EXIT {|| SaidaBrowseTef() } ;
    STYLE WS_POPUP+WS_CAPTION+WS_SIZEBOX+DS_CENTER

    Thisform := oDlg

   @ 004,002 BROWSE oBrowse1 DATABASE SIZE oDlg:nwidth-007,oDlg:nheight-050 ;
		FONT HFont():Add( 'Arial',0,-18,400,,,) ;
   	STYLE  WS_VSCROLL + WS_HSCROLL ;
   	ON UPDATE {|| oBrowse1:REFRESH() } ;
   	ON KEYDOWN {|oBrowse1, nKey| BrowseKeyDbEdit(oBrowse1, nKey) } ;
   	ON CLICK {|| EndDialog() }

   for n := 1 to Len( aCampos )
      oBrowse1:AddColumn( HColumn():New( aCabecalho[n] , &( "{||" + aCAMPOS[n] + "}" ) ) )
	   oBrowse1:aColumns[n]:nJusHead := DT_CENTER   
	   oBrowse1:aColumns[n]:picture:= aPict[n]		
   	oBrowse1:aColumns[n]:length := aTam[n]

      oBrowse1:aColumns[n]:bColorBlock := {|| Iif( stsfin='2',;
                  {CorPreto, aVerde, CorBranco, CorAzul} , ;
                  Iif( stsfin='3',;
                  {CorVermelho, aAmarelo , CorVermelho, CorAzul } ,;
                  Iif( stsfin='1',;
                  {x_CYAN, aAmarelo , CorVermelho, CorAzul } ,;
                  {CorPreto   , aAmarelo , CorBranco  , CorAzul }) )) }

   next

	*

   @ oDlg:nwidth-395,oDlg:nheight-43 BUTTONEX oButtonex1 CAPTION "&Cancela Transacao"   SIZE 190,40 ;
	   FONT HFont():Add( 'Verdana',0,-14,700,,,) ;
		BITMAP (HBitmap():AddResource('cancelB')):handle ;
      ON CLICK {|| CancelaTransacaoTefBrowse(Identi, nomred, numnsu, codcrt, totcrt, numcup, cupnum, nrssat, stsfin), EndDialog() } ;
      STYLE BS_CENTER +WS_TABSTOP 

   @ oDlg:nwidth-197,oDlg:nheight-43 BUTTONEX oButtonex2 CAPTION "&Retorna"   SIZE 190,40 ;
	   FONT HFont():Add( 'Verdana',0,-14,700,,,) ;
		ICON (HIcon():AddResource('ExitIco')):handle ;
      STYLE BS_CENTER +WS_TABSTOP ;
   	ON CLICK {|| MyLastkey:= 27, EndDialog() }

   ACTIVATE DIALOG oDlg 
Perceba que os botões estão proporcionais ao tamanho do dialog. Qndo muda o tamanho os botões se auto-ajustam
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por ANDRIL »

janio escreveu:Nesse caso, talvez vc precise definir qual a distância de cada objeto deve ter em relação a janela hwgui
Isso já faço. Os objetos são ajustados automaticamente, o problema esta em fazer a janela se alterar automaticamente, após a mudança da resolução de video, se fizesse um REFRESH ela ficaria do tamanho da tela e as posições dos objetos acompanhavam.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por JoséQuintas »

Pois é.... seria só fazer igual GTWVG.
Dá pra dizer que não tem nada pra isso nos fontes, acaba sendo automático mesmo.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por janio »

Redimensionar Dialog em tempo de execução... me parece que o "pulo do gato" esteja no métoco move()

Veja este código:

Código: Selecionar todos

   If aTxtSize[2] > 60
     nTop := ( aTxtSize[2] - 60 ) 
     Thisform:Move( ,,, Thisform:nHeight + nTop )
     Thisform:oLabel1:Move( ,Thisform:oLabel1:nTop,, aTxtSize[2] + 5 )   
     Thisform:oShape1:Move( ,Thisform:oShape1:nTop + nTop )
     
     Thisform:Center()
     
     i := 1
     Do While i <= nBt
       cBtn := "oCmd"+Str(i,1)
       Thisform:&cBtn:Move( , Thisform:&cBtn:nTop + nTop, , )
       i ++
     Enddo

   Endif 
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por JoséQuintas »

Não exatamente, seria no redraw, resize, ou algo assim.
Ao mexer na janela principal, ela "avisa" a cada componente dentro dela.
E cada componente trata esse move/redraw ou sei lá o que.

Na GTWVG, ela trabalha com linhas/colunas.
Então, na hora que o componente vai se redesenhar, a transformação de linha/coluna pra calcular o posicionamento acaba desenhando o controle redimensionado.
Por isso eu disse que praticamente não tem fonte pra redimensionar, esse cálculo acaba fazendo isso sozinho.

Lembrando que no Windows 10, o próprio Windows pode fazer o zoom de um aplicativo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por janio »

O codigo postado eh de uma função de aviso ao usuário! Os avisos podem ter uma, duas, três... ou 10 linhas!

O dialog eh criado com tamanho fixo e, conforme o numero de linhas, eh redimensionado!

O Basso criou essa função e disponibilizou em algum tópico

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Redimensionar Dialog automaticamente ao mudar resolução

Mensagem por esbasso »

Redimensionar um DIALOG é facil baseado na resolução

Thisform:Move( , , GETDESKTOPWIDTH() ,GETDESKTOPHEIGHT )

metodo move ( esquerda, topo, largura, altura )
centralizar
THISFORM:CENTER()

Pode colocar isso no init do dialog
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Responder