Clipper On Line • Ver Tópico - Redimensionar Dialog automaticamente ao mudar resolução

Redimensionar Dialog automaticamente ao mudar resolução

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor ANDRIL » 04 Out 2017 09:36

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor janio » 05 Out 2017 10:19

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor asimoes » 05 Out 2017 10:27

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor janio » 05 Out 2017 11:07

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor asimoes » 05 Out 2017 11:29

Janio,

Confirma ai:
Fiz essa função e coloquei no on init, tá certo ?
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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor janio » 05 Out 2017 11:55

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor ANDRIL » 05 Out 2017 14:40

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor janio » 05 Out 2017 15:03

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:
  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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor ANDRIL » 05 Out 2017 18:59

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor JoséQuintas » 05 Out 2017 21:36

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor janio » 06 Out 2017 09:37

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

Veja este código:
   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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor JoséQuintas » 06 Out 2017 10:13

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor janio » 06 Out 2017 11:41

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
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Redimensionar Dialog automaticamente ao mudar resolução

Mensagempor esbasso » 07 Nov 2017 23:26

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
esbasso
Colaborador

Colaborador
 
Mensagens: 325
Data de registro: 24 Jan 2007 16:49
Cidade/Estado: CHAPECO/SC
Curtiu: 0 vez
Mens.Curtidas: 8 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro