Auto-Ajuste de tela e componentes

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auto-Ajuste de tela e componentes

Mensagem por Pablo César »

Estou disponibilizando uma solução de AUTOADJUST em Minigui e que não tinha para HMG. O propóstio é se auto-ajustar os componentes de acordo com a dimensão da tela em tempo de execução. Vale como aporte para o aprendizado:

Código: Selecionar todos

#include <hmg.ch>

Function Main()
Private cForm:='Principal'

DEFINE WINDOW  Principal AT 126,66 WIDTH 648 HEIGHT 464 ;
	TITLE 'AutoAdjust (c)2007-2010 MigSoft ' MAIN;
    ON INIT Autoaj(cForm) ;
    ON SIZE Autoaj(cForm) ;
    ON MAXIMIZE Autoaj(cForm)

    @ 18,31 FRAME frame_1 CAPTION "Datos Generales" ;
		WIDTH 576 HEIGHT 321
  
		principal.frame_1.fontcolor:={0,0,0}
		principal.frame_1.fontname:='MS Sans Serif'
		principal.frame_1.fontsize:= 10
  
    @ 40,491 IMAGE image_1 PICTURE "HP_SAVE" ;
		WIDTH 100 HEIGHT 100 STRETCH
  
    @ 66,309 DATEPICKER datepicker_1 WIDTH 120 ;
		FONT 'MS Sans Serif' SIZE 10
  
		principal.datepicker_1.fontcolor:={0,0,0}
		principal.datepicker_1.backcolor:={255,255,255}

    DEFINE TAB tab_1 AT 40,40 WIDTH 250 HEIGHT 250 ;
		FONT 'MS Sans Serif' SIZE 10

		DEFINE PAGE " Page1 "
            @ 48,24 GRID grid_1 WIDTH 200 HEIGHT 158 ;
				HEADERS {'one','two'} WIDTHS  {60,60} ;
                FONT 'MS Sans Serif' SIZE 10

                principal.grid_1.fontcolor:={0,0,0}
				principal.grid_1.AddItem( {"Row1","Row1"} )
                principal.grid_1.AddItem( {"Row2","Row2"} )
                principal.grid_1.AddItem( {"Row3","Row3"} )
                principal.grid_1.value:=1
        END PAGE

        DEFINE PAGE " Page2 "
            @ 121,29 PROGRESSBAR progressbar_1 ;
                WIDTH 191 HEIGHT 34 VALUE 25

                principal.progressbar_1.fontcolor:={0,0,0}
          END PAGE
    END TAB

    @ 108,308 LISTBOX list_1 WIDTH 158 HEIGHT 99 ;
        FONT 'MS Sans Serif' SIZE 10

        principal.list_1.fontcolor:={0,0,0}
        principal.list_1.backcolor:={255,255,255}
		principal.list_1.AddItem( "Item 1" )
        principal.list_1.AddItem( "Item 2" )
        principal.list_1.AddItem( "Item 3" )
        principal.list_1.value:=1

    @ 224,313 COMBOBOX combo_1 WIDTH 100 VALUE 2;
        FONT 'MS Sans Serif' SIZE 10 ;
        ITEMS {"MiniGUI","HMG","ooHG"}

        principal.combo_1.fontcolor:={0,0,0}
        principal.combo_1.backcolor:={255,255,255}
		
	@ 243,488 BUTTON picbutt_3 PICTURE 'HMG_EDIT_CANCEL';
        ACTION msginfo('Pic button pressed') WIDTH 100 HEIGHT 44
		
	DEFINE RADIOGROUP RadioGroup_1
        ROW    155
        COL    490
        WIDTH  100
        HEIGHT 50
        OPTIONS { 'Option 1','Option 2'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 27
        BACKCOLOR Nil
        FONTCOLOR Nil
        READONLY Nil
        HORIZONTAL .F. 
    END RADIOGROUP
	
	DEFINE RADIOGROUP RadioGroup_2
        ROW    260
        COL    310
        WIDTH  160
        HEIGHT 28
        OPTIONS { 'Option 1','Option 2'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 70
        BACKCOLOR Nil
        FONTCOLOR Nil
        READONLY Nil
        HORIZONTAL .T. 
    END RADIOGROUP
	
	DEFINE STATUSBAR FONT "Arial" SIZE 9
        STATUSITEM "Test of StatusBar"
        STATUSITEM "Test 2"
        STATUSITEM "Test3"
    END STATUSBAR
	
	DEFINE CHECKBOX Check_1
        ROW    300
        COL    40
        WIDTH  100
        HEIGHT 28
        CAPTION "Check_1"
        VALUE .F.
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        BACKCOLOR NIL
        FONTCOLOR NIL
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
    END CHECKBOX
	
	DEFINE SPINNER Spinner_1
        ROW    300
        COL    180
        WIDTH  120
        HEIGHT 24
        RANGEMIN 1
        RANGEMAX 10
        VALUE 0
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        WRAP .F.
        READONLY .F.
        INCREMENT 1
        BACKCOLOR NIL
        FONTCOLOR NIL
    END SPINNER

    DEFINE SLIDER Slider_1
        ROW    300
        COL    320
        WIDTH  120
        HEIGHT 35
        RANGEMIN 1
        RANGEMAX 10
        VALUE 0
        TOOLTIP ""
        ONCHANGE Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        BACKCOLOR NIL
    END SLIDER
	
	@ 362,35 LABEL label_1 WIDTH 95 HEIGHT 21 ;
		VALUE 'Nombres' FONT 'MS Sans Serif' SIZE 10 
  
		principal.label_1.fontcolor:={0,0,0}
  
    @ 361,150 TEXTBOX text_1 HEIGHT 24 WIDTH 219 ;
		Font 'MS Sans Serif' size 10 MAXLENGTH 30 
  
		principal.text_1.fontcolor:={0,0,0}
		principal.text_1.backcolor:={255,255,255}
	
	@ 360,400 BUTTON button_1 CAPTION 'Aceptar' ;
		ACTION msginfo('Button pressed') WIDTH 100 HEIGHT 28 ;
		FONT 'MS Sans Serif' SIZE 10

		principal.button_1.fontcolor:={0,0,0}

    @ 360,507 BUTTON button_2 CAPTION 'Cancelar' ;
		ACTION msginfo('Button pressed') WIDTH 100 HEIGHT 28 ;
		FONT 'MS Sans Serif' SIZE 10
  
		principal.button_2.fontcolor:={0,0,0}
	
END WINDOW
CENTER WINDOW principal
Activate Window principal
Return Nil

Function ISAPPXPTHEMED()
Return ( OS_ISWINXP_OR_LATER() .AND. IsAppThemed() )

Function AutoAj()
_AutoAdjust((GetFormHandle(cForm)) )
Return Nil

Function _AutoAdjust( hWnd )
Local i, k, ParentForm, ControlCount, ControlName, ControlType, nWidth, nHeight, lvisible:=.T., nDivw, nDivh

IF GetDesktopWidth() < GetWindowWidth ( hWnd )
   nWidth := GetDesktopWidth()
ELSE
   nWidth := GetWindowWidth ( hWnd )
ENDIF

IF GetDesktopHeight() < GetWindowHeight ( hWnd )
   nHeight := GetDesktopHeight()
ELSE
   nHeight := GetWindowHeight ( hWnd )
ENDIF

IF IsWindowVisible ( hWnd ) .And. ! IsAppXPThemed()
   HideWindow ( hWnd )
ELSE
   lvisible := .F.
ENDIF

i := aScan ( _HMG_SYSDATA[67] , hWnd )
ParentForm := _HMG_SYSDATA[66] [i]

if _HMG_SYSDATA[92] [i] > 0 .and. _HMG_SYSDATA[91] [i] > 0
   nDivw := nWidth / _HMG_SYSDATA[92] [i]
   nDivh := nHeight / _HMG_SYSDATA[91] [i]
else
   nDivw := 1
   nDivh := 1
endif

ControlCount := Len ( _HMG_SYSDATA[3] )

For k := 1 To ControlCount

    ControlName := _HMG_SYSDATA[2] [k]

    if _IsControlDefined ( ControlName, ParentForm )

       ControlType := _HMG_SYSDATA[1] [k]

       if !Empty( ControlName ) .And. !( ControlType $ "MENU,HOTKEY,TOOLBAR,MESSAGEBAR,ITEMMESSAGE,TIMER" ) //.And.;
          //Empty( GetControlContainerHandle ( ControlName, ParentForm ) )

          if ControlType == 'RADIOGROUP'
             _HMG_aControlSpacing     := _HMG_SYSDATA[ 22 ]
             _HMG_aControlMiscData1   := _HMG_SYSDATA[  8 ]
             _HMG_aControlSpacing [k] := _HMG_aControlSpacing [k] * iif(_HMG_aControlMiscData1 [k], nDivw, nDivh)
          endif
		  
		  if ControlType <> "STATUSBAR"
		     _SetControlSizePos ( ControlName, ParentForm,;
             _GetControlRow ( ControlName, ParentForm ) * nDivh, _GetControlCol ( ControlName, ParentForm ) * nDivw,;
             _GetControlWidth ( ControlName, ParentForm ) * nDivw, _GetControlHeight ( ControlName, ParentForm ) * nDivh )
		  endif
		  
          if ControlType <> 'SLIDER'
	         if empty(_HMG_SYSDATA[28] [k] )
 		        _SetFontSize ( ControlName, ParentForm , 8 * nDivh )
	         else
  		        _SetFontSize ( ControlName, ParentForm , _HMG_SYSDATA[28] [k] * nDivh )
	         endif
          endif

       endif
    endif
Next k
_HMG_SYSDATA[92]  [i] := nWidth
_HMG_SYSDATA[91] [i] := nHeight

IF lvisible
   ShowWindow ( hWnd )
ENDIF
Return Nil
Após compilar e executar o exemplo, re-dimensione a janela e verá o auto-ajuste funcionar !
Screen64.PNG
Para quem quiser ver o resultado (em anexo) o executável para apreciação:
Hmg_Autoajust.rar
(752.19 KiB) Baixado 643 vezes
Observação: Este código aproveitei de outro colega que começou e ficou incompleto. Com a ajuda dos colegas, poderemos melhorar o recurso e disponibilizá-lo para todos.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Auto-Ajuste de tela e componentes

Mensagem por luiz antonio da silva »

Olá Pablo !

O exemplo abaixo faz praticamente o mesmo que o autoadjust, falta ainda achar um cálculo para redimencionar as fontes,
tá quase pronto, mas não testei ainda.

* alere o tamanho da janela pra ver o resultado (cima para baixo e esquerda para direita

Código: Selecionar todos

#include <minigui.ch>

Function Main(cPath)
Public aFiles:={}, aTemp, nTam, I
Public MaxWd:=1920; MaxHd:=1440
Public wd:=GetDesktopWidth(), hd:=GetDesktopHeight()

If cPath=Nil
   cPath:="C:\IMAGENS\TIF"
Endif

aTemp:=Directory(cPath + "\*.tif")
nTam:=Len(aTemp)
For I=1 To nTam
    AaDd(aFiles,{aTemp[I,1]})
Next

DEFINE WINDOW Form_1 AT 0,0           ;
       WIDTH wd                       ;
       HEIGHT hd                      ;
       TITLE "Visualizador de Imagens";
       on move atualiza_tela()        ;
       on paint atualiza_tela()      ;
       MAIN                  ;
      
        
       DEFINE GRID Grid_1
              ROW    10
              COL    10
              WIDTH  300
              HEIGHT 780
              ITEMS aFiles
              VALUE 1
              WIDTHS { 300 }
              HEADERS {'Nome do Arquivo'}
              FONTNAME "Arial"
              FONTSIZE 9
              TOOLTIP ""
              ONCHANGE Exibir(cPath, This.Value)
       END GRID

    DEFINE IMAGE Image_1
        ROW    80
        COL    330
        WIDTH  600
        HEIGHT 600
        PICTURE ""
        HELPID Nil
        VISIBLE .T.
        STRETCH .F.
        backcolor "gray"
        ACTION Nil
    END IMAGE

    DEFINE label lb1
        ROW    80
        COL    330
        WIDTH  795
        HEIGHT 710
        value ""
        border .t.
    END label 

    DEFINE TEXTBOX Text_1
        ROW    40
        COL    500
        WIDTH  625
        HEIGHT 30
        FONTNAME "Arial"
        FONTSIZE 9
        ONENTER RENOMEAR()
        UPPERCASE   .T.
        VALUE ""
    END TEXTBOX
    
      DEFINE LABEL NomeAgencia
        ROW    40
        COL    360
        WIDTH  120
        HEIGHT 30
        VALUE "Nome da Agencia:"
        FONTNAME "Arial"
        FONTSIZE 9
        FONTBOLD .T.
        VISIBLE .T.
    END LABEL

END WINDOW

pega_dados_tela()
Exibir(cPath,1)
Form_1.Text_1.SetFocus
Form_1.center
Form_1.Activate

Return nil

Function Exibir(cPath,nItem)

     Public cImagem:= GetProperty("Form_1","Grid_1","Item",nItem)[1]

     If IsControlDefined(Image_1,Form_1)
        SetProperty("Form_1","Image_1","Picture",cPath + "\" + cImagem)
     Endif

Return Nil

Function Renomear()

   Public cProcura:=GetProperty("form_1","text_1","Value")

   If Empty ( Form_1.Text_1.Value )
      MsgInfo("Nome do Arquivo Em Branco, Digite o novo nome do arquivo confor imagem abaixo...") 
      Return
   EndIf
   
   
   DIRMAKE(CProcura)
   RENAMEFILE('C:\IMAGENS\TIF\' + cimagem, 'C:\IMAGENS\'+ cProcura +'\' + cProcura + ' - ' + cImagem + '.JPG')
  
  
   SetProperty("Form_1","Text_1","Value", "")

   Valor:=GetProperty("form_1","GRID_1","Value")
  
   SetProperty("Form_1","GRID_1","VALUE", VALOR + 1)
   SetProperty("Form_1","Image_1","Picture", "")
  
  
    Msgbox((STR(VALOR)))  // PARA VER EM QUAL REGISTRO PAROU DE TROCAR AS IMAGENS //
  

Return Nil

func pega_dados_tela()
public row_grid,col_grid,wid_grid,hei_grid,tam_col_grid
public row_image,col_image,wid_image,hei_image
public row_lb1,col_lb1,wid_lb1,hei_lb1
public row_text_1,col_text_1,wid_text_1,hei_text_1
public row_nomeag,col_nomeag,wid_nomeag,hei_nomeag

Maxwd:=1152
MaxHd:=864
row_grid    :=(100/MaxHd)*GetProperty("form_1","Grid_1","row")
col_grid    :=(100/MaxWd)*GetProperty("form_1","Grid_1","col")
wid_grid    :=(100/MaxWd)*GetProperty("form_1","Grid_1","width")
hei_grid    :=(100/MaxHd)*GetProperty("form_1","Grid_1","height")
tam_col_grid:=(100/MaxWd)*GetProperty("form_1","Grid_1","width")

row_image   :=(100/MaxHd)*GetProperty("form_1","image_1","row")
col_image   :=(100/MaxWd)*GetProperty("form_1","image_1","col")
wid_image   :=(100/MaxWd)*GetProperty("form_1","image_1","width")
hei_image   :=(100/MaxHd)*GetProperty("form_1","image_1","height")

row_lb1     :=(100/MaxHd)*GetProperty("form_1","lb1","row")
col_lb1     :=(100/MaxWd)*GetProperty("form_1","lb1","col")
wid_lb1     :=(100/MaxWd)*GetProperty("form_1","lb1","width")
hei_lb1     :=(100/MaxHd)*GetProperty("form_1","lb1","height")

row_text_1  :=(100/MaxHd)*GetProperty("form_1","text_1","row")
col_text_1  :=(100/MaxWd)*GetProperty("form_1","text_1","col")
wid_text_1  :=(100/MaxWd)*GetProperty("form_1","text_1","width")
hei_text_1  :=(100/MaxHd)*GetProperty("form_1","text_1","height")

row_nomeag  :=(100/MaxHd)*GetProperty("form_1","nomeagencia","row")
col_nomeag  :=(100/MaxWd)*GetProperty("form_1","nomeagencia","col")
wid_nomeag  :=(100/MaxWd)*GetProperty("form_1","nomeagencia","width")
hei_nomeag  :=(100/MaxHd)*GetProperty("form_1","nomeagencia","height")
atualiza_tela()
retu


func atualiza_tela()
// width atual
wd:=Getproperty("form_1","width")

// height atual
hd:=Getproperty("form_1","height")

setproperty("form_1","Grid_1","row",((hd*row_grid)/100))
setproperty("form_1","Grid_1","col",((wd*col_grid)/100))
setproperty("form_1","Grid_1","width",((wd*wid_grid)/100))
setproperty("form_1","Grid_1","height",((hd*hei_grid)/100))
setproperty("form_1","Grid_1","widths",((wd*tam_col_grid)/100))

setproperty("form_1","image_1","row",((hd*row_image)/100))
setproperty("form_1","image_1","col",((wd*col_image)/100))
setproperty("form_1","image_1","width",((wd*wid_image)/100))
setproperty("form_1","image_1","height",((hd*hei_image)/100))

setproperty("form_1","lb1","row",((hd*row_lb1)/100))
setproperty("form_1","lb1","col",((wd*col_lb1)/100))
setproperty("form_1","lb1","width",((wd*wid_lb1)/100))
setproperty("form_1","lb1","height",((hd*hei_lb1)/100))

setproperty("form_1","text_1","row",((hd*row_text_1)/100))
setproperty("form_1","text_1","col",((wd*col_text_1)/100))
setproperty("form_1","text_1","width",((wd*wid_text_1)/100))
setproperty("form_1","text_1","height",((hd*hei_text_1)/100))

setproperty("form_1","nomeagencia","row",((hd*row_nomeag)/100))
setproperty("form_1","nomeagencia","col",((wd*col_nomeag)/100))
setproperty("form_1","nomeagencia","width",((wd*wid_nomeag)/100))
setproperty("form_1","nomeagencia","height",((hd*hei_nomeag)/100))
form_1.center
Form_1.Text_1.SetFocus

retu
abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auto-Ajuste de tela e componentes

Mensagem por Pablo César »

Muito interessante a sua técnica, pois pode ser aplicada em outras ferramentas GUI, muito legal Luiz !

Eu gostaria (se não for pedir muito) fazer baseado no exemplo acima. Onde a maioria dos componentes são exibidos e eu acabei de fazer mais ajustes que estavam faltando.
Se puder fazer eu gostaria de levar a conhecimento no fórum oficial (claro que mencionando o seu nome e link deste fórum). Pois seria mais uma alternativa. Gostei, parabéns !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Auto-Ajuste de tela e componentes

Mensagem por luiz antonio da silva »

Olá Pablo !

Alterando o código do post acima e aproveitando algumas dicas do mesmo, ficou bem mais simples...rs

* Ainda falta redefinir o tamanho das fontes.

Código: Selecionar todos

#include <hmg.ch>
 
Function Main()
Private cForm:='Principal'
 
MsgInfo("Ajusta a posição, largura e fonte","Informação")
    
DEFINE WINDOW  Principal AT 126,66 WIDTH 648 HEIGHT 404 ;
   TITLE 'AutoAdjust (c)2007-2010 MigSoft ' MAIN;
    ON INIT dados_iniciais(cForm) ;
    ON SIZE Auto_ajuste(cForm) ;
    ON MAXIMIZE Auto_ajuste(cForm)
 
    @ 320,400 BUTTON button_1 CAPTION 'Aceptar' ;
    ACTION msginfo('Button pressed') WIDTH 100 HEIGHT 28 ;
    FONT 'MS Sans Serif' SIZE 10 ;
 
    principal.button_1.fontcolor:={0,0,0}
 
    @ 320,507 BUTTON button_2 CAPTION 'Cancelar' ;
    ACTION msginfo('Button pressed') WIDTH 100 HEIGHT 28 ;
    FONT 'MS Sans Serif' SIZE 10 ;
   
    principal.button_2.fontcolor:={0,0,0}
   
    @ 18,31 FRAME frame_1 CAPTION "Datos Generales" ;
    WIDTH 576 HEIGHT 281 ;
   
    principal.frame_1.fontcolor:={0,0,0}
    principal.frame_1.fontname:='MS Sans Serif'
    principal.frame_1.fontsize:= 10
   
    @ 322,35 LABEL label_1 WIDTH 95 HEIGHT 21 ;
    VALUE 'Nombres' FONT 'MS Sans Serif' SIZE 10 ;
   
    principal.label_1.fontcolor:={0,0,0}
   
    @ 321,150 TEXTBOX text_1 HEIGHT 24 WIDTH 219 ;
    Font 'MS Sans Serif' size 10 MAXLENGTH 30 ;
   
    principal.text_1.fontcolor:={0,0,0}
    principal.text_1.backcolor:={255,255,255}
   
    @ 40,491 IMAGE image_1 PICTURE "HP_SAVE" ;
    WIDTH 100 HEIGHT 100 STRETCH  ;
   
    @ 66,309 DATEPICKER datepicker_1 WIDTH 120 ;
    FONT 'MS Sans Serif' SIZE 10 ;
   
    principal.datepicker_1.fontcolor:={0,0,0}
    principal.datepicker_1.backcolor:={255,255,255}
 
    DEFINE TAB tab_1 AT 40,40 WIDTH 250 HEIGHT 250 ;
      FONT 'MS Sans Serif' SIZE 10 ;
 
      DEFINE PAGE " Page1 "
            @ 48,24 GRID grid_1 WIDTH 200 HEIGHT 158 ;
            HEADERS {'one','two'} WIDTHS  {60,60} ;
                FONT 'MS Sans Serif' SIZE 10
 
                principal.grid_1.fontcolor:={0,0,0}
            principal.grid_1.AddItem( {"Row1","Row1"} )
                principal.grid_1.AddItem( {"Row2","Row2"} )
                principal.grid_1.AddItem( {"Row3","Row3"} )
                principal.grid_1.value:=1
        END PAGE
 
        DEFINE PAGE " Page2 "
            @ 121,29 PROGRESSBAR progressbar_1 ;
                WIDTH 191 HEIGHT 34 VALUE 25 ;
 
                principal.progressbar_1.fontcolor:={0,0,0}
          END PAGE
    END TAB
 
    @ 108,308 LISTBOX list_1 WIDTH 158 HEIGHT 99 ;
        FONT 'MS Sans Serif' SIZE 10 ;
 
        principal.list_1.fontcolor:={0,0,0}
        principal.list_1.backcolor:={255,255,255}
      principal.list_1.AddItem( "Item 1" )
        principal.list_1.AddItem( "Item 2" )
        principal.list_1.AddItem( "Item 3" )
        principal.list_1.value:=1
 
    @ 224,313 COMBOBOX combo_1 WIDTH 100 VALUE 3;
        FONT 'MS Sans Serif' SIZE 10 ;
        ITEMS {"HMG","MiniGUI","ooHG"} ;
 
        principal.combo_1.fontcolor:={0,0,0}
        principal.combo_1.backcolor:={255,255,255}
       
   DEFINE RADIOGROUP RadioGroup_1
        ROW    155
        COL    490
        WIDTH  100
        HEIGHT 50
        OPTIONS { 'Option 1','Option 2'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 27
        BACKCOLOR Nil
        FONTCOLOR Nil
        READONLY Nil
        HORIZONTAL .F.
    END RADIOGROUP
    
   DEFINE RADIOGROUP RadioGroup_2
        ROW    260
        COL    310
        WIDTH  160
        HEIGHT 28
        OPTIONS { 'Option 1','Option 2'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 70
        BACKCOLOR Nil
        FONTCOLOR Nil
        READONLY Nil
        HORIZONTAL .T.
    END RADIOGROUP
 
    @ 243,488 BUTTON picbutt_3 PICTURE 'HMG_EDIT_CANCEL';
        ACTION msginfo('Pic button pressed') WIDTH 100 HEIGHT 44
 
END WINDOW
CENTER WINDOW principal
Activate Window principal
Return Nil

Function dados_iniciais(hwnd)
Local k, ControlCount, wd_ini:=GetProperty(hwnd,"Width"), hd_ini:=GetProperty(hwnd,"Height")
public _rows,_cols,_wids,_heig

ControlCount := Len ( _HMG_SYSDATA[3] )

_rows:={}
_cols:={}
_wids:={}
_heig:={}
For k := 1 To ControlCount
 
    ControlName := _HMG_SYSDATA[2] [k]
    if controlname<>"Message"

    _row:=(100/hd_ini)*getproperty(hwnd,ControlName,"row")
    _col:=(100/wd_ini)*getproperty(hwnd,ControlName,"col")
    _wid:=(100/wd_ini)*getproperty(hwnd,ControlName,"width")
    _hei:=(100/hd_ini)*getproperty(hwnd,ControlName,"height")

    msginfo(controlname+crlf+str(_row)+crlf+str(_col)+crlf+str(_wid)+crlf+str(_hei))
    
    aadd(_rows,_row)
    aadd(_cols,_col)
    aadd(_wids,_wid)
    aadd(_heig,_hei)

    endif
    
Next k

msginfo("ok")

Return Nil

Function Auto_ajuste(hwnd)
Local k, ControlCount, wd, hd
wd:=GetProperty(hwnd,"width")
hd:=GetProperty(hwnd,"height")

ControlCount := Len ( _HMG_SYSDATA[3] )

For k := 1 To ControlCount
 
    ControlName := _HMG_SYSDATA[2] [k]
    
    if controlname<>"Message"
       _row:=(hd*_rows[k])/100
       _col:=(wd*_cols[k])/100
       _wid:=(wd*_wids[k])/100
       _hei:=(hd*_heig[k])/100

       SetProperty(hwnd,ControlName,"row",_row)
       SetProperty(hwnd,ControlName,"col",_col)
       SetProperty(hwnd,ControlName,"width",_wid)
       SetProperty(hwnd,ControlName,"height",_hei)
    endif
    
Next k
Return Nil

Abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Auto-Ajuste de tela e componentes

Mensagem por luiz antonio da silva »

Opa....

Que bom que gostou, fico feliz...espero que possa ser útil.

sinta-se em casa para alterar o que achar preciso.

Abraço.
Luiz.

Perdão....depois que postei é que vi....esqueci de tirar os comentários "msginfo" que coloquei para debug...rsrsrs
HMG 3.4.4 - SQL SERVER - ORACLE
esgici
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 27 Ago 2012 14:51
Localização: Turkiye
Contato:

Auto-Ajuste de tela e componentes

Mensagem por esgici »

Olá Pablo

I'm afraid that you will need more editing your post ;)

For example for another fix / correction for STATUSBAR ...

Regards
Saudação
Esgici
Viva Clipper !
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auto-Ajuste de tela e componentes

Mensagem por Pablo César »

esgici escreveu:I'm afraid that you will need more editing your post
Yeah. Now I have included a StatuBar and also one CheckBox.
For example for another fix / correction for STATUSBAR ...
I made a exception, but is still with one error after many resizing. I think should be a limit for smaller size...

But please amigo Esgici, check if this code could be accepted...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
esgici
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 27 Ago 2012 14:51
Localização: Turkiye
Contato:

Auto-Ajuste de tela e componentes

Mensagem por esgici »

Acceptable ?

No doubt, acceptable and usable in most case.

All effort is to find the better ...

It isn't ?

Regards
Saudação
Esgici
Viva Clipper !
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auto-Ajuste de tela e componentes

Mensagem por Pablo César »

Right, amigo: you are right !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Auto-Ajuste de tela e componentes

Mensagem por Jairo Maia »

Hello Pablo,

It seems the error is exclusively in the Spinner. If I run the app and to click on the spinner before reduce the window, no error occurs until it I click anywhere of the window, so, if I click again in the spinner occurs the error: Called from EVENTS(981) in source\h_windows.prg
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auto-Ajuste de tela e componentes

Mensagem por Pablo César »

Oi Jairo não entendi muito bem e não consegui reproduzir o erro.
O exemplo que tinha postado, não possui Spinner algum. De todas formas, adicionei um Spinner e um Slider.
O que venho notando é que ao reduzir a janela menor do que o tamanho original, ela provoca um erro de ficar a tela do Desktop branca (não sei o nome técnico desse comportamento). Mas em si o Spinner e Slider estão funcionando.

Observação: Sempre que altero o código fonte, eu o faço na primeira mensagem. Mantendo sempre atualizada com as mudanças tanto no código fonte exposto como na tela/imagem e no anexo .RAR que contém o executável.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Auto-Ajuste de tela e componentes

Mensagem por Jairo Maia »

Pablo César escreveu:O exemplo que tinha postado, não possui Spinner algum
Sim. Eu tinha colocado um spinner para testar e errei ao escrever. O erro que relatei acima ocorre com o ComboBox. Já na versão que baixei agora não ocorre mais.
Erro.JPG
E interessante, não vi nenhuma anomalia na tela mesmo depois de redimensionar várias vezes nos mais diversos tamnahos. Testei no XP e Seven.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auto-Ajuste de tela e componentes

Mensagem por Pablo César »

Jairo Maia escreveu:Sim. Eu tinha colocado um spinner para testar e errei ao escrever. O erro que relatei acima ocorre com o ComboBox. Já na versão que baixei agora não ocorre mais.
Eu tinha achado que havia confusão de componentes e faltava atualizar o código. Por isso coloquei a observação de que o código sofria mudanças e o a primeira mensagem era atualizada, pois já ocorrera uma 5 atualizações desde a primeira postagem.
E interessante, não vi nenhuma anomalia na tela mesmo depois de redimensionar várias vezes nos mais diversos tamnahos. Testei no XP e Seven.
Legal, mas o erro ocorre sim. Basta redimensionar ridiculamente a menor a janela, o que na minha opinião deveria limitar um tamanho mínimo (acho que o mais certo seria a partir do tamanho inicial de abertura). Mas esse erro fica bagunçado o Desktop com fundo branco, não sei se isso chama-se erro de GDI ou RTE, não sei dar o nome a esse erro...

Mas obrigado amigo Jairo pelo seu interesse. Só assim que podemos construir rotinas na base de testes com erros e acertos.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Auto-Ajuste de tela e componentes

Mensagem por luiz antonio da silva »

Olá !

O Código tá redefinindo também as fontes, agora vou terminar a redefinição dos tamanhos das colunas do grid,
espero que gostem.

Código: Selecionar todos

#include <hmg.ch>
 
Function Main()
Private cForm:='Principal'
 
MsgInfo("Ajusta a posição, largura e fonte","Informação")
    
DEFINE WINDOW  Principal AT 126,66 WIDTH 648 HEIGHT 404 ;
   TITLE 'AutoAdjust (c)2007-2010 MigSoft ' MAIN;
    ON INIT dados_iniciais(cForm) ;
    ON SIZE Auto_ajuste(cForm) ;
    ON MAXIMIZE Auto_ajuste(cForm)
 
    @ 320,400 BUTTON button_1 CAPTION 'Aceptar' ;
    ACTION msginfo('Button pressed') WIDTH 100 HEIGHT 28 ;
    FONT 'MS Sans Serif' SIZE 10 ;
 
    principal.button_1.fontcolor:={0,0,0}
 
    @ 320,507 BUTTON button_2 CAPTION 'Cancelar' ;
    ACTION msginfo('Button pressed') WIDTH 100 HEIGHT 28 ;
    FONT 'MS Sans Serif' SIZE 10 ;
   
    principal.button_2.fontcolor:={0,0,0}
   
    @ 18,31 FRAME frame_1 CAPTION "Datos Generales" ;
    WIDTH 576 HEIGHT 281 ;
   
    principal.frame_1.fontcolor:={0,0,0}
    principal.frame_1.fontname:='MS Sans Serif'
    principal.frame_1.fontsize:= 10
   
    @ 322,35 LABEL label_1 WIDTH 95 HEIGHT 21 ;
    VALUE 'Nombres' FONT 'MS Sans Serif' SIZE 10 ;
   
    principal.label_1.fontcolor:={0,0,0}
   
    @ 321,150 TEXTBOX text_1 HEIGHT 24 WIDTH 219 ;
    Font 'MS Sans Serif' size 10 MAXLENGTH 30 ;
   
    principal.text_1.fontcolor:={0,0,0}
    principal.text_1.backcolor:={255,255,255}
   
    @ 40,491 IMAGE image_1 PICTURE "HP_SAVE" ;
    WIDTH 100 HEIGHT 100 STRETCH  ;
   
    @ 66,309 DATEPICKER datepicker_1 WIDTH 120 ;
    FONT 'MS Sans Serif' SIZE 10 ;
   
    principal.datepicker_1.fontcolor:={0,0,0}
    principal.datepicker_1.backcolor:={255,255,255}
 
    DEFINE TAB tab_1 AT 40,40 WIDTH 250 HEIGHT 250 ;
      FONT 'MS Sans Serif' SIZE 10 ;
 
      DEFINE PAGE " Page1 "
            @ 48,24 GRID grid_1 WIDTH 200 HEIGHT 158 ;
            HEADERS {'one','two'} WIDTHS  {60,60} ;
                FONT 'MS Sans Serif' SIZE 10
 
                principal.grid_1.fontcolor:={0,0,0}
            principal.grid_1.AddItem( {"Row1","Row1"} )
                principal.grid_1.AddItem( {"Row2","Row2"} )
                principal.grid_1.AddItem( {"Row3","Row3"} )
                principal.grid_1.value:=1
        END PAGE
 
        DEFINE PAGE " Page2 "
            @ 121,29 PROGRESSBAR progressbar_1 ;
                WIDTH 191 HEIGHT 34 VALUE 25 ;
 
                principal.progressbar_1.fontcolor:={0,0,0}
          END PAGE
    END TAB
 
    @ 108,308 LISTBOX list_1 WIDTH 158 HEIGHT 99 ;
        FONT 'MS Sans Serif' SIZE 10 ;
 
        principal.list_1.fontcolor:={0,0,0}
        principal.list_1.backcolor:={255,255,255}
      principal.list_1.AddItem( "Item 1" )
        principal.list_1.AddItem( "Item 2" )
        principal.list_1.AddItem( "Item 3" )
        principal.list_1.value:=1
 
    @ 224,313 COMBOBOX combo_1 WIDTH 100 VALUE 3;
        FONT 'MS Sans Serif' SIZE 10 ;
        ITEMS {"HMG","MiniGUI","ooHG"} ;
 
        principal.combo_1.fontcolor:={0,0,0}
        principal.combo_1.backcolor:={255,255,255}
       
   DEFINE RADIOGROUP RadioGroup_1
        ROW    155
        COL    490
        WIDTH  100
        HEIGHT 50
        OPTIONS { 'Option 1','Option 2'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 27
        BACKCOLOR Nil
        FONTCOLOR Nil
        READONLY Nil
        HORIZONTAL .F.
    END RADIOGROUP
    
   DEFINE RADIOGROUP RadioGroup_2
        ROW    260
        COL    310
        WIDTH  160
        HEIGHT 28
        OPTIONS { 'Option 1','Option 2'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 70
        BACKCOLOR Nil
        FONTCOLOR Nil
        READONLY Nil
        HORIZONTAL .T.
    END RADIOGROUP
 
    @ 243,488 BUTTON picbutt_3 PICTURE 'HMG_EDIT_CANCEL';
        ACTION msginfo('Pic button pressed') WIDTH 100 HEIGHT 44
 
END WINDOW
CENTER WINDOW principal
Activate Window principal
Return Nil

Function dados_iniciais(hwnd)
Local k, ControlCount, wd_ini:=GetProperty(hwnd,"Width"), hd_ini:=GetProperty(hwnd,"Height")
public _rows,_cols,_wids,_heig,_font

ControlCount := Len ( _HMG_SYSDATA[3] )

_font:={}
_rows:={}
_cols:={}
_wids:={}
_heig:={}
For k := 1 To ControlCount
 
    ControlName := _HMG_SYSDATA[2] [k]
    if controlname<>"Message"

    _fnt:=(100/hd_ini)*getproperty(hwnd,ControlName,"fontsize")
    _row:=(100/hd_ini)*getproperty(hwnd,ControlName,"row")
    _col:=(100/wd_ini)*getproperty(hwnd,ControlName,"col")
    _wid:=(100/wd_ini)*getproperty(hwnd,ControlName,"width")
    _hei:=(100/hd_ini)*getproperty(hwnd,ControlName,"height")

    aadd(_font,int(_fnt))
    aadd(_rows,_row)
    aadd(_cols,_col)
    aadd(_wids,_wid)
    aadd(_heig,_hei)

    endif
    
Next k

Return Nil

Function Auto_ajuste(hwnd)
Local k, ControlCount, wd, hd
wd:=GetProperty(hwnd,"width")
hd:=GetProperty(hwnd,"height")

ControlCount := Len ( _HMG_SYSDATA[3] )

For k := 1 To ControlCount
 
    ControlName := _HMG_SYSDATA[2] [k]
    
    if controlname<>"Message"
       _fnt:=(hd*_font[k])/100
       _row:=(hd*_rows[k])/100
       _col:=(wd*_cols[k])/100
       _wid:=(wd*_wids[k])/100
       _hei:=(hd*_heig[k])/100

       if _fnt<>0
          SetProperty(hwnd,ControlName,"fontsize",_fnt)
       endif
       SetProperty(hwnd,ControlName,"row",_row)
       SetProperty(hwnd,ControlName,"col",_col)
       SetProperty(hwnd,ControlName,"width",_wid)
       SetProperty(hwnd,ControlName,"height",_hei)
    endif
    
Next k
Return Nil
Abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Auto-Ajuste de tela e componentes

Mensagem por Jairo Maia »

Olá Luiz,

Colega, até tentei, mas não consigo ver diferença nenhuma em relação ao original. Tem que fazer algo para ver o que você diz?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder