Jump to content
Fivewin Brasil

ricardomouramarques

Membros
  • Posts

    539
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by ricardomouramarques

  1. 35 minutos atrás, kapiaba disse:

    Excelente. Dá para melhorar bem Mais. Poste o ARQUIVO.RC  Se bem que com SAYs(inclusive uando o Hide()/Show()), é possivel escrever na parte de cima do GET e não dentro do GET, más blz, quanto mais modelos melhor para todo mundo.

     

    abs.

    Kapi, é um SAY, mas é um SAY que pertence ao GET e não a janela. SE, por um motivo qualquer, o GET mude de posição na janela em tempo de execução, o SAY vai junto com ele, sem nenhum problema.

    Observe esse detalhe na classe TGET:

    ...

    local oWnd := self  //oWnd é o proprio objeto GET
    ....
    @ 2, 4 SAY ::oPlcHld ... OF oWnd Pixel 
     
    //OF oWnd, ou seja o SAY é do GET. Ele está no TOP 2, LEFT 4 do GET. Como se o GET fosse uma janela
  2. Em 18/07/2023 at 11:29, kapiaba disse:

    Bom dia Ricardo. É uma boa ideia, más o Márcio é chato para kralho e não quer alterar a TGET.PRG vamos a outra ideia. E até agora NADA DE RECURSOS. kkkkkkkkkkkkkkkkkk

    abs.

    Regards, saludos.

     

    Kapiaba,

    Ainda considerando alterar a classe TGET,  aquelas alteraçoes que passei acima funcionam perfeitamente com Recursos.

    Segue um exemplo de utilização (testado com WORKSHOP THE BEST):

    #include "FiveWin.ch"
    #include "get.ch"
    
    static oDlg
    //---------------------------------------------------------------------------------------
    function main()
    
        private oNome, oEndereco, oCidade
        private cNome := cEndereco := cCidade := space(100)
    
        DEFINE DIALOG oDlg RESOURCE DIALOG_1
            REDEFINE GET oNome VAR cNome ID 101
            REDEFINE GET oEndereco VAR cEndereco ID 102
            REDEFINE GET oCidade VAR cCidade ID 103
        ACTIVATE DIALOG oDlg CENTERED ON INIT iniciar()
    
    return nil
    
    //---------------------------------------------------------------------------------------
    function iniciar()
    
          //Configurar os  GETs com PlaceHolder.
          //Primeiro parâmetro é o texto que será apresentado no GET
          //Segundo parâmetro é a COR do texto que será apresentado no GET
          oNome:SetPlcHld('*Nome Obrigatório', RGB(255,0,0)) //em cor vermelha
          oEndereco:SetPlcHld('*Endereço Obrigatório', RGB(255,0,0)) //em cor vermelha
          oCidade:SetPlcHld('Cidade') // Em cor cinza (padrão)
    
    return nil

     

    exemploGet4.png

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

  4. 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!

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

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

  7. Colegas,


    Estou tentando testar o exemplo do JMSILVA, mas estou tendo problemas.

    Estou usando fivewin 15.07 e harbour 3.0. Inclui a hbsqlit3.lib, porém, na compilação, recebo vários "Error: Unresolved external '". Por exemplo:
    Error: Unresolved external '_sqlite3_user_data' referenced from E:\SQLITE_TESTES\NOVO\LIB\HBSQLIT3.LIB|core
    Error: Unresolved external '_sqlite3_value_type' referenced from E:\SQLITE_TESTES\NOVO\LIB\HBSQLIT3.LIB|core
    Error: Unresolved external '_sqlite3_value_text' referenced from E:\SQLITE_TESTES\NOVO\LIB\HBSQLIT3.LIB|core
    Error: Unresolved external '_sqlite3_value_double' referenced from E:\SQLITE_TESTES\NOVO\LIB\HBSQLIT3.LIB|core
    Error: Unresolved external '_sqlite3_value_int64' referenced from E:\SQLITE_TESTES\NOVO\LIB\HBSQLIT3.LIB|core...

    e por aí vai.

    Encontrei uma outra lib nas subpastaa do harbour que resolvi testar: hbsqlit3-bcc.lib. Daí compila beleza, mas não abre o EXE porque diz estar faltando uma DLL: hbsqlit3-32-bcc.dll. Mas não consigo encontrar esta dll em nenhum lugar. Nem nos subdiretórios do harbour ou bcc ou fivewin e nem tão pouco no google.

    Alguém tem uma luz?

  8. Dar aquele efeito de transparencia (glass) eu já vi aqui no forum, porém o efeito é aplicado em todos os componentes da janela.

    Alguem sabe alguma maneira de aplicar esse efeito somente na janela, preservando os controles que há sobre ela?

    Ricardo.

  9. Dar aquele efeito de transparencia (glass) eu já vi aqui no forum, porém o efeito é aplicado em todos os componentes da janela.

    Alguem sabe alguma maneira de aplicar esse efeito somente na janela, preservando os controles que há sobre ela?

    Ricardo.

  10. Gilberto,

    Testei aqui e funcionou. Faça assim:

    
    

    oCombo:bGotFocus:={|| oCombo:Open()}

    id=code>id=code>

    Obs: Observe o valor da altura (nheight) no SIZE. Ele não se refere a altura do combobox fechado, e sim da altura máxima do combobox aberto. EX:

    
    

    @ 34, 271 COMBOBOX oCombo VAR nCbx_1 ITEMS aCbx_1 SIZE 160, 100 PIXEL of oDlg // veja por ex. o valor 100 no size

    oCombo:bGotFocus:={|| oCombo:Open()}

    id=code>id=code>

    Ricardo.

  11. Olha só. Não se trata de um código de Barras. São apenas marcadores que são usados para que o sistema saiba onde estão as linhas e as colunas.

    Então observe que há um marcador para o inicio, um para cada linha e alguns que indicarão as distâncias entre colunas.

    Já fiz isso até mesmo com o Excel. E dá certo.

    Faça um modelo com o tamanho de uma cartela original e posicione as marcações. Marque os números que desejar.

    Não precisa escrever os números. Basta que em sua posição haja um quadro preto marcando. Leve um modelo até a loteria e peça pra passar na máquina pra ver se esta ok. Pronto.

    Eu colocava no rodapé da cartela os números que estava jogando só pra ter certeza.

    É isso aí.

    Ricardo.

  12. baixe o RVisual:

    http://www.slicplus.com.br/rvisual/rvisual_12_04b.rar

    1 - Abra um FORM novo: botão [Form]

    2 - Insira um xBrowse: botão [xBr]

    3 - selecione o xBrowse que vc inseriu e pressione CTRL+P, para configurar o seu xBrowse. Aqui vc poderá escolher os campos que deseja mostrar, largura da coluna, cores, etc, etc.

    4 - clique no botão [source]. Aqui ele abrirá um editor com o código pronto.

    Ricardo Marques

    19336244_th.jpg

    Ricado Marques

    Araguari-MG

  13. Everton,

    Fiz um código que irá solucionar o seu problema:

    1 -Chame a função MyBorders( oDlg ) no ON INIT do Dialog. EX:

    
    

    Activate Dialog oForm ON INIT ( SeuInit(), MyBorders(oForm) )

    id=code>id=code>

    2 - Acrescente o código abaixo ao seu programa:

    
    

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

    Function MyBorders( oDlg, oDlg2 )

    local i

    Default oDlg2 := oDlg

    for i := 1 to len( oDlg:aControls )

    if oDlg:aControls:ClassName() = "TGET"

    bPainted( oDlg:aControls, oDlg2 )

    endif

    if oDlg:aControls:ClassName() = "TGROUP"

    MyBorders( oDlg:aControls, oDlg2 )

    endif

    next

    Return NIL

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

    Function bPainted( oGet, oDlg )

    oGet:bPainted = { || PaintGet( oGet, oDlg ) }

    Return NIL

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

    Function PaintGet( oGet, oDlg )

    local aPoint1 := { 0, 0 }

    local aPoint2 := { oGet:nHeight, oGet:nWidth }

    local nTop, nLeft, nBottom, nRight, hPen

    nAnd( oGet:nStyle, nNot( WS_BORDER ) )

    aPoint1 = ClientToScreen( oGet:hWnd, aPoint1 )

    aPoint1 = ScreenToClient( oDlg:hWnd, aPoint1 )

    aPoint2 = ClientToScreen( oGet:hWnd, aPoint2 )

    aPoint2 = ScreenToClient( oDlg:hWnd, aPoint2 )

    nTop := aPoint1[1]

    nLeft := aPoint1[2]

    nBottom := aPoint2[1]

    nRight := aPoint2[2]

    oDlg:GetDC()

    hPen := CreatePen( 0, 1, CLR_HGRAY )

    MoveTo( oDlg:hDC, nLeft-1, nBottom, hPen )

    LineTo( oDlg:hDC, nLeft-1, nTop-1, hPen)

    LineTo( oDlg:hDC, nRight, nTop-1, hPen )

    oDlg:ReleaseDC()

    oDlg:GetDC()

    hPen := CreatePen( 0, 1, CLR_WHITE)

    MoveTo( oDlg:hDC, nLeft-1, nBottom, hPen )

    LineTo( oDlg:hDC, nRight, nBottom, hPen )

    LineTo( oDlg:hDC, nRight, nTop-1, hPen )

    oDlg:ReleaseDC()

    Return nil

    id=code>id=code>

    Teste e informe se deu certo.

    Ricardo Marques

  14. citação:Tentei gerar um PRG pelo RVisual, mas deu na mesma coisa
    id=quote>id=quote>

    Ok. Detectei o que está acontecendo. É o modo onde são passados os controles. Veja:

    se fizer assim, os GETs ficam em 3D:

    
    

    define dialog...

    @ lin, col // seus controles aqui

    activate dialog...

    id=code>id=code>

    mas se passar assim, os GETS não ficam em 3D:

    
    

    define dialog...

    //sem controles aqui

    activate dialog... ON INIT Inicio()

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

    Function Inicio()

    @ lin, col...// seus controles aqui

    id=code>id=code>

    Este último modo é como o VRMM e o RVisual cria os controles em uma Dialog.

    Ele cria assim, porque alguns controles não funcionam direito no primeiro modo. Por exemplo, se vc colocar um controle dentro de um GROUP, dá pau. Pra resouver isso, vc deve colocar o controle SOBRE o GROUP e não dentro. Parece que é a mesma coisa mas não é. Quando vc coloca um controle SOBRE o GROUP, caso você mova o GROUP de lugar, os controles ficam pra trás, ele não vão junto porque não pertecem ao GROUP. Até aí tudo bem, é só um pouco de trabalho pra colocar tudo no lugar novamente.

    Outro problema semelhante acontece quando você coloca um controle sobre uma imágem. Vai dar o mesmo. Porém, se utilizar a mesma saida que eu citei para o GROUP, até que vai aparecer direitinho, mas vc não consegue, por exemplo, clicar sobre um botão que esteja em cima de uma imagem.

    No primeiro modo de programar (como no VRMM ou RVisual), não ocorrerá estes problemas, porém os GETs ficam limpos (com uma só linha)

    Agora, se desejar usar o segundo modo, eu compilei uma versão alternativa do RVisual que faz o que você quer:

    Baixe o arquivo rvisual.exe (alternativo) aqui, e substitua o seu:

    http://www.slicplus.com.br/rvisual/rvisualexe.rar

    Ricardo Marques

  15. Vamos lá... é simples.

    Para criar um DIALOG:

    Clique no botão [FORM]... pronto. Foi difícil? kkk

    Como você gosta de RECURSOS, vc deverá esportar:

    Menu "Formulário->Exportar para RC..."

    Em que linguagem ele foi criado?

    Ele foi criado em FWH mesmo.

    Não tem HELP, mas...

    Tem DICAS:

    http://www.fivewin.com.br/forum/topic.asp?TOPIC_ID=19842

    e tem VIDEOS:

    Verá como é simples.

    Testa aí e retorne.

    Ricardo Marques

×
×
  • Create New...