Clipper On Line • Ver Tópico - MsgYesNo

MsgYesNo

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

MsgYesNo

Mensagempor janio » 17 Mai 2017 08:53

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

MsgYesNo

Mensagempor gilbertosilverio » 17 Mai 2017 14:12

Ola Janio,

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

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
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

MsgYesNo

Mensagempor esbasso » 19 Mai 2017 17:53

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"} )))

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

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

MsgYesNo

Mensagempor janio » 21 Mai 2017 21:30

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

MsgYesNo

Mensagempor esbasso » 22 Mai 2017 10:41

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

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

MsgYesNo

Mensagempor janio » 22 Mai 2017 11:51

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

MsgYesNo

Mensagempor esbasso » 22 Mai 2017 12:57

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"


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

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

MsgYesNo

Mensagempor janio » 22 Mai 2017 14:18

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

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


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

MsgYesNo

Mensagempor esbasso » 22 Mai 2017 14:44

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

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

MsgYesNo

Mensagempor janio » 22 Mai 2017 14:55

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

MsgYesNo

Mensagempor gilbertosilverio » 26 Mai 2017 12:39

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
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

MsgYesNo

Mensagempor esbasso » 26 Mai 2017 16:56

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

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

MsgYesNo

Mensagempor gilbertosilverio » 26 Mai 2017 18:43

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
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

MsgYesNo

Mensagempor edmarfrazao » 26 Jun 2019 11:13

Obrigado pela sua rotina era o que esta precisando.
edmarfrazao
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 185
Data de registro: 06 Dez 2005 10:16
Curtiu: 1 vez
Mens.Curtidas: 0 vez

MsgYesNo

Mensagempor JoséQuintas » 26 Jun 2019 11:38

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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 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