Jump to content
Fivewin Brasil

ricardomouramarques

Membros
  • Posts

    539
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by ricardomouramarques

  1. Pompeo, Pode ficar tranquilo. Uso essa classe a mais de 6 anos e nunca tive problemas. Só alegrias. Inclusive, certa vez desenvolvi uma semelhante para a turma do HWGUI. Se olhar o arquivo DATABASE.PRG (source\classes), vc verá que internamente ela usa as mesmas funções do (x)harbour que nós usamos. Apenas facilita. Não precisamos nos preocupar com coisas como LOCK, UNLOCK, etc. Além de não ser necessário ficar criando uma infinidade de variáveis. AH! e gravar é uma mamata... :append(), :save() e pronto.
  2. ops!!! Como se trata de um registro novo, esqueci de um ::append() antes do ::Save(). Então o resulmo ficaria assim: #include "Fivewin.ch" Function Main() Set Exclusive OFF Use clientes NEW DATABASE oCLi oCLi:Blank() Define dialog oDlg... @ 10,10 GET oGet1 VAR oCli:Nome... @ 22,10 GET oGet2 VAR oCli:Endereco... @ 34,10 GET oGet3 VAR oCli:Cidade... @ 60,10 Button "Salvar" Action (oCli:Append(), oCli:Save(), oDlg:End() ) Activate Dialog oDlg Return NIL id=code>id=code>é isso aí. muito fácil. Ricardo.
  3. Se está usando DBF, por que não usa a classe TDATABASE? Primeiro coloque isso: Set Exclusive OFF // se OFF todos os seus arquivos são abertos em modo compartilhado. Isso não depende da classe. Faz parte do Clipper e do (x)Harbour Uma das muitas vantagens é que você não precisará criar variáveis. O Objeto DATABASE já as criou como variáveis de instância. Além disso, todo o tratamento de gravação é feito pela classe. Digamos que a estrutura do arquivo Clientes.DBF seja: NOME, "C", 40, 0 ENDERECO, "C", 70, 0 CIDADE, "C, 40, 0 id=code>id=code>Então vamos ver como fica Set exclusive OFF Use Clientes NEW DATABASE oCli //"oCli" é o objeto usado para tratar o DBF oCli:Blank() // aqui tenho minhas variáveis em branco ou limpas. //então, no GET por exemplo eu usaria assim: @ 10,10 GET oGet1 VAR oCli:Nome... @ 22,10 GET oGet2 VAR oCli:Endereco... @ 34,10 GET oGet3 VAR oCli:Cidade... // agora se quiser carregar as variáveis com o valor que está no DBF, basta fazer assim: oCli:Load() //aqui tenho todas as minhas variáveis carregadas com o valor do DBF, de acordo com o Registro posicionado: // para salvar, é muito fácil: oCli:Save() // pronto salvou tudo com uma unica linha *********************************************************** id=code>id=code>Vou fazer um resumo aqui, pra vc ver como fica tudo mais fácil: #include "Fivewin.ch" Function Main() Set Exclusive OFF Use clientes NEW DATABASE oCLi oCLi:Blank() Define dialog oDlg... @ 10,10 GET oGet1 VAR oCli:Nome... @ 22,10 GET oGet2 VAR oCli:Endereco... @ 34,10 GET oGet3 VAR oCli:Cidade... @ 60,10 Button "Salvar" Action ( oCli:Save(), oDlg:End() ) Activate Dialog oDlg Return NIL *********************************************************** id=code>id=code>Há várias outros Methods na classe, alias, tudo que vc usa pra tratar um DBF, tipo: considerando "oCli" como objeto oCli:Skip( n ) oCli:Seek( uSeek ) oCLi:GoTop() oCli:GoBottom() oCli:GoTo( n ) oCli:Commit() oCli:RecNo() oCli:Pack() oCli:Delete() oCli:Zap() oCli:Eof() oCli:Bof() oCli:RecCount() oCli:fCount() etc... etc... etc De uma olha na classe: fwh\source\classes\database.prg Ricardo.
  4. Coloque a imagem e depois campos (gets) sobre essa imagem. Tipo: @ lin, col Image oIMG.... // aqui a imagem @ lin, col GET oGet1... of oIMG // aqui o get sobre a imagem Ricardo
  5. Me diga: onde está declarada esta variável cRTF? Outra: Tente declarar esta variável junto com as outras, tipo: Private cRTF := "" Ricardo.
  6. Luiz, Me parece que ele está perdendo o Objeto ::oWnd. Faz assim: No fonte (TRCALC.PRG), na linha 121 vc verá isso: ::oWnd := GetWndDefault() ::oWnd:CoorsUpdate() oGetR := ::oWnd:GetRect() //LINHA 121 nT := oGetR:nTop + 25 nL := oGetR:nLeft + 25 id=code>id=code>Abra uma linha e coloque um SysRefresh() alí. Ficará Assim: ::oWnd := GetWndDefault() ::oWnd:CoorsUpdate() SysRefresh() // SYSREFRESH() AQUI oGetR := ::oWnd:GetRect() //velha 121, agora 122 nT := oGetR:nTop + 25 nL := oGetR:nLeft + 25 id=code>id=code>Ricardo
  7. DICAS: pra começar insira um xbrowse e pressione control+P vc poderá configuarar várias opções do xbrowse aí se fez isso: Em "DISPLAY" com um duplo clique vc define quais campos vc deseja que seja apresentado, no "HEADER" vc altera o titulo da coluna, em "WIDTH" vc define a larguma da coluna se na opção "2007", vc escolher "FALSE", então poderá definir as cores do HEADER e do FOOTER pode escolher cores diferentes para cada coluna, header ou footer, assim como também as fontes de cada uma... ou todas Insira um TSAY e depois pressione CONTROL+D algumas vezes pra duplicar esses SAYs. Depois selecione todos os SAYs com a ferramenta SELEÇÃO... apos isso pressione CONTROL+E e pra editar todos. Também pode trocar as cores ou fontes de todos os selecionados, clicando na linha correspondente do OBJECT INSPECTOR pode também arrastar todos os selecionados com o mouse ou usando os controles da barra a direita. Ah! Nesta barra dá pra fazer algumas coisas como centralizar, distribuir, etc. no menu "CONTROLS->ORDER", vc pode alterar a ordem do controle... muito util, se após inserir vários controles, vc decidiu enfiar um outro lá no meio. ah! falando em enfiar um controle no meio de outros já inseridos, vc também pode fazer isso de forma mais fácil... faz assim: basta SELECIONAR o controle anterior ao novo que vc deseja inserir. Depois escolhe o control novo e na hora de inseri-lo no form vc segura o CONTROL pra clicar... entendeu? *use as setas pra movimentar os controles. *Setas+SHIFT para um movimento mais rápido *SETAS+CONTROL pra alterar o tamanho do(s) control(s). *Se selecionados mais de 1, todos os efeitos serão atribuidos a todos depois é só clicar no botão SOURCE e o código taí. Ele cria um arquivo de nome TEMP.PRG e abre com o NOTEPAD . Então vc pode salva-lo com o nome que vc quizer. (futuramente vou colocar uma opção pra vc definir qual programa usar) Ricardo
  8. ops!!! ficou inlível de novo: Function Main() //Declare aqui PRIVATE cRTF := "" PRIVATE nSize := 10 PRIVATE aZoom := { "500%", "200%", "150%", "100%", "75%", "50%", "25%", "10%" } PRIVATE cZoom := aZoom[ 4 ] PRIVATE aRatio := { { 5, 1 }, { 2, 1 }, { 3, 2 }, { 1, 1 }, ; { 3, 4 }, { 1, 2 }, { 1, 4 }, { 1, 10 } } PRIVATE oWnd, oItem, aFonts, cFont, hDC, oSize, oZoom PRIVATE oMsgBar, oLen, oRow, oCol Function New() // Não declare aqui DEFINE WINDOW oWnd FROM 0, 0 TO 300, 937 PIXEL ; MDICHILD OF oWndMain:oWnd ; TITLE "TRichEdit" ; COLOR CLR_BLACK, nil oWnd:SetIcon( TIcon():New( ,, "WordPad" ) ) oWnd:SetFont( oFont ) id=code>id=code>Ricardo
  9. Luiz Coloque as declarações das VARs e OBJs na primeira Função. POr exemplo: Function Main() //DECLARE TODAS AQUI: PRIVATE cRTF := "" PRIVATE nSize := 10 PRIVATE aZoom := { "500%", "200%", "150%", "100%", "75%", "50%", "25%", "10%" } PRIVATE cZoom := aZoom[ 4 ] PRIVATE aRatio := { { 5, 1 }, { 2, 1 }, { 3, 2 }, { 1, 1 }, ; { 3, 4 }, { 1, 2 }, { 1, 4 }, { 1, 10 } } PRIVATE oWnd, oItem, aFonts, cFont, hDC, oSize, oZoom PRIVATE oMsgBar, oLen, oRow, oCol ... ... ... //------------------------------------------ FUCNTION New() //NÃO declare suas VARS aqui define window.... id=code>id=code>Ricardo.
  10. Simples Quando vc chama a segunda WINDOW ela é aberta e então retorna pra função anterior. A segunda WINDOW não aguarda. Ela volta pra função chamadora e todas as suas variáveis criadas nesta segunda window, seja Local ou Private, simplesmente deixam de existir. Daí "PAU" Faça assim: Declare todas as variáveis dessa segunda WINDOW e de seus CONTROLES, inclusive do TRICHEDIT na primeira função como PRIVATE e problema resolvido. Ricardo.
  11. Faça como eu disse. testei e deu certo. Vamos lá: Primeiro altere a classe do XBROWSE. Como? Vá no METHOD KEYDOWN( nKey, nFlags ) e no final, depois do ENDCASE e antes do Return NIL coloque: if ::bKeyDown <> NIL Eval(::bKeyDown, nKey, nFlags) endif id=code>id=code>No seu PRG, após o XBROWSE coloque: oBrw:BkeyDown := {|nKey| VerCol(oBrw, nKey)} id=code>id=code>e crie esta função pra testar: //--------------------------------------------------------------------------------// Function VerCol(oBrw, nKey) if nKey = VK_LEFT .or. nKey = VK_RIGHT msginfo( "Coluna: "+str( oBrw:ColAtPos( oBrw:nColSel ):nCreationOrder ) ) endif Return NIL //--------------------------------------------------------------------- id=code>id=code>Faça isto e me diga se funcionou ou não. Ricardo.
  12. Luiz, Como a macro é processada em tempo de execução, em alguns casos pode haver problema sim, mas em muitas situações ela é de grande valia. Alias eu uso muito. Nessas opções de SET, USE, COPY (linhas de comando), por exemplo eu aconselho usar usar as funções. Pra saber qual é a função e quais parâmetros passe a linha de comando e compile. Depois é só abrir o ARQUIVO.PPO correspondete ao PRG e vc verá que a sua linha de comando foi substituída por uma função. Trabalhe então com esta função. Por exemplo: Use Clientes New /é Substituido pela função: dbUseArea( .T.,, "Clientes",, if(.F. .OR. .F., !.F., NIL), .F.,, ) USe Fornex New Shared / por: dbUseArea( .T.,, "Fornecs",, if(.T. .OR. .F., !.F., NIL), .F.,, ) Copy File teste.prg to teste2.prg / vira: __CopyFile( "teste.prg", "teste2.prg" ) id=code>id=code>Então observe que sempre tem uma função correspondente para cada linha de comando e muitos parâmetros são passados como string e isso facilita um bocado. Ricardo.
  13. Luiz, Só uma dica. Em vez de usar MACRO, faça assm: Campo:="\"+"CTB9"+"\"+"EMPRESAS"+"\"+wProp+"\"+FAZ+"\"+cAno Set( 6, Campo ) // Esse no lugar de Set Path To Set( 7, Campo ) // Esse no lugar de Set Default To [code] Como o segundo parâmetro esperado na função Set() é uma String, vc então não precisa passar como macro. Ricardo.
  14. Marcio, Detalhe: tentei enviar para marcioe@ligbr.com.br, mas o email voltou. Me passe um endereço diferente. Ricardo.
  15. citação:coloca no dicas, pois nosso firewall está barrando. id=quote>id=quote>O problema de colocar em dicas é que não se trata de uma versão final. Então a cada atualização teria que colocar um nova dica. inviável. A não ser que fosse possível substituir o arquivo lá colocado... nunca consegui isso. Faz assim, me envia um e-mail e eu respondo pra vc com o rvisual anexado. Ricardo. ricardomouramarques@hotmail.com
  16. Daniel Vou trabalhar nisso. Tem muita coisa em andamento. Esse foi só um beta. Ricardo.
  17. Dica: 26/05/2011 Para escolher entre WINDOW e DIALOG, clique no FORM e, no "Object Inspector" dê um duplo click na "cClass" (primeira linha, segunda coluna). Abrirá então as opções WINDOW e DIALOG. Dicas: 21/05/2011 pra começar insira um xbrowse e pressione control+P vc poderá configuarar várias opções do xbrowse aí se fez isso: Em "DISPLAY" com um duplo clique vc define quais campos vc deseja que seja apresentado, no "HEADER" vc altera o titulo da coluna, em "WIDTH" vc define a larguma da coluna se na opção "2007", vc escolher "FALSE", então poderá definir as cores do HEADER e do FOOTER pode escolher cores diferentes para cada coluna, header ou footer, assim como também as fontes de cada uma... ou todas Insira um TSAY e depois pressione CONTROL+D algumas vezes pra duplicar esses SAYs. Depois selecione todos os SAYs com a ferramenta SELEÇÃO... apos isso pressione CONTROL+E e pra editar todos. Também pode trocar as cores ou fontes de todos os selecionados, clicando na linha correspondente do OBJECT INSPECTOR pode também arrastar todos os selecionados com o mouse ou usando os controles da barra a direita. Ah! Nesta barra dá pra fazer algumas coisas como centralizar, distribuir, etc. no menu "CONTROLS->ORDER", vc pode alterar a ordem do controle... muito util, se após inserir vários controles, vc decidiu enfiar um outro lá no meio. ah! falando em enfiar um controle no meio de outros já inseridos, vc também pode fazer isso de forma mais fácil... faz assim: basta SELECIONAR o controle anterior ao novo que vc deseja inserir. Depois escolhe o control novo e na hora de inseri-lo no form vc segura o CONTROL pra clicar... entendeu? *use as setas pra movimentar os controles. *Setas+SHIFT para um movimento mais rápido *SETAS+CONTROL pra alterar o tamanho do(s) control(s). *Se selecionados mais de 1, todos os efeitos serão atribuidos a todos depois é só clicar no botão SOURCE e o código taí. Ele cria um arquivo de nome TEMP.PRG e abre com o NOTEPAD . Então vc pode salva-lo com o nome que vc quizer. (futuramente vou colocar uma opção pra vc definir qual programa usar) dicas: - Para inserir um novo controle entre outros já inseridos: 1 selecione o controle imdiatamente anteiror ao que vc quer inserir 2 Selecione, na barra de ferramentas o novo controle 3 Segure o CONTROL na hora do CLICK - Use CONTROL+D para duplicar um controle (abaixo) - Use SHIFT+D para duplicar um controle (a direita) - Para selecionar mais de um controle, individualmente, click sobre cada um com segurando o CONTROL - Para editar as opções do XBROWSE ou FOLDER, selecione o controle e pressione CONTROL+P - Para alterar os "CAPTIONS" de vários controles (como says, buttons, etc) selecione os utilizando a dica acima ou utilizando a ferramenta selecionar e use CONTROL+E outras dicas, passo depois. Editado por - ricardomouramarques on 16/05/2011 11:44:15 Editado por - ricardomouramarques on 21/05/2011 18:16:26 Editado por - ricardomouramarques on 26/05/2011 09:10:25
  18. Dica: 26/05/2011 Para escolher entre WINDOW e DIALOG, clique no FORM e, no "Object Inspector" dê um duplo click na "cClass" (primeira linha, segunda coluna). Abrirá então as opções WINDOW e DIALOG. Dicas: 21/05/2011 pra começar insira um xbrowse e pressione control+P vc poderá configuarar várias opções do xbrowse aí se fez isso: Em "DISPLAY" com um duplo clique vc define quais campos vc deseja que seja apresentado, no "HEADER" vc altera o titulo da coluna, em "WIDTH" vc define a larguma da coluna se na opção "2007", vc escolher "FALSE", então poderá definir as cores do HEADER e do FOOTER pode escolher cores diferentes para cada coluna, header ou footer, assim como também as fontes de cada uma... ou todas Insira um TSAY e depois pressione CONTROL+D algumas vezes pra duplicar esses SAYs. Depois selecione todos os SAYs com a ferramenta SELEÇÃO... apos isso pressione CONTROL+E e pra editar todos. Também pode trocar as cores ou fontes de todos os selecionados, clicando na linha correspondente do OBJECT INSPECTOR pode também arrastar todos os selecionados com o mouse ou usando os controles da barra a direita. Ah! Nesta barra dá pra fazer algumas coisas como centralizar, distribuir, etc. no menu "CONTROLS->ORDER", vc pode alterar a ordem do controle... muito util, se após inserir vários controles, vc decidiu enfiar um outro lá no meio. ah! falando em enfiar um controle no meio de outros já inseridos, vc também pode fazer isso de forma mais fácil... faz assim: basta SELECIONAR o controle anterior ao novo que vc deseja inserir. Depois escolhe o control novo e na hora de inseri-lo no form vc segura o CONTROL pra clicar... entendeu? *use as setas pra movimentar os controles. *Setas+SHIFT para um movimento mais rápido *SETAS+CONTROL pra alterar o tamanho do(s) control(s). *Se selecionados mais de 1, todos os efeitos serão atribuidos a todos depois é só clicar no botão SOURCE e o código taí. Ele cria um arquivo de nome TEMP.PRG e abre com o NOTEPAD . Então vc pode salva-lo com o nome que vc quizer. (futuramente vou colocar uma opção pra vc definir qual programa usar) dicas: - Para inserir um novo controle entre outros já inseridos: 1 selecione o controle imdiatamente anteiror ao que vc quer inserir 2 Selecione, na barra de ferramentas o novo controle 3 Segure o CONTROL na hora do CLICK - Use CONTROL+D para duplicar um controle (abaixo) - Use SHIFT+D para duplicar um controle (a direita) - Para selecionar mais de um controle, individualmente, click sobre cada um com segurando o CONTROL - Para editar as opções do XBROWSE ou FOLDER, selecione o controle e pressione CONTROL+P - Para alterar os "CAPTIONS" de vários controles (como says, buttons, etc) selecione os utilizando a dica acima ou utilizando a ferramenta selecionar e use CONTROL+E outras dicas, passo depois. Editado por - ricardomouramarques on 16/05/2011 11:44:15 Editado por - ricardomouramarques on 21/05/2011 18:16:26 Editado por - ricardomouramarques on 26/05/2011 09:10:25
  19. Luiz, No meu código, altere todos os "oWnd" para "_oWnd". Me responda se funcionou. assim: ******************************************************************** #Include "Fivewin.ch" //------------------------------------------------------------------ Function Main() define Font oFont Name "Arial" Size 0, -12 define dialog oDlg title "Teste Frame" From 0,0 to 600, 900 pixel; COLOR 0, CLR_WHITE activate dialog oDlg Center ON Paint MeuGroup( oDlg ) Return NIL //------------------------------------------------------------------ Function MeuGroup( oDlg ) RGroup( 20, 50, 200, 250, oDlg, nRGB(210,210,210), , , ,"Transparent", CLR_BLACK, , .t., .t. ) RGroup( 20, 300, 200, 550, oDlg, CLR_HBLUE, CLR_HBLUE, .t., ,"Meu Título", ,oFont ) RGroup( 300, 50, 500, 250, oDlg, CLR_RED, nRGB(255,255,13) ) RGroup( 300, 300, 500, 550, oDlg, CLR_GREEN, ,.t., 300, "Título com borda", , , , .t. ) RGroup( 20, 600, 200, 850, oDlg, CLR_HBLUE, CLR_HBLUE, .t., 10 ) RGroup( 300, 600, 500, 850, oDlg, CLR_GREEN, ,.t., 30 ) Return NIL //------------------------------------------------------------------ Function RGroup( nRow, nCol, nRowF, nColF, _oWnd, nCor, nCorFundo, lDeg, nDeg, cLabel, nClrText, oFont, lTransparent, lBorderLabel ) local hPen, i, nR, nG, nB, nInd, nWidth := 0, x := nCol, y := nRow, nLabCrlPane, nClrBord := nCor Default lDeg := .f. Default nCorFundo := nCor Default nDeg := 100 Default lTransparent := .f. Default oFont := _oWnd:oFont Default nClrText := nCor Default lBorderLabel := .f. if !Empty(cLabel) nWidth := (Len( cLabel )*oFont:nHeight*0.5)+10 endif _oWnd:GetDC() hPen := CreatePen( 0, 1, nCor ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol, nRow ) LineTo( _oWnd:hDC, nColF, nRow ) LineTo( _oWnd:hDC, nColF, nRowF ) LineTo( _oWnd:hDC, nCol, nRowF ) LineTo( _oWnd:hDC, nCol, nRow ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR := nRGBRed(nCor) nG := nRGBGreen(nCor) nB := nRGBBlue(nCor) nR += (255-nR)*0.8 nG += (255-nG)*0.8 nB += (255-nB)*0.8 if nR > 255 nR := 255 endif if nG > 255 nG := 255 endif if nB > 255 nB := 255 endif nCor := nRGB( nR, nG, nB) nLabCrlPane := nCor for i := 1 to 4 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol+i, nRow+i ) LineTo( _oWnd:hDC, nColF-i, nRow+i ) LineTo( _oWnd:hDC, nColF-i, nRowF-i ) LineTo( _oWnd:hDC, nCol+i, nRowF-i ) LineTo( _oWnd:hDC, nCol+i, nRow+i ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR := nRGBRed(nCor) nG := nRGBGreen(nCor) nB := nRGBBlue(nCor) nR -= (255-nR)*(0.9*i) nG -= (255-nG)*(0.9*i) nB -= (255-nB)*(0.9*i) if nR < 0 nR := 0 endif if nG < 0 nG := 0 endif if nB < 0 nB := 0 endif next if !ltransparent nInd := (255/(nRowf-nRow))/nDeg nR := nRGBRed(nCorFundo) nG := nRGBGreen(nCorFundo) nB := nRGBBlue(nCorFundo) nCol+=5 nRow+=5 nColf-=5 nRowf-=5 do while .t. hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol, nRow ) LineTo( _oWnd:hDC, nColF, nRow ) LineTo( _oWnd:hDC, nColF, nRowF ) LineTo( _oWnd:hDC, nCol, nRowF ) LineTo( _oWnd:hDC, nCol, nRow ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) if nCol = nColF .and. nRow = nRowF Exit endif if lDeg nR += (255-nR)*nInd nG += (255-nG)*nInd nB += (255-nB)*nInd if nR > 255 nR := 255 endif if nG > 255 nG := 255 endif if nB > 255 nB := 255 endif endif nRow++ if nRow > nRowF nRow := nRowF endif nCol++ if nCol > nColF nCol := nColF endif nRowF-- if nRowF < nRow nRowF := nRow endif nColF-- if nColF < nCol nColF := nCol endif enddo hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol, nRow ) LineTo( _oWnd:hDC, nColF-1, nRow ) LineTo( _oWnd:hDC, nColF, nRowF ) LineTo( _oWnd:hDC, nCol, nRowF ) LineTo( _oWnd:hDC, nCol, nRow ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) endif if !Empty( cLabel) nRow := y-oFont:nHeight/2 nCol := X+10 if lBorderLabel hPen := CreatePen( 0, 1, nClrBord ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol-1, nRow ) LineTo( _oWnd:hDC, nCol+nWidth, nRow ) LineTo( _oWnd:hDC, nCol+nWidth, nRow+oFont:nHeight+5 ) LineTo( _oWnd:hDC, nCol-1, nRow+oFont:nHeight+5 ) LineTo( _oWnd:hDC, nCol-1, nRow ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) endif nR := nRGBRed(nLabCrlPane) nG := nRGBGreen(nLabCrlPane) nB := nRGBBlue(nLabCrlPane) nInd := (255/(oFont:nHeight))/100 for i := 1 to oFont:nHeight/2 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol, nRow+i ) LineTo( _oWnd:hDC, nCol+nWidth, nRow+i ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR += (255-nR)*nInd nG += (255-nG)*nInd nB += (255-nB)*nInd next for i := oFont:nHeight/2-1 to oFont:nHeight+4 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( _oWnd:hDc, hPen ) MoveTo( _oWnd:hDC, nCol, nRow+i ) LineTo( _oWnd:hDC, nCol+nWidth, nRow+i ) SelectObject( _oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR -= (255-nR)*nInd nG -= (255-nG)*nInd nB -= (255-nB)*nInd next RText( _oWnd:hDC, cLabel, y-oFont:nHeight/2+2, X+20, nClrText, oFont ) endif Return NIL //----------------------------------------------------------------------------// Function RText( hDc,cPrompt,Y,X,nClrText,oFont) Local hOldFont, nOldMode, nOldClrText 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 Return NIL ******************************************************************** id=code>id=code>
  20. citação:Será que dá para colocar em algum lugar o título da group?id=quote>id=quote>Taí Obs: - Fiz teste rápidos, então não sei se está "redondo". - Aproveitei e coloquei mais algumas opções: Veja: RGroup( nRow, nCol, nRowF, nColF, oWnd, nCorBorda, nCorFundo, lDegrade, nDegrade, cLabel, nClrText, oFont, lTransparent, lBorderLabel ) onde: nRow - Linha inicial nCol - Coluna inicial nRowF - linha final nColF - Coluna Final oWnd - Objeto da janela nCorBorda - Cor da borda nCorFundo - Cor de fundo (Opcional)- Default = Cor da Borda lDegrade - Se TRUE com degrade, se não UNIFORME (opcional) - Default = .F. nDegrade - Taxa do degrade (Opcional) = Defualt = 100% cLabel - Título (opcional) cClrText - Cor do texto (opcional) oFont - Fonte do texto (opcional) lTrasparent - Se TRUE = Transparente, se não = Fundo preenchido lBorderLabel - Se TRUE é colocadaborda em torno do label id=code>id=code>Segue código: ******************************************************************** #Include "Fivewin.ch" //------------------------------------------------------------------ Function Main() define Font oFont Name "Ms Sans Serif" Size 0, -12 define dialog oDlg title "Teste Frame" From 0,0 to 600, 900 pixel; COLOR 0, CLR_WHITE activate dialog oDlg Center ON Paint MeuGroup( oDlg ) Return NIL //------------------------------------------------------------------ Function MeuGroup( oDlg ) RGroup( 20, 50, 200, 250, oDlg, nRGB(210,210,210), , , ,"Transparent", CLR_BLACK, , .t., .t. ) RGroup( 20, 300, 200, 550, oDlg, CLR_HBLUE, CLR_HBLUE, .t., ,"Meu Título", oFont ) RGroup( 300, 50, 500, 250, oDlg, CLR_RED, nRGB(255,255,13) ) RGroup( 300, 300, 500, 550, oDlg, CLR_GREEN, ,.t., 300, "Título com borda", , , , .t. ) RGroup( 20, 600, 200, 850, oDlg, CLR_HBLUE, CLR_HBLUE, .t., 10 ) RGroup( 300, 600, 500, 850, oDlg, CLR_GREEN, ,.t., 30 ) Return NIL //------------------------------------------------------------------ Function RGroup( nRow, nCol, nRowF, nColF, oWnd, nCor, nCorFundo, lDeg, nDeg, cLabel, nClrText, oFont, lTransparent, lBorderLabel ) local hPen, i, nR, nG, nB, nInd, nWidth := 0, x := nCol, y := nRow, nLabCrlPane, nClrBord := nCor Default lDeg := .f. Default nCorFundo := nCor Default nDeg := 100 Default lTransparent := .f. Default oFont := oWnd:oFont Default nClrText := nCor Default lBorderLabel := .f. if !Empty(cLabel) nWidth := (Len( cLabel )*oFont:nHeight*0.5)+10 endif oWnd:GetDC() hPen := CreatePen( 0, 1, nCor ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol, nRow ) LineTo( oWnd:hDC, nColF, nRow ) LineTo( oWnd:hDC, nColF, nRowF ) LineTo( oWnd:hDC, nCol, nRowF ) LineTo( oWnd:hDC, nCol, nRow ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR := nRGBRed(nCor) nG := nRGBGreen(nCor) nB := nRGBBlue(nCor) nR += (255-nR)*0.8 nG += (255-nG)*0.8 nB += (255-nB)*0.8 if nR > 255 nR := 255 endif if nG > 255 nG := 255 endif if nB > 255 nB := 255 endif nCor := nRGB( nR, nG, nB) nLabCrlPane := nCor for i := 1 to 4 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol+i, nRow+i ) LineTo( oWnd:hDC, nColF-i, nRow+i ) LineTo( oWnd:hDC, nColF-i, nRowF-i ) LineTo( oWnd:hDC, nCol+i, nRowF-i ) LineTo( oWnd:hDC, nCol+i, nRow+i ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR := nRGBRed(nCor) nG := nRGBGreen(nCor) nB := nRGBBlue(nCor) nR -= (255-nR)*(0.9*i) nG -= (255-nG)*(0.9*i) nB -= (255-nB)*(0.9*i) if nR < 0 nR := 0 endif if nG < 0 nG := 0 endif if nB < 0 nB := 0 endif next if !ltransparent nInd := (255/(nRowf-nRow))/nDeg nR := nRGBRed(nCorFundo) nG := nRGBGreen(nCorFundo) nB := nRGBBlue(nCorFundo) nCol+=5 nRow+=5 nColf-=5 nRowf-=5 do while .t. hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol, nRow ) LineTo( oWnd:hDC, nColF, nRow ) LineTo( oWnd:hDC, nColF, nRowF ) LineTo( oWnd:hDC, nCol, nRowF ) LineTo( oWnd:hDC, nCol, nRow ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) if nCol = nColF .and. nRow = nRowF Exit endif if lDeg nR += (255-nR)*nInd nG += (255-nG)*nInd nB += (255-nB)*nInd if nR > 255 nR := 255 endif if nG > 255 nG := 255 endif if nB > 255 nB := 255 endif endif nRow++ if nRow > nRowF nRow := nRowF endif nCol++ if nCol > nColF nCol := nColF endif nRowF-- if nRowF < nRow nRowF := nRow endif nColF-- if nColF < nCol nColF := nCol endif enddo hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol, nRow ) LineTo( oWnd:hDC, nColF-1, nRow ) LineTo( oWnd:hDC, nColF, nRowF ) LineTo( oWnd:hDC, nCol, nRowF ) LineTo( oWnd:hDC, nCol, nRow ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) endif if !Empty( cLabel) nRow := y-oFont:nHeight/2 nCol := X+10 if lBorderLabel hPen := CreatePen( 0, 1, nClrBord ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol-1, nRow ) LineTo( oWnd:hDC, nCol+nWidth, nRow ) LineTo( oWnd:hDC, nCol+nWidth, nRow+oFont:nHeight+5 ) LineTo( oWnd:hDC, nCol-1, nRow+oFont:nHeight+5 ) LineTo( oWnd:hDC, nCol-1, nRow ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) endif nR := nRGBRed(nLabCrlPane) nG := nRGBGreen(nLabCrlPane) nB := nRGBBlue(nLabCrlPane) nInd := (255/(oFont:nHeight))/100 for i := 1 to oFont:nHeight/2 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol, nRow+i ) LineTo( oWnd:hDC, nCol+nWidth, nRow+i ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR += (255-nR)*nInd nG += (255-nG)*nInd nB += (255-nB)*nInd next for i := oFont:nHeight/2-1 to oFont:nHeight+4 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oWnd:hDc, hPen ) MoveTo( oWnd:hDC, nCol, nRow+i ) LineTo( oWnd:hDC, nCol+nWidth, nRow+i ) SelectObject( oWnd:hDc, hOldPen ) DeleteObject( hPen ) nR -= (255-nR)*nInd nG -= (255-nG)*nInd nB -= (255-nB)*nInd next RText( oWnd:hDC, cLabel, y-oFont:nHeight/2+2, X+20, nClrText, oFont ) endif Return NIL //----------------------------------------------------------------------------// Function RText( hDc,cPrompt,Y,X,nClrText,oFont) Local hOldFont, nOldMode, nOldClrText 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 Return NIL ******************************************************************** id=code>id=code>
  21. Robério, Me diga de onde é? Já morou ou mora no estado de Goiás?
  22. citação:Para melhorar, tambem poder definir a cor do centro do group.id=quote>id=quote>Que tal então: - Poder escolher qual cor eu quero no fundo - Com ou sem degrade - Definir a taxa de degrade Entenda a chamada da função: onde: nRow - Linha inicial nCol - Coluna inicial nRowF - linha final nColF - Coluna Final oWnd - Objeto da janela nCorBorda - Cor da borda nCorFundo - Cor de fundo (Opcional)- Default = Cor da Borda lDegrade - Se TRUE com degrade, se não UNIFORME (opcional) - Default = .F. nDegrade - Taxa do degrade (Opcional) = Defualt = 100% id=code>id=code> Aí segue o código com as implementações: ******************************************************************** #Include "Fivewin.ch" //------------------------------------------------------------------ Function Main() define Font oFont Name "Ms Sans Serif" Size 7, 14 define dialog oDlg title "Teste Frame" From 0,0 to 600, 900 pixel; COLOR 0, CLR_WHITE activate dialog oDlg Center ON Paint MeuGroup( oDlg ) Return NIL //------------------------------------------------------------------ Function MeuGroup( oDlg ) RGroup( 20, 50, 200, 250, oDlg, nRGB(210,210,210) ) RGroup( 20, 300, 200, 550, oDlg, CLR_HBLUE, CLR_HBLUE, .t. ) RGroup( 300, 50, 500, 250, oDlg, CLR_RED, nRGB(255,255,13) ) RGroup( 300, 300, 500, 550, oDlg, CLR_GREEN, ,.t. ) RGroup( 20, 600, 200, 850, oDlg, CLR_HBLUE, CLR_HBLUE, .t., 10 ) RGroup( 300, 600, 500, 850, oDlg, CLR_GREEN, ,.t., 30 ) Return NIL //------------------------------------------------------------------ Function RGroup( nRow, nCol, nRowF, nColF, oDlg, nCor, nCorFundo, lDeg, nDeg ) local hPen, i, nR, nG, nB, nInd Default lDeg := .f. Default nCorFundo := nCor Default nDeg := 100 oDlg:GetDC() hPen := CreatePen( 0, 1, nCor ) hOldPen := SelectObject( oDlg:hDc, hPen ) MoveTo( oDlg:hDC, nCol, nRow ) LineTo( oDlg:hDC, nColF, nRow ) LineTo( oDlg:hDC, nColF, nRowF ) LineTo( oDlg:hDC, nCol, nRowF ) LineTo( oDlg:hDC, nCol, nRow ) SelectObject( oDlg:hDc, hOldPen ) DeleteObject( hPen ) nR := nRGBRed(nCor) nG := nRGBGreen(nCor) nB := nRGBBlue(nCor) nR += (255-nR)*0.8 nG += (255-nG)*0.8 nB += (255-nB)*0.8 if nR > 255 nR := 255 endif if nG > 255 nG := 255 endif if nB > 255 nB := 255 endif nCor := nRGB( nR, nG, nB) for i := 1 to 4 hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oDlg:hDc, hPen ) MoveTo( oDlg:hDC, nCol+i, nRow+i ) LineTo( oDlg:hDC, nColF-i, nRow+i ) LineTo( oDlg:hDC, nColF-i, nRowF-i ) LineTo( oDlg:hDC, nCol+i, nRowF-i ) LineTo( oDlg:hDC, nCol+i, nRow+i ) SelectObject( oDlg:hDc, hOldPen ) DeleteObject( hPen ) nR := nRGBRed(nCor) nG := nRGBGreen(nCor) nB := nRGBBlue(nCor) nR -= (255-nR)*(0.9*i) nG -= (255-nG)*(0.9*i) nB -= (255-nB)*(0.9*i) if nR < 0 nR := 0 endif if nG < 0 nG := 0 endif if nB < 0 nB := 0 endif next nInd := (255/(nRowf-nRow))/nDeg nR := nRGBRed(nCorFundo) nG := nRGBGreen(nCorFundo) nB := nRGBBlue(nCorFundo) nCol+=5 nRow+=5 nColf-=5 nRowf-=5 do while .t. hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oDlg:hDc, hPen ) MoveTo( oDlg:hDC, nCol, nRow ) LineTo( oDlg:hDC, nColF, nRow ) LineTo( oDlg:hDC, nColF, nRowF ) LineTo( oDlg:hDC, nCol, nRowF ) LineTo( oDlg:hDC, nCol, nRow ) SelectObject( oDlg:hDc, hOldPen ) DeleteObject( hPen ) if nCol = nColF .and. nRow = nRowF Exit endif if lDeg nR += (255-nR)*nInd nG += (255-nG)*nInd nB += (255-nB)*nInd if nR > 255 nR := 255 endif if nG > 255 nG := 255 endif if nB > 255 nB := 255 endif endif nRow++ if nRow > nRowF nRow := nRowF endif nCol++ if nCol > nColF nCol := nColF endif nRowF-- if nRowF < nRow nRowF := nRow endif nColF-- if nColF < nCol nColF := nCol endif enddo hPen := CreatePen( 0, 1, nRGB( nR, nG, nB ) ) hOldPen := SelectObject( oDlg:hDc, hPen ) MoveTo( oDlg:hDC, nCol, nRow ) LineTo( oDlg:hDC, nColF-1, nRow ) LineTo( oDlg:hDC, nColF, nRowF ) LineTo( oDlg:hDC, nCol, nRowF ) LineTo( oDlg:hDC, nCol, nRow ) SelectObject( oDlg:hDc, hOldPen ) DeleteObject( hPen ) Return NIL ******************************************************************** id=code>id=code>
  23. Luiz, Group em alto relevo, veja minha resposta aqui: http://www.fivewin.com.br/forum/topic.asp?TOPIC_ID=19276&whichpage=2&ARCHIVE= Editado por - ricardomouramarques on 09/05/2011 21:33:20
×
×
  • Create New...