Jump to content
Fivewin Brasil

ricardomouramarques

Membros
  • Posts

    539
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by ricardomouramarques

  1. Kapiaba, Olha isso: "Una vez tenemos el fichero .hil lo traduciremos al idioma que queramos usando la utilidad hbdict que se encuentra en \xharbour\utils\hbdict" Pergunto: Onde se encontra esse "hbdict"? Vc tem isso no seu (x)Harbour? Eu tenho várias versões do xHabrour e do Harbour, mas nenhuma possui esse utilitário.
  2. Kapiaba, Na verdade eu não estava querendo usar DLLs e sim o tal do .HIT. Mais ou menso assim: Sei que pasando o parâmetro /Jaqr..HIT na linha de compilação do xHarbour ele cria uma arquivo (arq.hit) com tudo que estiver declarado dentro de i18n()... assim: @ 10,10 Say i18n("qualquer coisa")... Depois usam um tal de HBDict.. uma espécie de dicionário que converte e tal... não sei se é isso mesmo que entendi. Segundo num forum que lí, esse HBDict estaria na pasta ...xHarbour\utils, mas não encontrei aqui. Vc ou alguém possui essa subpasta "utils". E lá tem esse HBDict.exe?
  3. Ví no forum internacional algo sobre aplicação em multidioma: http://fivetechsupport.com/forums/viewtopic.php?f=6&t=20480 Alguém tem alguma idéia de com funciona isso? Editado por - ricardomouramarques on 22/03/2011 18:11:33
  4. Ví no forum internacional algo sobre aplicação em multidioma: http://fivetechsupport.com/forums/viewtopic.php?f=6&t=20480 Alguém tem alguma idéia de com funciona isso? Editado por - ricardomouramarques on 22/03/2011 18:11:33
  5. citação: Acho que com button nativo não é possivelid=quote>id=quote>Bom... ter jeito tem... Ne que seja na marra... kkk pega aí: **************************************************************** #include "fivewin.ch" //-------------------------------------------------------------- Function Main() Private oTmr, nClrPane, nClrText define dialog oDlg Title "Teste" From 0,0 to 180, 230 Pixel @ 20,32 Button oBtn Prompt "Botão piscante" Size 50,20 PIxel @ 70,20 Button "Piscar" Size 35,10 Pixel Action oTmr:Activate() @ 70,60 Button "Parar" Size 35,10 Pixel; Action (oTmr:DeActivate(), oBtn:SetColor(nClrText, nClrPane), oBtn:Refresh()) activate dialog oDlg Center On Init Inicio(oBtn) //-------------------------------------------------------------- Function Inicio() Define timer oTmr Interval 800 Action Pisca(oBtn) of oDlg Return NIL //--------------------------------------------------------------- Function Pisca(oBtn) local hPen, hOldPen, nClrText, nClrPane, i Static lPisca := .t. if lPisca nClrText := CLR_WHITE nClrPane := CLR_RED lPisca := .f. else nClrText := oBtn:nClrText nClrPane := oBtn:oWnd:nClrPane lPisca := .t. endif oBtn:GetDC() hPen := CreatePen( 0, 1, nClrPane ) hOldPen := SelectObject( oBtn:hDc, hPen ) for i := 2 to oBtn:nHeight-3 MoveTo( oBtn:hDC, 2, i ) LineTo( oBtn:hDC, oBtn:nWidth-2, i ) next DrawText( oBtn, oBtn:cCaption, nClrText, nClrPane, oBtn:oFont) oBtn:ReleaseDC() Return NIL //--------------------------------------------------------------- FUNCTION DrawText( oBtn,cPrompt,nClrText,nClrPane,oFont) Local hOldFont, nOldMode, nOldClrText, nOldClrPane, x, y Local hDc := oBtn:hDc y := (oBtn:nHeight-oBtn:oFont:nHeight)/2 x := (oBtn:nWidth-( len(cPrompt)*oBtn:oFont:nWidth ))/2 nOldClrText:=SetTextColor(hDC,nClrText) nOldBkMode:=SetBkMode(hDC,1) NoldBkMode:=SetbkMode(nrgb(224,226,222),1) hOldFont:=SelectObject(hDC,oFont:hFont) TextOut(hDC,Y,X,cPrompt,Len(cPrompt)) SelectObject(hDC,hOldFont) SetBkMode(hDC,nOldBkMode) SetTextColor(hDC,nOldClrText) Return NIL **************************************************************** id=code>id=code>
  6. Complementando... Como se trata de DIALOG, vc deve fazer assim: ************************************************************ Define Dialog oDlg.... Activate Dialog oDLG ON INIT Iniciar() //-------------------------------------------- Function Iniciar() // vc deve iniciar os controles Aqui @ 1.6,0.5 GROUP oGroup1 TO 16,72 OF oDlg @ 1, 1 Bitmap oBmp RESNAME aBmp[1] OF oGroup1 SIZE 8,8 PIXEL NOBORDER ... Return NIL ************************************************************ id=code>id=code>Desta maneira não haverá erro na compilação.
  7. Simples. Coloque o Bitmao pertencendo ao GROUP (of oGroup) exemplo: @ 1.6,0.5 GROUP oGroup1 TO 16,72 OF oDlg @ 1, 1 Bitmap oBmp RESNAME aBmp[1] OF oGroup1 SIZE 8,8 PIXEL NOBORDER id=code>id=code>Lembrando que, como o BITMAP pertence ao GROUP, a linha e coluna do BITMAP deve ser declarada sabendo que se trata da linha dentro do GROUP, ou seja, a linha 0 (zero) é a primeira linha dentro do GROUP, e não da DIALOG.
  8. citação:Seguindo seu principio, o porque de SAY/GET não ocorrer ? id=quote>id=quote>... mistérios da meia noite. brincadeirinha. Mas as vezes acontece também. Comigo já aconteceu com GET. Daí os GETs reapareciam conforme ganhavam o FOCO. De qualquer forma é só fazer como eu disse a cima.
  9. Segue: **************************************************************** #include "fivewin.ch" //-------------------------------------------------------------- Function Main() Private oTmr, nClrPane, nClrText define dialog oDlg Title "Teste" From 0,0 to 180, 230 Pixel @ 20,32 BtnBmp oBtn Prompt "Botão piscante" Size 50,20 PIxel nClrText := oBtn:nClrText nClrPane := oBtn:nClrPane @ 70,20 Button "Piscar" Size 35,10 Pixel Action oTmr:Activate() @ 70,60 Button "Parar" Size 35,10 Pixel; Action (oTmr:DeActivate(), oBtn:SetColor(nClrText, nClrPane), oBtn:Refresh()) activate dialog oDlg Center On Init Inicio() //-------------------------------------------------------------- Function Inicio() Define timer oTmr Interval 800 Action Pisca() of oDlg Return NIL //--------------------------------------------------------------- Function Pisca() Static lPisca := .t. if lPisca oBtn:SetColor(CLR_WHITE, CLR_RED) oBtn:Refresh() lPisca := .f. else oBtn:SetColor(nClrText, nClrPane) oBtn:Refresh() lPisca := .t. endif Return NIL **************************************************************** id=code>id=code>
  10. complementando... Vou explicar o porque dos Groups antes. Quando vc executa qualquer ação, como um clique no button ou outra coisa qualquer, a janela e seus objetos são redesenhados (painted). Se o GROUP vem depois dos buttons o que acontece? O sistema redesenha o button e depois redesenha o GROUP sobre ele. Então parece que ele (button) ficou invisivel, quando na verdade ele está embaixo do GROUP.
  11. citação:Utilizo WorkShop e nos programas não uso @ say e sim REDEFINE id=quote>id=quote>Tudo bem. Abra o PRG e coloque os "Redefine GROUP" antes dos "Redefine Button". Se é que está utilizando GROUP.
  12. Está usando os botões dentro de um Group? Se sim, declare os Groups antes dos Buttons, ou declare os Buttons assim: @ nLin, nCol Group oGrp... @ nlin, nCol Button... of oGrp
  13. Corrijam a linha (1096) Onde está: ::nDec := len(::cText)-AT(".",::cText) id=code>id=code>Troquem por: ::nDec := if( len(::cText)-AT(".",::cText) > ::nDec, len(::cText)-AT(".",::cText), ::nDec) id=code>id=code>
  14. citação: acredito que o ENTER poderia finalizar a calculadora e confirmar id=quote>id=quote>Luis Fernando, Como vc mesmo disse o fonte está lá... é só alterar Uma dica nesse caso, pra não dar muito trabalho: - Tem duas linhas no inicio do código, 61 e 62 (acho) começão assim: DATA aKeys AS Array INIT { 48, 49, 50,...13,...} DATA aOps AS Array INIT { 21, 16, 17,...24,...} id=code>id=code>Uma corresponde ao código da tecla digitada e a outra ao botão correspondente. Então vejam que os dois Vetores têm o mesmo número de elementos. Ou seja: Se a tecla digitada for a 48, então ele acionará o botão 21, se a tecla for a 49, o botão será o 16 e assim vai. Agora Observe que a tecla 13 (enter) está associada ao botão 24 (+). Então basta trocar o número do botão para 25 e o enter passará a corresponder ao botão [FIM]. Para entenderem os números dos botões: - Comecem a contar do canto superior euquerdo. Esse é o 1 - A sua direita vem o 2, 3, 4, 5... - Daí para a segunda linha de botões, no canto esquerdo vem o 6 e para a sua direita, vêm o 7, 8, 9, 10... - E por aí vai, até o botão 25. Deu pra entender!?!? (no bom sentido) não deu??? então vou desenhar: [01][02][03][04][05] [06][07][08][09][10] [11][12][13][14][15] [16][17][18][19][20] [21][22][23][24][25] id=code>id=code>brincadeirinha... olha o palavrão!!! Mas é isso aí... é fácil trocar o "R" pelo "S", a "\" pelo "F" e por aí vai. Agora... na minha modesta opnião: Trabalho em um banco... e como todo bancário, eu também passo pelo caixa. E o enter como operador "+" é uma mão na roda. Pense: A grande maioria das operções feitas em uma calculadora são de ADIÇÃO, e dar uma dedada nessa "teclona" é muito melhor do que acertar auela teclinha [+] que fica espremidinha alí entre o [.] e o [-]. Então quando se tem uma montanha de documetos para somar, o [ENTER] é o cara. É só minha opnião.
  15. Alô galera, Primeiro: Quanto ao ponto ou virgula: o que é apresentado na cauladora, se trata apenas de uma máscara. E o correto para o brasileiro é uma vírgula. Agora, quanto ao que digitar no teclado, tanto faz, ela está configuara para aceitar tanto um como outro, embora apresente sempre a vírgula. Embora no código seja sempre o ponto... e ele está lá... então... Detalhe: Eu havia configurada o ponto do teclado numérico e o ponto e a virgula do "outro teclado", mas havia me esquecido da vírgula do teclado numérico. Agora tá belezinha... tecle qualquer um que vai funfá. Segundo: Quanto ao zero após a virgula (ou ponto), já está corrigido. E agora mais gatinha ainda... e também é de "pobre"...kkk Em Dicas: http://www.fivewin.com.br/exibedicas.asp?id=1080
  16. Calculadora para usar com GET ou simplemente avulsa. Código fonte incluido... Ficou lindinha. kkk. E o melhor de tudo é que funciona. Operações: adição, subtração, divisão, multiplicação, raiz quadrada, fração... Pode usar com o mouse ou com o teclado*. *Tem um menu de ajuda onde pode consultar os atalhos do teclado By: "eu" Postei em dicas: http://www.fivewin.com.br/exibedicas.asp?id=1080 Editado por - ricardomouramarques on 14/03/2011 11:01:15 Editado por - ricardomouramarques on 15/03/2011 10:25:50
  17. Calculadora para usar com GET ou simplemente avulsa. Código fonte incluido... Ficou lindinha. kkk. E o melhor de tudo é que funciona. Operações: adição, subtração, divisão, multiplicação, raiz quadrada, fração... Pode usar com o mouse ou com o teclado*. *Tem um menu de ajuda onde pode consultar os atalhos do teclado By: "eu" Postei em dicas: http://www.fivewin.com.br/exibedicas.asp?id=1080 Editado por - ricardomouramarques on 14/03/2011 11:01:15 Editado por - ricardomouramarques on 15/03/2011 10:25:50
  18. Luiz só complementando... Para salvar em banco de dados ou arquivo em disco e depois abri-lo com a mesma formatação, você deve salvar em RTF. Para isso, faça assim: RESaveAsRTF( oRtf:hWnd, SF_RTF ) esta função retorna uma string com a formatação do RTF... Por exemplo: Replace Observ with RESaveAsRTF( oRtf:hWnd, SF_RTF ) Depois, pra carregar faça assim: oRtf:LoadRTF( Observ )
  19. Luiz, É só usar a classe TRichEdit(). Fiz um exemplo (bem simples), onde vc escreve o que quer, seleciona o texto, no caso os "-------", e depois escolhe a cor no botão [ cor ]. A partir do ponto selecionado tudo que digitar estará com a nova cor. Obs: Não se preocupe com a DLL, ela já se encontra no diretório System32 do windows. segue: **************************************************************** #include "fivewin.ch" #include "RichEdit.ch" //-------------------------------------------------------------- Function Main() local hDLL := LoadLibrary( "Riched20.dll" ) cTexto := "" Define dialog oDlg Title "Teste Cores" From 0,0 to 400, 600 Pixel @ 10, 10 RICHEDIT oRTF VAR cTexto OF oDlg SIZE 280, 150 PIXEL @ 175,10 Button "&Cor" Size 40,10 Pixel; Action oRTF:Colorize( oRtf:GetSelection()[1], oRtf:GetSelection()[2], ChooseColor() ) Activate dialog oDlg CENTER FreeLibrary( hDLL ) Return NIL //-------------------------------------------------------------- **************************************************************** id=code>id=code>
  20. citação: tá quase dominado id=quote>id=quote>Oi João!!! Desculpe não ter respondido a última. É que cheguei em casa agora. Mas que bom que já encontrou o caminho.
  21. segue: oCfg := CREATEOBJECT( "CDO.Configuration" ) WITH OBJECT oCfg:Fields :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := "mail.dominio.com.br" :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := 587 :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2 :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .t. :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := .t. :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := "usuario" :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := "senha" :Update() END WITH id=code>id=code>
  22. Certa vez, houve um tópico sobre isso, e não sei se lembram, desenvolvi, juntamente com contribuições do Kapiaba, um DTPicker "alternativo". Coloquei ele em Dicas: http://www.fivewin.com.br/exibedicas.asp?id=1075
  23. valos lá, Antes de tudo precisamos de um nome para o objeto... veja, você está fazendo assim: id=code>id=code>mas deve fazer assim: id=code>id=code>blz... daí fica pra frente é fácil: oMSG:cMsg := "novo nome a ser apresentado" oMSG:nWidth := 5555 /novo tamanho (size) oMSG:Refresh() id=code>id=code>pronto. Aproveitei o teu código e fiz um exemplo. Pegue abaixo e complie pra ver: ****************************************************************************** #include "fivewin.ch" //-------------------------------------------------------------------------- Function Main() nUsu := "Ricardo Marques" define window oWnd title "teste" @ 40,40 Button "Troca Usuario" Size 80,20 Pixel; Action TrocaUsuario("Joao Batista da Silva") SET MESSAGE OF oWnd TO "Sistema Gerencial de Compra Premiada CP80" ; CENTERED 2007 DEFINE MsgItem oMsg1 OF oWnd:oMsgBar ; Prompt "Usuário: " + alltrim(nusu) ; Pixel Size Len("Usuário: " + alltrim(nusu))*6.5+55 ; TOOLTIP "Usuário logado no sistema" ; BITMAPS "male.bmp" DEFINE MSGITEM oMsg2 OF oWnd:oMsgBar ; BITMAPS "print1.BMP" ; ACTION PrinterSetup() ; TOOLTIP "Setup da impressora" oWnd:oMsgBar:DateOn() oWnd:oMsgBar:ClockOn() WndCenter(oWnd:hWnd) activate window oWnd Maximized //-------------------------------------------------------------------- Function TrocaUsuario( cUsu ) oMsg1:cMsg := "Usuário: "+cUsu oMsg1:nWidth := Len("Usuário: " + alltrim(cUsu))*6.5+55 oMsg1:Refresh() Return NIL ******************************************************************************
  24. citação:Mas se eu fizer uma consulta,em que o resultado seja o 1º item do radio. id=quote>id=quote>Oliveira, Segue um exemplo que, acredito, vai resolver o seu problema: ********************************************************************************* #Include "Fivewin.ch" //----------------------------------------------------------------------- Function Main() Private oRad1, oBut1, nRad1 := 1 DEFINE FONT oFONT1 NAME "Ms Sans Serif" SIZE 0, -12 DEFINE FONT oFONT2 NAME "MS Sans Serif" SIZE 0, -13 BOLD Define DIALOG oForm2 TITLE "oForm2" ; FROM 0, 0 to 215, 517 PIXEL COLOR 0, 15790320 ACTIVATE DIALOG oForm2 ON INIT Inicio() Return NIL //---------------------------------------------------------------------------- Function Inicio() @ 50, 42 RADIO oRad1 VAR nRad1 Prompt "Item 1",; "Item 2",; "Item 3"; SIZE 100, 20 PIXEL OF oForm2 @ 154, 231 BUTTON oBut1 Prompt "Button 1" SIZE 70, 24 PIXEL; OF oForm2 ACTION NIL FONT oFont1 oRad1:aItems[1]:Move( 50, 42, 100, 20, .T. ) oRad1:aItems[1]:SetColor( 0, 15790320 ) oRad1:aItems[1]:SetFont( oFont1 ) oRad1:aItems[2]:Move( 50, 142, 100, 20, .T. ) oRad1:aItems[2]:SetColor( 0, 15790320 ) oRad1:aItems[2]:SetFont( oFont1 ) oRad1:aItems[3]:Move( 50, 242, 100, 20, .T. ) oRad1:aItems[3]:SetColor( 0, 15790320 ) oRad1:aItems[3]:SetFont( oFont1 ) oRad1:bChange := {||SetFontes( oRad1 )} //<- aqui tá a "parada" SetFontes( oRad1 ) //<- faça isso também pra começar Return NIL //----------------------------------------------------------------------------- Function SetFontes( oRad ) //função que define a fonte for i := 1 to len(oRad:aItems) oRad:aItems:SetFont( if( oRad:nOption = i, oFont2, oFont1 ) ) oRad:aItems:Hide() oRad:aItems:Show() next Return NIL ********************************************************************************* id=code>id=code>
  25. Colegas, quanto a sumir os objetos: Não sei se esse é o caso aqui, mas quando o GROUP é usado de maneira incorreta isso acontece. Vejam, se está usando um GROUP, os objetos dentro dele devem "pertencer" a ele e não a janela.. tipo: define dialog oDlg... @ 10,10 GROUP oGrp...of oDlg // o GROUP ele pertence a oDlg @ 10,10 Radio oRad.... of oGrp // o Radio pertence a oGrp Lembrando que a linha 10 do Radio, no exemplo acima, é a linha 10 do GROUP e não da DIALOG. Caso coloquem o "Radio" como "of oDlg", ou seja, pertencendo a Janela, correrão o risco do GROUP sobrepor o "Radio" e isso irá parecer que ele sumiu, quanto na verdade ele está por baixo do GROUP.
×
×
  • Create New...