Jump to content
Fivewin Brasil

identificar campo obrigatorio no GET


marcioe

Recommended Posts

Agora, kapiaba disse:

Então... Você pode fazer como achar melhor, é só encaixar lógica. Correto? O caminho é esse, não tem milagre em programação.

 

abs.

Não estou esperando um milagre.   
Apenas opniões e informaçoes de pessoas com mais experiência do que eu.

Obrigado..

Link to comment
Share on other sites

4 minutos atrás, marcioe disse:

Não estou esperando um milagre.   
Apenas opniões e informaçoes de pessoas com mais experiência do que eu.

Obrigado..

Eu acho, que depois deste exemplo, muitos no forum INTER vão entender o que você deseja, e vão melhorar o exemplo. Eu acho... Até você vai melhorar, tenho certeza... Depois, ponha o resultado final, ok?

Link to comment
Share on other sites

  • 2 weeks later...
Em 07/07/2023 at 13:42, marcioe disse:

ok
Isso vamos aguardar as mentes brilhantes

#include "FiveWin.ch"

static oDlg
//---------------------------------------------------------------------------------------
function main()

    private oSNome, oSEndereco, oSIdade  //variáveis de objetos dos SAYs (IMPORTANTE)

    private cNome := space(50)
    private cEndereco := space(80)
    private nIdade := 0

    DEFINE DIALOG oDlg FROM 0, 0 TO 400, 800 TITLE "TESTE" Pixel

    ACTIVATE DIALOG oDlg CENTERED ON INIT iniciar()

return nil

//---------------------------------------------------------------------------------------
function iniciar()

        @ 10,  10 SAY oSNome VAR "Nome" OF oDlg Pixel
        @ 10, oSNome:nWidth+10 SAY '*' COLOR CLR_RED Pixel
        @ 30,  10 GET oNome VAR cNome size 400, 22  OF oDlg Pixel

        @ 70,  10 SAY oSEndereco VAR "Endereço" OF oDlg Pixel
        @ 70, oSEndereco:nWidth+10 SAY '*' COLOR CLR_RED Pixel
        @ 90,  10 GET cEndereco  OF oDlg size 600, 22  Pixel

        @ 130,  10 SAY oSIdade VAR "Idade" OF oDlg Pixel
        @ 150,  10 GET oIdade VAR nIdade  OF oDlg size 40, 22  Pixel


return nil

//---------------------------------------------------------------------------------------

Seria isso?

exemploSay.png

Link to comment
Share on other sites

Opcionalmente poderia criar uma função para isso. O código ficaria mais limpo. Veja um exemplo:

#include "FiveWin.ch"

static oDlg
//---------------------------------------------------------------------------------------
function main()

    private oSNome, oSEndereco, oSIdade, oSCidade  //variáveis de objetos dos SAYs
    private oObjRecebido

    private cNome := space(50)
    private cEndereco := space(80)
    private nIdade := 0
    private cCidade := space(50)

    DEFINE DIALOG oDlg FROM 0, 0 TO 400, 800 TITLE "TESTE" Pixel

    ACTIVATE DIALOG oDlg CENTERED ON INIT iniciar()

return nil

//---------------------------------------------------------------------------------------
function iniciar()

        @  10, 10 SAY oSNome VAR "Nome" OF oDlg Pixel
        @  30, 10 GET oNome VAR cNome size 400, 22  OF oDlg Pixel

        @  70, 10 SAY oSEndereco VAR "Endereço" OF oDlg Pixel
        @  90, 10 GET cEndereco  OF oDlg size 600, 22  Pixel

        @ 130, 10 SAY oSIdade VAR "Idade" OF oDlg Pixel
        @ 150, 10 GET oIdade VAR nIdade  OF oDlg size 40, 22  Pixel

        @ 190, 10 SAY oSCidade VAR "Cidade" OF oDlg Pixel
        @ 210, 10 GET oCidade VAR cCidade  OF oDlg size 400, 22  Pixel

        //altera a cor do asterisco
        @ 270,  10 BUTTON 'ALTERA COR'       Size 120,20 action (oObjRecebido:setColor(RGB(255,150,255), GetSysColor(15)),oObjRecebido:refresh()) Pixel

        //Oculta o asterisco
        @ 270, 180 BUTTON 'OCULTA ASTERISCO' Size 120,20 action oObjRecebido:SetText('') Pixel

        //Exibe o asterisco, caso esteja ocultado
        @ 270, 320 BUTTON 'EXIBE ASTERISCO'  Size 120,20 action oObjRecebido:SetText('*') Pixel

        //SAYs que serão marcados como requeridos.
        required(oSNome) 
        required(oSEndereco)

        //com o parâmetro de cor e recebendo o objeto SAY no retorno caso queira manipulá-lo posteriomente
        oObjRecebido := required(oSCidade, RGB(0,255,0))


