MsgYesNo

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

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

MsgYesNo

Mensagem por janio »

Bom dia a todos,

Alguém tem uma função parecida com a MsgYesNo (padrão hwgui) que se auto-dimensione conforme o tamanho do texto?

Acho a função padrão da lib LETRAS MUITO PEQUENAS e gostaria colocar avisos no sistema personalizados e com LETRAS MAIORES

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

MsgYesNo

Mensagem por gilbertosilverio »

Ola Janio,

Nao e uma obra de arte comparada as mestres que existem aqui no forum, mais eu uso assim:

Código: Selecionar todos


MENUITEM "&MsgGet_YES" ;
   ACTION {||xCOND:= .T., MsgGet_YES( [Teste Titulo], [Entre o que voce precisa], @xCOND ), ;
                    IF(xCOND = .t., hwg_msginfo([Verdadeiro]),hwg_msginfo([ Falso ]) )   }


Function MsgGet_YES( cTitle, cText, xCond)
   Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-16 )

   INIT DIALOG oModDlg TITLE cTitle SIZE 300,140 ;
        FONT oFont CLIPPER STYLE DS_MODALFRAME + WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU + DS_CENTER

        @ 20,10 SAY cText SIZE 260,22

        @ 100,95  BUTTON "SIM"  SIZE 80,24  ON CLICK {|| xCOND:=.T., HWG_ENDDIALOG() }
        @ 200,95  BUTTON "NAO"  SIZE 80,24 ON CLICK {|| xCOND:=.F., HWG_ENDDIALOG() }

   ACTIVATE DIALOG oModDlg

   oFont:Release()
Return xCOND

GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

MsgYesNo

Mensagem por esbasso »

Aqui tem uma função que permite até 5 botões de seleção

Exemplo
msginfo(str(DialogWask( "Selecione a Opção", {"um","dois","Três","quatro","cinco"} )))
msginfo(str(DialogWask( "Selecione a Opção", {"Sim","Não","Talvez"} )))
msginfo(str(DialogWask( "Confirme a operação", {"Ok","Cancelar"} )))

Código: Selecionar todos

FUNCTION DialogWask( cmsg, aSels )
  LOCAL oDlg,  oShape1, oBitmap1, ocmd1, ocmd2, oCmd3, oLabel1, oCmd4 ;
        , oCmd5


  INIT DIALOG oDlg TITLE "Selecionar opção ..."     ;
    COLOR 16777215  ;
    AT 0, 0 SIZE 600,122 ;
        FONT HFont():Add( 'Verdana',0,-15,400,,,) CLIPPER  NOEXIT  ;
     STYLE WS_POPUP+WS_CAPTION+DS_CENTER  ;
     ON INIT {|This| onDlgInit( This ) }
    __objAddData( oDlg, "cmsg" );    oDlg:cmsg := cmsg
    __objAddData( oDlg, "aSels" );    oDlg:aSels := aSels
    Thisform := oDlg

   @ 15,71 SHAPE oShape1 SIZE 572,4 ;
         BACKCOLOR 255 ; 
         BACKSTYLE 2; 
        BORDERWIDTH 1 CURVATURE 0 BORDERSTYLE 5 FILLSTYLE 10
   @ 16,10 BITMAP oBitmap1  ;
        SHOW 'bmp_qst'  FROM RESOURCE  STRETCH 0  ;
         TRANSPARENT SIZE 48,48  
   @ 24,81 BUTTONEX ocmd1 CAPTION "&Sim"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| ocmd1_onClick(  ) }
   @ 137,81 BUTTONEX ocmd2 CAPTION "&Sim"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| ocmd2_onClick(  ) }
   @ 250,81 BUTTONEX oCmd3 CAPTION "&Sim"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| oCmd3_onClick(  ) }
   @ 70,7 SAY oLabel1 CAPTION thisform:cmsg  TRANSPARENT SIZE 508,60 ;
        STYLE SS_CENTER ;
         COLOR 16711680   ; 
        ON INIT {|This| oLabel1_onInit( This ) }
        oLabel1:FontBold := .T. 
   @ 363,81 BUTTONEX oCmd4 CAPTION "&Não"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| oCmd4_onClick(  ) }
   @ 476,81 BUTTONEX oCmd5 CAPTION "&Não"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| oCmd5_onClick(  ) }

   ACTIVATE DIALOG oDlg 

