Jump to content
Fivewin Brasil

mkyx

Membros
  • Posts

    892
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by mkyx

  1. Kapiaba, eu usei os comando gráficos para gerar as janelas e os botões, MOVETO, LINETO.

    Se eu ficar clicando nos botões pretos, e voltando, umas 10 vezes, as janelas e os botões ficam tudos preto, não entendi o porquê, e estou buscando uma solução usando SAY, BUTTOM, etc, mas, tem que permitir que mudar a cor de fundo dos botôes, mas, parece que não tem jeito de mudar a cor de fundo dos botões, usando button.

     

     

  2. Bom dia,

    o comando DEFINE WINDOW - ACTIVATE WINDOW, não tem a opções MODAL ou NO MODAL

    Só o comando DEFINE DIALOG - ACTIVATE DIALOG, disponibiliza a opção MODAL ou NO MODAL

     

  3. para gerar os botoes e as janelas, usei a rotina abaixo.

    FUNCTION AD_LABEL(LI,CI,LF,CF,cTEXT,nPLCR,nCLRTEXT,nCLRLINE,nCLRFUNDO,oFONT2,odlg2)
     local hPen,I,nWidth,hOldPen,NP,C,I0
     local nHeight  := Abs( oFont2:nHeight )
     

          oDlg2:GetDC()
          
          nWidth := GetTextWidth( oDlg2:hDC, cText,if(nPLCR="*",oFont1,oFont2) ) 
          if nWidth < 0
             nWidth *=-1
          endif

          hPen := CreatePen( 0, 1, nCLRLINE)
          hOldPen := SelectObject( oDlg2:hDc, hPen )
          MoveTo( oDlg2:hDC, CI+5,LI,HPEN )

          IF UPPER(nPLCR)="L"
             LineTo( oDlg2:hDC, CI+8,LI,HPEN )
             MoveTo( oDlg2:hDC, CI+8+nWIDTH+1,LI,HPEN )
          ELSEIF UPPER(nPLCR)="C"
             nP:=(CF-CI-nWIDTH)/2
             LineTo( oDlg2:hDC, CI+nP,LI,HPEN )
             MoveTo( oDlg2:hDC, CI+nP+nWIDTH+1,LI,HPEN )
          ELSEIF UPPER(nPLCR)="R"
             LineTo( oDlg2:hDC, CF-8-nWIDTH-1,LI,HPEN )
             MoveTo( oDlg2:hDC, CF-8,LI,HPEN )
          ENDIF

          LineTo( oDlg2:hDC, CF-5,LI,HPEN )
          LineTo( oDlg2:hDC, CF-4,LI+1,HPEN )
          LineTo( oDlg2:hDC, CF-3,LI+1,HPEN )
          LineTo( oDlg2:hDC, CF-2,LI+2,HPEN )
          LineTo( oDlg2:hDC, CF-1,LI+3,HPEN )
          LineTo( oDlg2:hDC, CF-1,LI+4,HPEN )
          LineTo( oDlg2:hDC, CF,LI+5,HPEN )

          LineTo( oDlg2:hDC, CF,LF-5,HPEN )
          LineTo( oDlg2:hDC, CF-1,LF-4,HPEN )
          LineTo( oDlg2:hDC, CF-1,LF-3,HPEN )
          LineTo( oDlg2:hDC, CF-2,LF-2,HPEN )
          LineTo( oDlg2:hDC, CF-3,LF-1,HPEN )
          LineTo( oDlg2:hDC, CF-4,LF-1,HPEN )
          LineTo( oDlg2:hDC, CF-5,LF,HPEN )

          LineTo( oDlg2:hDC, CI+5,LF,HPEN )
          LineTo( oDlg2:hDC, CI+4,LF-1,HPEN )
          LineTo( oDlg2:hDC, CI+3,LF-1,HPEN )
          LineTo( oDlg2:hDC, CI+2,LF-2,HPEN )
          LineTo( oDlg2:hDC, CI+1,LF-3,HPEN )
          LineTo( oDlg2:hDC, CI+1,LF-4,HPEN )
          LineTo( oDlg2:hDC, CI,LF-5,HPEN )

          LineTo( oDlg2:hDC, CI,LI+5,HPEN )
          LineTo( oDlg2:hDC, CI+1,LI+4,HPEN )
          LineTo( oDlg2:hDC, CI+1,LI+3,HPEN )
          LineTo( oDlg2:hDC, CI+2,LI+2,HPEN )
          LineTo( oDlg2:hDC, CI+3,LI+1,HPEN )
          LineTo( oDlg2:hDC, CI+4,LI+1,HPEN )
          LineTo( oDlg2:hDC, CI+5,LI,HPEN )
          SelectObject( oDlg2:hDc, hOldPen )
          DeleteObject( hPen )

          C:=3
          I0:=-1
          for i=LI+1 TO LF-1
               hPen1 := CreatePen( 0, 1, nCLRFUNDO)
               IF I>=(LF-3) .and. i0<0
                  C:=1
                  I0:=1
               endif
               MoveTo( oDlg2:hDC, CI+1+IF(C=0,1,IF(C>0,C,0)),I,HPEN1 )
               LineTo( oDlg2:hDC, CF-IF(C=0,1,IF(C>0,C,0)),I,HPEN1 )
               C:=C+I0
          next    

          IF UPPER(nPLCR)="L"
             nP:=CI+8
          ELSEIF UPPER(nPLCR)="C"
             nP:=INT((CF-CI-nWIDTH)/2)+CI
          ELSEIF UPPER(nPLCR)="R"
             nP:=CF-8-nWIDTH
          ELSEIF UPPER(nPLCR)="D"
             nP:=INT((CF-CI-nWIDTH)/2)+CI //+nWIDTH/2
          ELSEIF UPPER(nPLCR)="*"
             nP:=INT((CF-CI-nWIDTH*2.3)/2)+CI
          ENDIF
          RText( oDlg2, cTEXT,IF(UPPER(nPLCR)="*",LI,if(UPPER(nPLCR)="D",(((LF-LI)/2)+LI)-(nHeight/2),LI-nHeight/2)), nP, nClrText, oFont2 )
    oDlg2:ReleaseDC()
    RETURN .T.

    //----------------------------------------------------------------------------//
     Function RText( oDLG2,cPrompt,Y,X,nClrText2,oFont2)

     Local hOldFont, nOldMode, nOldClrText,nOldBkMode

    *    oDlg2:GetDC()

        nOldClrText:=SetTextColor(oDLG2:hDC,nClrText2)
        nOldBkMode:=SetBkMode(oDLG2:hDC,1)
        NoldBkMode:=SetbkMode(nrgb(224,226,222),1)
        hOldFont:=SelectObject(oDLG2:hDC,oFont2:hFont)
        TextOut(oDLG2:hDC,Y,X,cPrompt,Len(cPrompt))
        SelectObject(oDLG2:hDC,hOldFont)
        SetBkMode(oDLG2:hDC,nOldBkMode)
        SetTextColor(oDLG2:hDC,nOldClrText)
        oDlg2:ReleaseDC()

     Return NIL

    FUNCTION Textura(oDlgTxt,aCorBar)
    LOCAL hWnd:=oDlgTxt:hWnd
    LOCAL aRec:=GetClientRect(hWnd)
    LOCAL oBrush,nX,nStp:=(aRec[3]-aRec[1])/2
    LOCAL nColor1:=aCorBar[1],nColor2:=aCorBar[2]
    LOCAL nColorR1:=nRgbRed(nColor1),nColorG1:=nRgbGreen(nColor1),nColorB1:=nRgbBlue(nColor1)
    LOCAL nColorR2:=nRgbRed(nColor2),nColorG2:=nRgbGreen(nColor2),nColorB2:=nRgbBlue(nColor2)
    LOCAL nSomaR:=ABS(nColorR2-nColorR1),nSomaG:=ABS(nColorG2-nColorG1),nSomaB:=ABS(nColorB2-nColorB1)
    nSomaR:=IIF(nSomaR<0,0,(nSomaR/((aRec[3])/2)))
    nSomaG:=IIF(nSomaG<0,0,(nSomaG/((aRec[3])/2)))
    nSomaB:=IIF(nSomaB<0,0,(nSomaB/((aRec[3])/2)))
    *oDlgTxt:GetDC()
    aRec[3]:=0
    FOR nX:=1 TO nStp
        aRec[3]+=2
        DEFINE BRUSH oBrush COLOR nRgb(nColorR1,nColorG1,nColorB1)
        FillRect(oDlgTxt:hDC,aRec,oBrush:hBrush)
        RELEASE BRUSH oBrush
        aRec[1]+=2
        nColorR1:=IIF(nColorR2>=nColorR1,nColorR1+nSomaR,nColorR1-nSomaR)
        nColorG1:=IIF(nColorG2>=nColorG1,nColorG1+nSomaG,nColorG1-nSomaG)
        nColorB1:=IIF(nColorB2>=nColorB1,nColorB1+nSomaB,nColorB1-nSomaB)
    NEXT
    oDlgTxt:ReleaseDC()
    RETURN(NIL)

  4. Bom dia, fivewinners,

    Alguém poderia indicar alguns comandos que poderia fazer os mesmos efeitos, resultando a tela abaixo, sem precisar usar os comandos gráficos?

    Porque usando os comandos gráficos, quando abro a tela umas 10 vezes, as figuras e as cores das janelas ficam tudo preto, perde as cores.

    tela.png

  5. Boa tarde,

    Algum no grupo, ja tem disponivel um módulo pra fazer comanda de restaurante pra celular?

    Só o módulo de comanda, onde registra a mesa, o numero de pessas, o garcom, e os itens solicitados

    Obrigado.

  6. Boa noite, Valdir, 

    Como vc disse, seu sistema não tem dado muito trabalho, então, preencha esse espaço de tempo, aprendendo uma nova tecnologia.

    Para cansaço físico e mental, temos suplementos, que podemos mandar fazer em farmácia de manipulação, como:

    Vitamina D3 10000 UI, Cloreto de Magnésio treonato 700 mg, Ginseng Panax 100 mg . Metilcobalamina 1 mg, ômega 3, etc.

    Tudo isso, são comidas de astronautas, são suplementos, que complementam a nossa alimentação, e nos dá mais vigor físico.

    Parar? Never.

  7. Pessoal, resolvido, usando o comando TTXTFILE():NEW(), acho que eu estava "viajando", (pode ser sobrecarga de serviços a fazer) quando testei esse comando na primeira, pra ter dado errado.

    Ficou assim:

       P_DESTINO:="D:\WINSQL"  // pasta destino
       oque_2:="CC.PRG"  // nome do prg a ser alterado
       oque:="LABEL"   // comando a ser localizado dentro da linha e alterado para GROUP
       OQUE_1:="@"   // complemento do comando label: @ LI,CI TO LF,CF LABEL "TITULO" OF ODLG PIXEL
       SS0:=CURDRIVE()+":\"+CURDIR()+"\"+OQUE_2    //arquivo fonte, original
       ARQ_SPED:=P_DESTINO+"\"+oque_2  // arquivo destino
           IF !FILE("&ARQ_SPED.")
              ARQ00=FCREATE("&ARQ_SPED.",0)
              FCLOSE(ARQ00)
           ENDIF
           num:=0
           OFILE:=TTXTFILE():NEW("&SS0.")
           DO WHILE .NOT. OFILE:LEOF()
              apCode:=OFILE:READLINE()
              if alltrim(upper(oque))$upper(apcode) .and. OQUE_1="@" .AND. "@"$APCODE .AND. !("GROUP"$upper(apcode))
                 num:=num+1
                 SS:="OGRP"+ALLTRIM(STR(NUM))+" "
                 p:=at("TO",UPPER(APCODE))
                 if p>0
                    APCODE=STUFF(APCODE,P,0,"GROUP "+SS)
                 endif
              ENDIF   
              APCODE:=APCODE+chr(13)+chr(10)
              ARQ00=FOPEN("&ARQ_SPED.",2)
              FSEEK(ARQ00,0,2)
              FWRITE(ARQ00,APCODE,LEN(APCODE))
              FCLOSE(ARQ00)
              OFILE:SKIP()
           ENDDO
           OFILE:END()
       USE
       DBCLOSEALL()
       ? "FIM"


    Essa rotina substitue do PRG, o comando:

    @ LI,CI TO LF,CF LABEL "TITULO" OF ODLG PIXEL

    por esse:

    @ LI,CI GROUP OGRP1 TO LF,CF LABEL "TITULO" OF ODLG PIXEL 

    Obrigado a todos, pela contribuição.

    Até a próxima.

     

  8. Boa noite rochina,

    A variável apcode, recebe o resultado da função memoline

    APCODE:= MemoLine( arq_prg, 500, i, 8, .T. )

    Só que memoline, só lê linha de ate 254, e o padrão é 79, se não foi mencionado nenhum valor.

    e eu preciso de uma função que leia linhas com mais de 254 caracteres.

    obrigado.

  9. Boa noite,

    De acordo com o manual do xharbour, a função mlcount, só processa linhas ate 254 caracteres, e o padrão desse comando é 79.

    Assim, enquanto a rotina pegava linha por linha do prg, só conseguia processar até 254, e eu preciso que precesse a linha inteira.

    Nos meus prgs, tem linhas até 400 caracteres por linha (linhas com mais de 254 caracteres). Logo, se a função só manipula até 254 caracteres, essas linha ficam truncadas.

    só B.O.

    Vou testar essas funçoes: FOpen(), FRead(), FSeek(), FWrite() e FClose()

     

     

  10. Boa tarde, fivewinner.

    Eu sempre usei o comando @ l,c Label, nos meus programas, então, todas as molduras, dentro dos window e dialog, foram feitas com esse comando: @ label

    Agora, estou precisando alterar todos os comandos @ label, para o @ GROUP, essa rotina de alteração já está ok, mas, o problema está na leitura dos PRGs e regravação,

    pois, quando uso o comando memoread, mlcount, memoline, e memowrite, não grava a linha inteira, só 79 caracteres, ou só 254 caracteres, e nos meus módulos tem linhas que chega a 500 caracteres por linha

    como resolver esse problema de ler e regravar linhas com mais de 254 caracteres?

    como estou fazendo:

       SS0:=CURDRIVE()+":\"+CURDIR()+"\WINCOM.PRG"
       arq_prg:=memoread(SS0)
       NOVO_ARQ:=""
       QTL := MLCount(arq_prg,500, 8, .T. ) // aqui vc pode alterar para o valor que vc quiser, que não funciona - MLCount(arq_prg) esse comando não funciona tbm
       FOR I=1 TO QTL
           APCODE:= MemoLine( arq_prg, 500, i, 8, .T. )
           APCODE1:=APCODE
           if alltrim(upper(oque))$upper(apcode) .and. OQUE_1="@" .AND. "@"$APCODE .AND. !("GROUP"$upper(apcode))
              nreg:=nreg+1
              SS:="OGRP"+ALLTRIM(STR(NREG))+" "
              p:=at("TO",UPPER(APCODE))
              if p>0
                 APCODE=STUFF(APCODE,P,0,"GROUP "+SS)
              endif
           ENDIF
           APCODE:=ALLTRIM(APCODE)+chr(13)+chr(10)
           NOVO_ARQ:=NOVO_ARQ+APCODE
       NEXT   
       SS1:="D:\WINPRG\WINCOM.PRG"
       MEMOWRIT(SS1,NOVO_ARQ)

       ? "O arquivo "+ss0+" foi gravado em "+ss1
     

    Já testei tbm com os camandos, que tbm não funcionam?

           OFILE:=TTXTFILE():NEW("&SS0.")
           DO WHILE .NOT. OFILE:LEOF()
              apCode:=OFILE:READLINE()
              .

              .

              .

     

     

     

  11. E tenho um software para computador local, onde pelo teclado o funcionário digita o codigo de matricula e uma senha, aceitando até 3 período por dia, manha, tarde, e noite

    pode registar os dias de feriados do mês (os automáticos não precisa), afastamentos, ferias, etc e emitir o espelho do cartão de ponto, já tudo calculado, horas extras, faltas, atrasos.

    Mas, o que eu saiba, por lei, só pode usar esses sistemas de computador, para as empresas de até 10 funcionários.

    Acima de 10 funcionários, tem que comprar o relógio com digital, que sai o ticket na hora de bater o ponto. Isso evita fraude.

    Para o juiz, o sistema de computador é passivel de fraude, o patrão, pode alterar o horário do funcionário e roubá-lo.

    Espero ter ajudado.

  12. eu faço assim:

             // A VARIAVEL CODEAN13 GUARDA O CÓDIGO EAN13 DIGITADO PELO OPERADOR
             DIGI="131313131313"
             T=0
             FOR I=1 TO 12
                 T=T+(VAL(SUBSTR(CODEAN13,I,1))*VAL(SUBSTR(CODEAN13,I,1)))
             NEXT I
             DIG="0"
             IF (T/10)>INT(T/10)
                DIG=STR(((INT(T/10)+1)*10)-T,1)
             ENDIF
             IF RIGHT(CODEAN13,1)#DIG
                MSGINFO("Código de barra inválido!","Favor verificar:")
             endif
     

  13. Boa noite fivewinner,

    Alguém sabe como gerar a codificação hb_sha256, quando ao compilar o programa, aparece a mensagem de função inexistente?

    uso fivewin com o compilador comercial xharbour

    e tbm não consegui achar a lib, dessa função

    se alguem puder ajudar, será muito bem vindo

    essa necessidade é para codificar e assinar os arquivos json, de boletos, para enviar para o banco bradesco, via webservice.

    Ainda não testei o envio ao banco, até agora, só gerei o arquivos json, e travou na assinatura.

    Obrigado a todos.

     

  14. Boa noite, FiveWinners

    Alguém sabe como deixar os cantos arredondados, no comando que exibe imagens, o IMAGE ?

    Exemplo do camando:

       GCFILE:=PASTA_FOTO+"\FOTO000000.JPG"
       @ 10,10 IMAGE oImage1 SIZE 100,100 OF oWnd PIXEL noborder CURSOR OCURSOR
       oImage1:Progress( .F. )
       oImage1:LoadBmp( gcFile )
       oImage1:ltransparent:=.T.
       oImage1:lStretch:=.T.
       oImage1:ScrollAdjust()
       oImage1:Refresh()
     

     

  15. eu faria assim, dentro do for/next:

    for nm=1 to total_de_mesas

           mesas:=mesa+strzero(nm,3)

           if  &mesas.="aberto"

      **** exibe o número da mesa, uma figura de uma mesa ocupada, quantidade de pessoas, hora que abriu, e o valor gasto até o monento, dentro de um quadrado ou retângulo com bordas arredondadas ou dentro de um círculo

         endif

    next

         

     

×
×
  • Create New...