return nil

//---------------------------------------------------------------------------------------
function required(oSay, nColor) //Parêmtro nColor é opcional

    local oNewSay, oFontNewSay
    DEFAULT nColor := RGB(255,0,0);

    DEFINE FONT oFontNewSay NAME "Arial" SIZE 0, -18 BOLD

    @ oSay:nTop, oSay:nLeft+oSay:nWidth SAY oNewSay VAR '*' COLOR nColor  FONT oFontNewSay Pixel

return oNewSay
//---------------------------------------------------------------------------------------

 

exemploSay2.png

Link to comment
Share on other sites

Ricardo, desafio: faça isso com workshop.exe e ainda por cima, quando o CAMPO GET estive vazio, você escreve em cima do GET, "* Campo Obrigatório". Topas?  kkkkkkkk -> Se pagar bem, eu faço de com uma mão amarrada. kkkkkkkkkkkkkkkkk

Regards, saludos.

Link to comment
Share on other sites

54 minutos atrás, kapiaba disse:

Ricardo, desafio: faça isso com workshop.exe e ainda por cima, quando o CAMPO GET estive vazio, você escreve em cima do GET, "* Campo Obrigatório". Topas?  kkkkkkkk -> Se pagar bem, eu faço de com uma mão amarrada. kkkkkkkkkkkkkkkkk

Regards, saludos.

Fala Kapiaba!!!!!

Estou um tanto enferrujado,.mas posso tentar. Se eu conseguir, vc paga uma breja. kkkk!!!

Regards!

Link to comment
Share on other sites

Em 16/07/2023 at 16:33, kapiaba disse:

Fechado!! 6 brejas(para iniciar... kkkkk) no centro de Sampa, bora? Não vale copiar o meu exemplo. kkkkkkkkkkkkkk

Regards, saludos.

Vamos lá. Pensei em algo como Placeholder do HTML. Então poderá ser usada como isso mesmo. A cor padrão do texto é cinza, porém vc pode enviar o parâmetro de cor. Ou seja, pode ficar da cor que vc quiser. Inclusive vermelho. rs

O texto (placeholder) vai desaparecer quando o GET receber o foco, e voltará a aparecer quando o get perder o foco e estiver limpo (empty)

Vamos para o nosso POG. Na Classe GET.PRG, faça as incluções abaixo:

 

//Declare as seguintes variáveis

   DATA   oPlcHld INIT NIL
   DATA   cPlcHld INIT ""
   DATA   nPlcClr INIT RGB(100,100,100)


//Declare o seguinte Method

   METHOD SetPlcHld(cPlc, nClr)

//Localize o METHOD LostFocus( hCtlFocus ) CLASS TGet
//e adicione o seuinte código, logo no início

METHOD LostFocus( hCtlFocus ) CLASS TGet
 
    //ADD Isso
    if !empty(::oPlcHld)
        if empty(::cText)
            ::oPlcHld:nWidth := ::nWidth-8
        endif
    endif


//Localize o METHOD GotFocus( hCtlLost ) CLASS TGet
//e adicione o seuinte código, logo no início

METHOD GotFocus( hCtlLost ) CLASS TGet
 
    //ADD isso
    if !empty(::oPlcHld)
        ::oPlcHld:nWidth=0
    endif

 

//Inclua o Method SetPlcHld(cPlc, nClr)

METHOD SetPlcHld(cPlc, nClr) CLASS TGet
 
    local oWnd := self
    local nWidth := ::nWidth-8
    DEFAULT nClr := ::nPlcClr
    ::nPlcClr := nClr
    ::cPlcHld := cPlc
 
    if !empty(::cText)
        nWidth := 0
    endif
 
    @ 2, 4 SAY ::oPlcHld VAR ::cPlcHld SIZE nWidth, ::nHeight-4 COLOR ::nPlcClr, ::nClrPane OF oWnd Pixel
 
 return nil

 

Abaixo, um exemplo de uso:

 

#include "FiveWin.ch"