IF EMPTY( ThisForm:lresult  )
thisform:lresult := 0
ENDIF

RETURN oDlg:lresult

STATIC FUNCTION onDlgInit( This )
   
   // recalcular o tamnho dos botoes
   PRIVATE nSize, nEspaco, nWbotao, nSels, nLeft, i, cBtn
   If Empty( This:asels ) .OR. LEN( This:asels ) < 2
     This:asels := {"Fechar"} //{"emitir","imprimir","desistir","cancelar"}
      //RETURN .f.
   ENDIF
   nSize   := 110 * 5
   nEspaco := 3 // 12/4
   nsels   := LEN(This:asels)
   nwbotao := MIN( 245, nSize / nSels )
   nEspaco := IIF( nSels > 1, 12 / ( nSels - 1 ), 10) //nEspaco +
   nLeft := This:nWidth - ( nwbotao * nSels + nEspaco * nSels )
   i := 1
   DO WHILE i <= 5
      cBtn := "oCmd"+STR(i,1)
      IF i <= nsels
         this:&cBtn:CAPTION := This:aSels[ i ]
         this:&cBtn:Move( nLeft,, nwBotao,,0)
         nLeft += nwBotao + nEspaco
      ELSE
        this:&cBtn:Hide()
      ENDIF
      i ++
   ENDDO

RETURN Nil

STATIC FUNCTION ocmd1_onClick
   thisform:lresult := 1
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION ocmd2_onClick
   thisform:lresult := 2
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION oCmd3_onClick
   thisform:lresult := 3
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION oLabel1_onInit( This )
   
   If This:Caption != Nil .And. Len( This:Caption ) < 60
     This:nHeight := 42
     This:nTop += 20
     This:Move( ,This:nTop,,   This:nHeight )
   Endif
 RETURN .T.


STATIC FUNCTION oCmd4_onClick
   thisform:lresult := 4
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION oCmd5_onClick
   thisform:lresult := 5
   THISFORM:CLOSE()
 RETURN .T.



Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

MsgYesNo

Mensagem por janio »

Basso,

Bateu na trave! rsrs

Além dos botões, preciso que a função redimensione também o tamanho do DIALOG conforme o numero de linhas da cMsg.

Tendo isso, fica perfeito!

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

MsgYesNo

Mensagem por esbasso »

A mensagem ali tem 3 linhas
Para redimensionar só se tu tem mensagens muito grandes.
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

MsgYesNo

Mensagem por janio »

As vezes as msg sao um pouco grandinhas rsrs, uma mistura de AVISO com pergunta do que o usuario quer FAZER.

As msg padrao da hwgui (msgstop, msgyesno) se auto-redimensionam conforme o numero de linhas, mas pra fazer esse auto-dimensionamento tem que mover todos os objetos do dialog... conhecimento q eu nao tenho rsrs

Mas vou me virando aqui

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

MsgYesNo

Mensagem por esbasso »

Agora vai
Pode usar o chr(13) para quebra de linha
cTexto := "linha 1" + Chr(13) +"linha 2" + Chr(13) +"linha 3" + Chr(13) +"linha 4" +;
"linha 5" + Chr(13) +"linha 6" + Chr(13) +"linha 7" + Chr(13) +"linha 8"

Código: Selecionar todos


#Include "hwgui.ch"
STATIC Thisform

