Jump to content
Fivewin Brasil

vagner

Membros
  • Posts

    4,981
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by vagner

  1. Olá Marllon,

    Se está usando o TPrint é assim :

    Esse direciona para a impressora, mesmo que não seja a padrão

    Print oPrn Doc "Emissão de Tabelas" To "HP DeskJet"

    Ou então :

    Print oPrn Doc "Emissão de Tabelas"

    Manda direto para a impressora padrão do windows.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  2. Olá Marllon,

    No TSBrowse :

    Onde aFil_Cid é um array com os fields do arquivo, tipo codigo, nome__ etc..

    aCab_cid é um array com os cabeçalhos,e acol_cid um array com o tamanho das colunas.

    For nX := 1 To Len(aFil_Cid)

    cFiel := "{||"+aFil_Cid[nX]+"}"

    ADD Column To oLbxCid Data &cFiel Header aCab_Cid[nX] Size aCol_Cid[nX]

    Next

    Funciona muito bem.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  3. Olá Gilmer,

    Tenho algumas classes montadas, como o VFolder, o VMeter e estou acabando o VBox, como posso mandar para que você coloque a disposição de todos ?

    Abraços

    Vagner Wirts

    São Paulo-Brasil

    Obs.: deveriamos pode colocar imagens de telas, fica mais fácil para que consigamos ver erros e outras coisas (só uma observação) icon_smile_big.gif

  4. Olá Marllon,

    Não é direto da função TSBrowse, mas vc pode fazer o seguinte :

    DbSelectArea("Cidades_")

    aCab_Cid := {"Código","Nome","Uf","Região","Nome"} //Cabecalho do Browse

    aFil_Cid := { "Cidades_->Codigo","Cidades_->Nome__","Cidades_->Estado","Cidades_->Regiao","Cidades_->NomReg" } //Variaveis do Browse

    aCol_Cid := {51,287,30,42,63} //Tamanho das Colunas - Sempre o Tamanho da Variavel * 8

    aSel_Cid := {{1,"Cida_Cod"},{2,"Cida_Nom"}} //Ordens de Indexados

    nSel_Cid := 1

    oLbxCid := TSBrowse():New(01,01,288,120,,,,oFld:aDialogs[1],,,,,{|nRow,nCol,nFlag|InclAlte(Iif(lAltInc,"Alt","Con"))},,,,,,,"Cidades_",.T.)

    oLbxCid:lMChange := .F.

    nTam := 0

    For nX := 1 To Len(aCol_Cid)

    nTam += aCol_Cid[nX]

    Next

    If nTam < 560

    aCol_Cid[Len(aCol_Cid)] += (560-nTam)

    Else

    nTam -= aCol_Cid[Len(aCol_Cid)]

    aCol_Cid[Len(aCol_Cid)] := (560-nTam)

    Endif

    For nX := 1 To Len(aFil_Cid)

    cFiel := "{||"+aFil_Cid[nX]+"}"

    ADD Column To oLbxCid Data &cFiel Header aCab_Cid[nX] Size aCol_Cid[nX]

    Next

  5. Olá Marllon,

    Verifique o tamano da var que está imprimindo, isso ocorre qdo vc manda imprimir em uma coluna cuja já esteja ocupada ex.:

    cNome := Space(40)

    oPrn:Say(nLi,01,cNome...)

    oPrn:Say(nLi,40,"Teste"...)

    Nesse caso o nome começa na 1 e vai até a 41, aí dá estouro de linha.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  6. Olá Jorge,

    Não sei se é o seu caso, você não poderia ao invés de inibir simplesmente não apresentar ?, se puder pode ser posto if antes dos menus, aí tipo o usuário não pode ter acesso a determinado ítem, não apresentaria ex.:

    MenuItem "Cadastro"....

    If lPode

    MenuItem "Alterar Cadastro"....

    Endif

    MenuItem "Imprimir"

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  7. Marllon,

    É isso mesmo quando se coloca a Clausula MDI, a window se comporta diferente, então terá que fazer o seguinte :

    criar uma dialog não modal, para que se possa colocar o JPG de fundo, passo-lhe a função que montei para uma janela filha, funciona também na janela pai.

    oSayFer := cSayFer := "Ferramentas"

    Define Font oFonCab Name "CommScriptTT" Size 20 ,40

    Define BitMap oBmpRef Name "Fundo"

    Define Window oWndChil4 From 0,2 To (oWnd:nBottom-67)-(oWnd:oMsgBar:nHeight+20), oWnd:nRight-100 Of oWnd Pixel MDICHILD Style (DS_MODALFRAME) //Font oFontDl

    nTam := (oWnd:nRight-102)/2

    oWndChil4:bGotFocus = { || oDlg4:SetFocus() }

    DEFINE DIALOG oDlg4 FROM 0,6 To oWndChil4:nBottom, oWndChil4:nRight Pixel STYLE WS_CHILD OF oWndChil4

    oDlg4:bPainted = { | hDC | PalBmpDraw( hDC, 32, 0, oBmpRef:hBmpPal,oWndChil4:nRight,oWndChil4:nBottom-(oWnd:oMsgBar:nHeight)-10) }

    @ 00,16 Say oSayFer Var cSayFer Of oDlg4 Size nTam-16,16 Pixel Font oFonCab Center Color nRgb(0,100,0)

    @ 00,00 BitMap oBmpFer File "Ferramen.Bmp" Size 16,16 NoBorder Pixel

    oBmpFer:lTransparent := .T.

    ACTIVATE DIALOG oDlg4 NOWAIT ; // It has to be NonModal --> NOWAIT clause

    ON INIT oDlg4:Move( 0, 0 )

    Activate Window oWndChil4 Normal

    Nesse exemplo eu montei com um BMP, você terá que alterar para o TImagem().

    Abraços

    Vagner Wirts

    São Paulo_Brasil

  8. Marllon,

    Faça um teste retirando a Clausula MDI, eu não trabalho muito com mdi, mas acho que nesse caso não funciona. Aí teria que ser de uma outra forma, vou dar uma olhada em um programa meu antigo acho que fiz algo assim, depois lhe retorno.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  9. Carlos,

    se quiser, pode mandar os programas para mim, tentarei compila-lo e ver onde pode estar o problema.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

    Ps.: como disse o Gilmer, pode ficar tranquilo a respeito dos seus fontes, estou aqui somente para tentar ajudar e ser ajudado é lógico, não tenho interresse nenhum em pegar fontes de outro.icon_smile.gif

  10. Olá Carlos,

    o Library, que está no meu lnk, é uma lib minha, você pode retira-la, não terá função para você, agora a respeito do erro, pode ser que esteja fazendo muito acesso a alguma dialog, o programa chega a abrir ou dá erro na linkedição ?

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  11. Olá Marllon,

    O que lhe passei é exatamente para a Window, é a que uso no meus sistemas, pelo que pude ver, você está mandando carregar a foto após o activate window, têm que ser antes ou mandar carregar quando der um paint, ex.:

    Activate Window oWnd on Paint (CarregaImagem())

    Func CarregaImage()

    oBkgImage:Progress(.F.)

    oBkgImage:LoadBmp('ORION.JPG')

    Retu("")

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  12. Olá Jorge,

    Qdo, você cria um sub-menu, o ítem do menu principal é só direcionador, então terá que desabilitar os ítens do sub-menu, usando When em cada sub-ítem, funciona legal.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  13. Olá Carlos,

    Vi no seu lnk, que está usando o BeginArea e o EndArea, por que está construindo overlay interno ?, não há a necessidade, estou postando um lnk que utilizo aqui na empresa são 55 prg + a minha lib dá em torno de uns 80 prgs

    Fi Transpor

    Fi Cria_Arq

    Fi Reorgani

    Fi TFtp

    Fi TSockets

    Fi DialTone

    // Cadastramentos

    Fi Cadastro\Cad1_010

    Fi Cadastro\Cad1_020

    Fi Cadastro\Cad1_030

    Fi Cadastro\Cad1_040

    Fi Cadastro\Cad1_050

    Fi Cadastro\Cad1_060

    Fi Cadastro\Cad1_070

    Fi Cadastro\Cad1_080

    Fi Cadastro\Cad1_090

    Fi Cadastro\Cad1_100

    // Movimentacoes

    Fi Moviment\Mov2_010

    Fi Moviment\Mov2_011

    Fi Moviment\Mov2_020

    Fi Moviment\Mov2_030

    Fi Moviment\Mov2_040

    Fi Moviment\Mov2_050

    Fi Moviment\Mov2_060

    Fi Moviment\Mov2_061

    Fi Moviment\Mov2_070

    Fi Moviment\Mov2_080

    Fi Moviment\Mov2_081

    // Relatorios

    Fi Relatori\Rel3_010

    Fi Relatori\Rel3_020

    Fi Relatori\Rel3_030

    Fi Relatori\Rel3_040

    Fi Relatori\Rel3_050

    Fi Relatori\Rel3_051

    Fi Relatori\Rel3_060

    Fi Relatori\Rel3_070

    Fi Relatori\Rel3_080

    Fi Relatori\Rel3_090

    Fi Relatori\Rel3_100

    // Programas Auxiliares

    Fi Programa\Prg4_021

    Fi Programa\Prg4_030

    Fi Programa\Prg4_031

    Fi Programa\Prg4_032

    Fi Programa\Prg4_041

    Fi Programa\Prg4_051

    Blinker Incremental Off

    Blinker Executable Compres

    PackCode

    PackData

    // If you use Mr. Debug for Windows product

    // search c:\mrdebug\lib\mrd4win.lib

    //Stacksize 29500

    DefBegin

    name Transporte

    description "Sistema de Transporte - Trans-Well's Expresso Rodoviario Ltda."

    exetype Windows 3.1

    code moveable discardable preload

    data preload moveable

    stacksize 22000 //20500

    heapsize 3000 //2048

    segment 'PLANKTON_TEXT' nondiscardable

    segment 'EXTEND_TEXT' nondiscardable

    segment 'OM_TEXT' nondiscardable

    segment 'OSMEM_TEXT' nondiscardable

    segment 'SORTOF_TEXT' nondiscardable

    segment 'STACK_TEXT' nondiscardable

    DefEnd

    Blinker Clipper Symbol Off

    NoBell

    Lib \Fw20\Lib\Five, \Fw20\Lib\FiveC, \Fw20\Lib\Objects

    Lib \Fw20\Lib\WinApi, Clipper, Extend, DbfNtx, Terminal,DbfCdx,_DbfCdx

    Lib \Fw20\Lib\Dbuttons

    Lib \Wells\LibFiveW\Library

    Ou Transpor

    Só uma Obs. separe os prgs em diretórios, fica mais fácil de encontrar.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  14. Aí Marllon,

    Carregar uma imagem JPG. terá que usar o TImagem, terá que usar o NViewlib.dll

    *---- Define Fundo de Tela ----*

    hLib := LoadLib32("\Tr_Wells\NViewLib.Dll")

    @ 03.1,00 Image oImag Size oWnd:nHorzRes(),oWnd:nVertRes()-104 Of oWnd Adjust

    oImag:Progress(.F.) // Nao mostra um meter de carregamento da imagem.

    oImag:LoadBmp(cNova+".Jpg")

    FreeLib32(hLib)

    Quanto ao Harbour, pelo que "Ouvi", não há limite para array, mas no FW existe uma classe criada, que transformar arrays para mais de 4069 ítens.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

    PS.: Não me lembro quem criou o TArray, mas poderá baixa-lo do site do Daniel Andrade www.dbwide.com.ar

  15. Olá Carlos,

    Bom vamos lá, eu não conheço o MIRO, gosto mesmo de montar eu mesmo meus programas, sei que leva tempo, mas sai do jeito que eu quero, bom a respeito das variáveis, não utilize PRIVATE, prefira usar LOCAL, ocupa menos memória e não fica reservada, já as Static são variáveis que são ocupadas no sistema e não são perdidas, ou seja, digamos que vc tenha um programa de calculadora, onde chama de um determinado local, colocando o valor em uma var statica, vc pode fechar a calculadora e na próxima chamada a calculadora o valor ainda estará lá, é útil para que não perca o que estava fazendo, mas.... a memória vai para o espaço. Então aconselho vc mudar seus private para Local, e raramente usar Public e Static, muitas vars Public no sistema também usa muita memória, onde dá pau para todo lado.

    Abraços

    Vagner Wirts

    São Paulo-Brasil

  16. Ps.: Verifiquei, que vc têm muitos programas e geralmente colocamos muitas funções dentro dos programas, funções estas que podem ser usadas por outros programas no mesmo sistema, então é muito mais fácil criar uma lib dessas funções e linka-la junto com o sistema, se esse for o seu caso, aconselho que faça isso, é muito mais comodo e nos diminui muito o tamanho do Exe.icon_smile_cool.gif

  17. Olá Carlos,

    Tomei a liberdade de pegar isso no fórum em espanhol, se não conseguir traduzir, me avise que farei o possivel para lhe ajudar.

    Con el permiso de Hernán, ya que a mi me fue muy útil.

    ****************************************************************************

    **********

    Tip sobre VARIABLES

    por Hernán Diego Ceccarelli

    Dejo un truco que quizá muchos de ustedes conozcan pero otros quizás no. Se

    trata de la optimización del sistema. Esto debido a que un amigo de Brasil me preguntaba sobre por que de sus GPF en una gran aplicación ???... y estaba desesperado........y bueno pensé que alguno de ustedes tendría este problema quizá.... El problema estaba en las STATIC. El amigo utilizaba muchas variables STATIC por PRG, cosa que FW soporta en menor cantidad respecto al MSDOS. Igualmente JAMÃS seria necesario escribir mas de 1 variable por modulo PRG, veamos el ejemplo:

    No es conveniente hacer esto !!!!!!!!

    STATIC aVar

    STATIC bVar

    STATIC cVar

    STATIC dVar

    Se debe hacer esto !!!!!!!

    STATIC aArrayVars:= {Nil,Nil,Nil,Nil}

    #xtranslate aVar => aArrayVars\[1\]

    #xtranslate bVar => aArrayVars\[2\]

    #xtranslate cVar => aArrayVars\[3\]

    #xtranslate dVar => aArrayVars\[4\]

    En realidad con esto definimos 1 variable STATIC y consumimos menos los recursos del sistema, y esta solución EVITA modificar el código del PRG,excepto la definición inicial, y lo mas importante EVITA GPF !!! Algunos dirán que es lo mismo poner #define, PERO NO ES LO MISMO !!!!!!!!, dado que estos defines no se resuelven cuando se incorporan en COMANDOS, cosa que si resuelve #xtranslate. :-)

    Ahora respecto a las PUBLIC. También es conveniente usar 1 (UNA) variable en todo el sistema.......Siiiiiiiiiiii seamos bien amarretes y avaros para el uso de estas también, y evitaremos dolores de cabeza y conflictos !!!!!

    Supongamos que tenemos las siguientes variables:

    PUBLIC cSistema:= "Sistema Pepe"

    PUBLIC cPath:= "\Datos"

    PUBLIC cCopyright:= "Topo Gigio Sistemas"

    ....... NO NO Y NO !!!!! NO DEBEMOS HACER ESTO !!!!!

    Deberiamos hacer esto otro:

    Function Main()

    PUBLIC oApp:= TApplication()

    .......

    return nil

    CLASS TApplication

    DATA cSistema INIT "Sistema Pepe"

    DATA cPath INIT "\Datos"

    DATA cCopyright INIT "Topo Gigio Sistemas"

    ........... y asi todas las que quisieramos !!!!! :-)

    ENDCLASS

    ........... y como es un objeto publico podremos modificar sus variables de

    instancia cuando se nos de la regalada gana !!!!! y tenemos 1 sola public, o

    sea oApp en forma de objeto y accederíamos así

    Alert( oApp:cCopyright ) !!!!!!!!!! es bien fácil !!!!!!!!!!!!!!!!!

    Llega el turno de las PRIVATE, es conveniente NO USARLAS usemos siempre las

    LOCAL y paseémoslas por referencia. También podríamos usar una LOCAL objeto

    TARRAY y esta nos sirve para pasar argumentos cientos de variables en 1

    sola. OLVIDÉMONOS que existen las PRIVATE !!!!!

    CONCLUSIÓN: Si optimizamos el código de una aplicación lograremos:

    1.. Mayor rapidez

    2.. Mayores disponibilidad de recursos

    3.. Menores errores GPF (serán casi imposibles de visualizar)

    4.. Un código mas legible

    Salu2 y espero que les sirva de algo !!!

    ,Bom como lí em alguma postagem sua, anterior, infelizmente o FW por funcionar no Windows, temos que fazer algumas mudanças nos nossos programas, as vezes nem são muitas mas as vezes....

    Abraços

    Vagner Wirts

    São Paulo-Brasilicon_smile.gif

×
×
  • Create New...