static oDlg
//---------------------------------------------------------------------------------------
function main()

    private oNome, oEndereco, oIdade, oCidade

    private cNome := space(50)
    private cEndereco := space(80)
    private nIdade := 0
    private cCidade := space(50)

    DEFINE DIALOG oDlg FROM 0, 0 TO 400, 800 TITLE "TESTE" Pixel

    ACTIVATE DIALOG oDlg CENTERED ON INIT iniciar()

return nil

//---------------------------------------------------------------------------------------
function iniciar()

        @  10, 10 SAY "Nome" OF oDlg Pixel
        @  30, 10 GET oNome VAR cNome size 400, 22  OF oDlg Pixel

        @  70, 10 SAY "Endereço" OF oDlg Pixel
        @  90, 10 GET oEndereco VAR cEndereco  OF oDlg size 600, 22  Pixel

        @ 130, 10 SAY "Idade" OF oDlg Pixel
        @ 150, 10 GET oIdade VAR nIdade  OF oDlg size 70, 22  Pixel

        @ 190, 10 SAY "Cidade" OF oDlg Pixel
        @ 210, 10 GET oCidade VAR cCidade  OF oDlg size 400, 22  Pixel

        //altera a cor do asterisco
        @ 270,  10 BUTTON 'VALOR NOME' Size 120,20 action alert(oNome:cText) Pixel


        //GETs com PlaceHolder
        oNome:SetPlcHld('*Nome Obrigatório', RGB(255,0,0))
        oEndereco:SetPlcHld('*Endereço Obrigatório', RGB(255,0,0))
        oIdade:SetPlcHld('Idade')
        oCidade:SetPlcHld('Cidade')


return nil

 

 

Será que vale pelo menos uma brejinha??? kkk

exemploSay3.png

Link to comment
Share on other sites

Desculpe se perdi algo na discussão, mas o mais simples pra identificar campos obrigatórios poderia ser exibir o label do campo em negrito, se não for obrigatório exibe o label sem ser negrito. Dessa forma basta vc ter duas fontes definidas, sendo uma negrito e outra normal.

Além do aspecto visual vc tem outra necessidade nessa questão do obrigatório?

Hoje essa é a tela de meu sistema (atualmente é web mas quando era xharbour/fivewin a ideia era a mesma)

 

image.thumb.png.041c1c130af53a3c033983276cedf2da.png

Link to comment
Share on other sites

EBA!! Mais um para pagar as BREJAS Ricardo. Emotta, isso que mostras, é na ALTERAÇÃO. E na INCLUSÃO?  O Márcio quer mostrar, na INCLUSÃO quando o uçuário teclar <ENTER? no CAMPO GET VAZIO: "* Campo Obrigatório Gumento". Comprendes? ELE USA WORKSHOP.exe. 

Abs y thanks pela participação. Brejas chegando fácil... kkkkkkkkkkkkkkkk

 

Regards, saludos.

 

 

Link to comment
Share on other sites

Em 09/04/2014 at 08:19, gilmer disse:

Bom Dia,

Isto é FiveWin sim, esta rotina é minha.

O Gilmer tinha feito isso .   

Na época ele tinha feito para a ecf da empresa Onie.

Quando o campo era obrigado ficar com uma pontinha no get

Uso o Peles c para criar a diálogo 

Link to comment
Share on other sites

37 minutos atrás, marcioe disse:

O Gilmer tinha feito isso .   

Na época ele tinha feito para a ecf da empresa Onie.

Quando o campo era obrigado ficar com uma pontinha no get

Uso o Peles c para criar a diálogo 

Não uso PELLESC.exe nem que você pague. O Ricardo vai tentar com o WORKSHOP.exe, assim, eu posso "interagir/Interferir", já com PELLESC.exe eu não vou nem "oiar". kkkkkkkkkk nóis toma brejas, más num é besta. kkkkkkkkkkkkkk

 

Regards, saludos.

Link to comment
Share on other sites

1 hora atrás, kapiaba disse:

EBA!! Mais um para pagar as BREJAS Ricardo. Emotta, isso que mostras, é na ALTERAÇÃO. E na INCLUSÃO?  O Márcio quer mostrar, na INCLUSÃO quando o uçuário teclar <ENTER? no CAMPO GET VAZIO: "* Campo Obrigatório Gumento". Comprendes? ELE USA WORKSHOP.exe. 

Abs y thanks pela participação. Brejas chegando fácil... kkkkkkkkkkkkkkkk

 

