Redimensionar Dialog automaticamente ao mudar resolução
Moderador: Moderadores
Redimensionar Dialog automaticamente ao mudar resolução
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
Uso v2.16
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Redimensionar Dialog automaticamente ao mudar resolução
Pesquise sobra "anchor".
Eh meio chatinho de implementar isso, mas funciona
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
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Redimensionar Dialog automaticamente ao mudar resolução
Janio,
Depois posta o exemplo pra gente, obrigado
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)
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)
Redimensionar Dialog automaticamente ao mudar resolução
No link abaixo tem um exemplo e explicação de como funciona.
viewtopic.php?f=46&t=9287&p=52872&hilit=anchor#p52872
Janio
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
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Redimensionar Dialog automaticamente ao mudar resolução
Janio,
Confirma ai:
Fiz essa função e coloquei no on init, tá certo ?
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)
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)
Redimensionar Dialog automaticamente ao mudar resolução
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.
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
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Redimensionar Dialog automaticamente ao mudar resolução
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()
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
Redimensionar Dialog automaticamente ao mudar resolução
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:
Perceba que os botões estão proporcionais ao tamanho do dialog. Qndo muda o tamanho os botões se auto-ajustam
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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Redimensionar Dialog automaticamente ao mudar resolução
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.janio escreveu:Nesse caso, talvez vc precise definir qual a distância de cada objeto deve ter em relação a janela hwgui
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Redimensionar Dialog automaticamente ao mudar resolução
Pois é.... seria só fazer igual GTWVG.
Dá pra dizer que não tem nada pra isso nos fontes, acaba sendo automático mesmo.... rs
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/
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/
Redimensionar Dialog automaticamente ao mudar resolução
Redimensionar Dialog em tempo de execução... me parece que o "pulo do gato" esteja no métoco move()
Veja este código:
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
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Redimensionar Dialog automaticamente ao mudar resolução
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.
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/
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/
Redimensionar Dialog automaticamente ao mudar resolução
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
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
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Redimensionar Dialog automaticamente ao mudar resolução
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
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
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br