FUNCTION DialogWask( cmsg, aSels )
  LOCAL oDlg,  oShape1, oBitmap1, ocmd1, ocmd2, oCmd3, oLabel1, oCmd4 ;
        , oCmd5


  INIT DIALOG oDlg TITLE "Selecionar opção ..."     ;
    COLOR 16777215  ;
    AT 0, 0 SIZE 600,122 ;
        FONT HFont():Add( 'Verdana',0,-15,400,,,) CLIPPER  NOEXIT  ;
     STYLE WS_POPUP+WS_CAPTION+DS_CENTER  ;
     ON INIT {|This| onDlgInit( This ) }
    __objAddData( oDlg, "cmsg" );    oDlg:cmsg := cmsg
    __objAddData( oDlg, "aSels" );    oDlg:aSels := aSels
    Thisform := oDlg

   @ 15,71 SHAPE oShape1 SIZE 572,4 ;
         BACKCOLOR 255 ; 
         BACKSTYLE 2; 
        BORDERWIDTH 1 CURVATURE 0 BORDERSTYLE 5 FILLSTYLE 10
   @ 16,10 BITMAP oBitmap1  SHOW 'bmp_qst'  FROM RESOURCE  STRETCH 0  ;
         TRANSPARENT SIZE 48,48  
   @ 24,81 BUTTONEX ocmd1 CAPTION "&Sim"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| ocmd1_onClick(  ) }
   @ 137,81 BUTTONEX ocmd2 CAPTION "&Sim"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| ocmd2_onClick(  ) }
   @ 250,81 BUTTONEX oCmd3 CAPTION "&Sim"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| oCmd3_onClick(  ) }
   @ 70,7 SAY oLabel1 CAPTION thisform:cmsg  TRANSPARENT SIZE 508,60 ;
        STYLE SS_CENTER ;
         COLOR 16711680
        oLabel1:FontBold := .T.
   @ 363,81 BUTTONEX oCmd4 CAPTION "&Não"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| oCmd4_onClick(  ) }
   @ 476,81 BUTTONEX oCmd5 CAPTION "&Não"   TRANSPARENT SIZE 110,34 ;
        STYLE BS_CENTER +WS_TABSTOP  ; 
        ON CLICK {|| oCmd5_onClick(  ) }

   ACTIVATE DIALOG oDlg 

IF EMPTY( ThisForm:lresult  )
thisform:lresult := 0
ENDIF

RETURN oDlg:lresult

STATIC Function ResizeDlg
   Local nTop, i, cBtn
   Local cTexto := Thisform:oLabel1:Caption 
   Local nCr := Occurs( Chr(13), cTexto ) + 1
   Local aTxtSize := Iif( ! Empty( cTexto ), TxtRect( cTexto, Thisform:oLabel1 ),{0,0} )
   aTxtSize[2] := Max( aTxtSize[2], nCr * 20 )
   If !Empty( cTexto) .And. aTxtSize[2] < 60
        Thisform:oLabel1:nHeight := 42
        Thisform:oLabel1:nTop += 20
        Thisform:oLabel1:Move( ,Thisform:oLabel1:nTop,, Thisform:oLabel1:nHeight )   
        Return .t.
   Endif
   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 )
     i := 1
     Do While i <= 5
       cBtn := "oCmd"+Str(i,1)
       Thisform:&cBtn:Move( , Thisform:&cBtn:nTop + nTop, , )
       i ++
     Enddo
   Endif 
   Return .T.


STATIC FUNCTION onDlgInit( This )
   // recalcular o tamnho dos botoes
   Local nSize, nEspaco, nWbotao, nSels, nLeft, i, cBtn
   If Empty( This:asels ) .OR. LEN( This:asels ) < 2
     This:asels := {"Fechar"} //{"emitir","imprimir","desistir","cancelar"}
      //RETURN .f.
   ENDIF
   nSize   := 110 * 5
   nEspaco := 3 // 12/4
   nsels   := LEN(This:asels)
   nwbotao := MIN( 245, nSize / nSels )
   nEspaco := IIF( nSels > 1, 12 / ( nSels - 1 ), 10) //nEspaco +
   nLeft := This:nWidth - ( nwbotao * nSels + nEspaco * nSels )
   i := 1
   Do While i <= 5
      cBtn := "oCmd"+STR(i,1)
      IF i <= nsels
         this:&cBtn:CAPTION := This:aSels[ i ]
         this:&cBtn:Move( nLeft,, nwBotao,,0)
         nLeft += nwBotao + nEspaco
      ELSE
        this:&cBtn:Hide()
      ENDIF
      i ++
   ENDDO
   If ! Empty( Thisform:oLabel1:Caption )
      ResizeDlg()
   Endif

RETURN Nil

STATIC FUNCTION ocmd1_onClick
   thisform:lresult := 1
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION ocmd2_onClick
   thisform:lresult := 2
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION oCmd3_onClick
   thisform:lresult := 3
   THISFORM:CLOSE()
 RETURN .T.

STATIC FUNCTION oCmd4_onClick
   thisform:lresult := 4
   THISFORM:CLOSE()
 RETURN .T.


STATIC FUNCTION oCmd5_onClick
   thisform:lresult := 5
   THISFORM:CLOSE()
 RETURN .T.

Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

MsgYesNo

Mensagem por janio »

Basso,

Ta ficando muuuuuuuito bom! Exatamente o que eu queria.

So tem um probleminha: Qndo varias linhas o Dialog ta ficando no topo do video. Uma linha so blz, o dialog fica centralizado

Código: Selecionar todos

DialogWask("Teste funcao do Basso", { "SIM", "NAO", "CANCELA" } )

Código: Selecionar todos

DialogWask("Agora eu estou fazendo um teste para ver"                 + Quebra + ;
           "se a função da Hwgui postada pelo Luis Basso"             + Quebra + ;
           "se auto-dimensiona para tantas linhas sejam necessarias!" + Quebra + ;
           ""                                                         + Quebra + ;
           "Se isso funcionar deve vez, ficara perfeito", { "SIM", "NAO", "CANCELA" } )
Anexos
Bas2.png
Bas1.png
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

MsgYesNo

Mensagem por esbasso »

Estranho
para mim fica centralizado

mas inclua uma nova linha
Onde tem
If aTxtSize[2] > 60
nTop := ( aTxtSize[2] - 60 )
Thisform:Move( ,,, Thisform:nHeight + nTop )
+ Thisform:Center() // <- ADICIONA ESTA LINHA
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

MsgYesNo

Mensagem por janio »

Funcionou! Perfeito!

Muito obrigado, cara! Que bom que vc voltou ao forum. Estava fazendo falta.

:{ :{ :{ :{

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

MsgYesNo

Mensagem por gilbertosilverio »

Ola Luiz,

Tentei compilar esta tua rotina, para pode testar aqui, mais da falta desta função na compilação...

TxtRect( cTexto, Thisform:oLabel1 )

Grato
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

MsgYesNo

Mensagem por esbasso »

Se tu estiver usando a que o RUSSO já mexeu então é

FUNCTION hwg_TxtRect( cTxt, oWin, oFont )
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

MsgYesNo

Mensagem por gilbertosilverio »

Luiz,

Obrigado, era isso mesmo...

Estou usando a 2.17, mais a que o Kresin incluiu o HWG_ nas funções.

Esta rotina ficou perfeita, agora a velharada para de reclamar que as letras das mensagens estão muito pequenas... rsrsrs

:-Y :-Y :-Y
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
edmarfrazao
Usuário Nível 3
Usuário Nível 3
Mensagens: 185
Registrado em: 06 Dez 2005 11:16

MsgYesNo

Mensagem por edmarfrazao »

Obrigado pela sua rotina era o que esta precisando.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MsgYesNo

Mensagem por JoséQuintas »

gilbertosilverio escreveu:agora a velharada para de reclamar que as letras das mensagens estão muito pequenas... rsrsrs
Talvez, ou talvez sua máquina e seu software é que sejam velhos.
As máquinas evoluíram, o Windows não acompanhou, e os programas a base de API Windows menos ainda.
Só a GTWVG se destaca nisso.
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/
Responder