Regards, saludos.

 

 

Inclusão ou alteração não faz diferença. Isso é um formulário de cadastro, tanto na inclusão como na alteração o usuário precisa saber o que ele é obrigado a informar e o que é opcional.

Sobre o Marcio querer isso na Inclusão é por sua conta isso? Não vi ele pedir isso ahhahahahahaa

Link to comment
Share on other sites

3 minutos atrás, emotta disse:

Inclusão ou alteração não faz diferença. Isso é um formulário de cadastro, tanto na inclusão como na alteração o usuário precisa saber o que ele é obrigado a informar e o que é opcional.

Sobre o Marcio querer isso na Inclusão é por sua conta isso? Não vi ele pedir isso ahhahahahahaa

Eu tô falanoo...Vai ter que pagar as brejas(kkkkkkkk), essa "pendenga" já vem de LONG, LONG TIME AGO: mira aqui:

 

https://forums.fivetechsupport.com/viewtopic.php?f=3&t=43419&sid=d7897f8559173de87b984e4a88cc11c8

 

Regards, saludos.

Link to comment
Share on other sites

22 minutos atrás, emotta disse:

Inclusão ou alteração não faz diferença. Isso é um formulário de cadastro, tanto na inclusão como na alteração o usuário precisa saber o que ele é obrigado a informar e o que é opcional.

Sobre o Marcio querer isso na Inclusão é por sua conta isso? Não vi ele pedir isso ahhahahahahaa

Queria apenas de uma forma visual para que o usuário possa saber que é obrigatório o campo, 
hoje já tenho validações, antes de gravar o registro, se por exemplo o campo NOME estiver em branco, se o campo que é obrigatório, e não estiver preenchido. Ele avisa com uma Dialog 

Hoje já funciona assim, porem 
Sem-t-tulo.jpg

Porem só quando ele clica em gravar, que isso aparece. para o usuário

Link to comment
Share on other sites

Se vc quer uma solução visual, deixar o label dos campos obrigatórios em negrito e os opcionais sem ser negrito, não resolve?

1 hora atrás, marcioe disse:

Queria apenas de uma forma visual para que o usuário possa saber que é obrigatório o campo, 
hoje já tenho validações, antes de gravar o registro, se por exemplo o campo NOME estiver em branco, se o campo que é obrigatório, e não estiver preenchido. Ele avisa com uma Dialog 

Hoje já funciona assim, porem 
Sem-t-tulo.jpg

Porem só quando ele clica em gravar, que isso aparece. para o usuário

 

Link to comment
Share on other sites

Na versão do meu sistema em desktop usei por anos a estratégia de exibir os campos obrigatórios em negrito e em azul e os opcionais somente em preto (sem ser negrito).

Na versão web eu mudei e deixei da mesma cor e apenas identifico os obrigatórios como negrito.

Nunca tive reclamação de usuário nesse sentido. A tela abaixo é um formulário em fivewin do sistema.

 

image.png.0f875c7af3346b7ddceee13f1cc61b4a.png

 

Link to comment
Share on other sites

28 minutos atrás, emotta disse:

Na versão do meu sistema em desktop usei por anos a estratégia de exibir os campos obrigatórios em negrito e em azul e os opcionais somente em preto (sem ser negrito).

Na versão web eu mudei e deixei da mesma cor e apenas identifico os obrigatórios como negrito.

Nunca tive reclamação de usuário nesse sentido. A tela abaixo é um formulário em fivewin do sistema.

 

image.png.0f875c7af3346b7ddceee13f1cc61b4a.png

 

Top, estilo MICROSIGA / TOTVS.    

 

Link to comment
Share on other sites

sim, como trabalhei lá antes de ter a empresa eu segui a mesma linha de dicionário de dados deles, com a criação dos campos dinamicamente no formulário e no dicionário apontando as validações e se o campo é obrigatório ou não.

Foi difícil desenvolver mas dps de pronto foi uma mão na roda por anos e anos.

46 minutos atrás, marcioe disse:

Top, estilo MICROSIGA / TOTVS.    

 

 

Link to comment
Share on other sites

Xharbour/fivewin é excelente para aplicações Desktop.

Pra Web eu fui para Ruby on rails e react.js

2 horas atrás, marcioe disse:

Eu gosto bem do fivewin, 
Mas tem coisas que infelizmente não tem com ele absorver, um exemplo é Web.
Mas vamos Continuar com aa nossa vaca fria

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...