Página 2 de 2

MsgYesNo

Enviado: 27 Jun 2019 10:50
por MSDN
Oh Quintas, eu sei que vc é um entusiasta da GTWVG, mas não exagera homem....rssss, depois que inventaram fonte true type, o que a GTWVG faz de redimensionar, já é feito a muitos e muitos anos em sistemas gráficos que usam a API do Windows, o problema são os programadores que não sabem usar os recursos.

MsgYesNo

Enviado: 27 Jun 2019 20:24
por paiva_dbdc
Janio poderia mandar a função como ficou ?

fiz e os botoes estão sendo cortados


veja no anexo como esta ficando

ob


Paiva

MsgYesNo

Enviado: 27 Jun 2019 20:48
por JoséQuintas
Pense como console.
Acrescentou mais linhas, mas não aumentou o tamanho da janela.

linha final + qtde. linhas da mensagem

Só que como é gráfico, seria qtde.linhad * altura do fonte (altura de cada linha)

MsgYesNo

Enviado: 28 Jun 2019 12:06
por MSDN
O problema não é ser gráfico, e não utilizar os recursos gráficos disponíveis, que aliás, são muitos, vejam 2 exemplos :

- caixa de mensagem com um texto e dois botões
Imagem
- caixa de mensagem com um título (ele pisca, aqui não tem como reproduzir) e uma mensagem
Imagem

Claro que pode-se ter mais linhas, com mais informação, mas só esses 2 exemplos já dá para ter uma ideia.

Abraços

MsgYesNo

Enviado: 18 Jul 2019 15:53
por fenixsorocaba
boa tarde a todos! Não entendo muito a lógica da programação do código em forms, por isso tenho uma pergunta:

no exemplo do código postado pelo colega, para botões de multipla escolha:

Código: Selecionar todos

FUNCTION DialogWask( cmsg, aSels )
LOCAL oDlg,  oShape1, oBitmap1, ocmd1, ocmd2, oCmd3, oLabel1, oCmd4 ;
      , oCmd5
INIT DIALOG oDlg TITLE "Selecione a opcao... "     ;  
  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.
após clicar com o mouse em um dos botões de múltipla escolha, ele abre um outro formulário exibindo a resposta do botão (1, 2, 3, etc..) e o usuário tem que clicar no "X" para fechar este outro formulário...

teria como apenas criar uma variavel de controle para saber que o usuário clicou no botão 1, já fechando tudo, sem apresentar nada na tela?
se sim, é dentro desta mesma função (ocmd1_onClick) que a variável tem que ser colocada (no caso do botão 1)?

Código: Selecionar todos

STATIC FUNCTION ocmd1_onClick
   thisform:lresult := 1
   THISFORM:CLOSE()
RETURN .T.
obrigado por sua atenção.

att,

Tales

MsgYesNo

Enviado: 19 Jul 2019 13:29
por fenixsorocaba
boa tarde! entendendo um pouco mais a função do colega Luis Basso, "finalmente" compreendi que na verdade o formulário que eu achei que abria, não é um segundo formulário...
ele é uma mensagem de exibição, que no exemplo que ele nos deu poderia ser alterada de acordo com a necessidade, para até 5 botões..(show de bola!!)

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

ou seja, no retorno da FUNCTION DialogWask( cmsg, aSels ), ele exibe o "clique" do botão selecionado.no caso do botão 1, = 1

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

agora, reformulando a minha pergunta anterior, será que existe algum outro modo que chame a função DialogWask sem ser desta forma (msginfo), para que
o usuário não tenha que clicar novamente em OK ou X para sair desta mensagem (msginfo) ?

obrigado, bom trabalho!

att,

Tales