----O controle de grade é um dos controles mais comuns no Visual Basic, que está disponível de VB3.0 a VB5.0. É também uma das ferramentas favoritas dos entusiastas do VB. Ele pode ser usado para exibir e navegar por dados na forma de tabelas, especialmente para aplicativos de banco de dados. A ligação direta pode exibir e navegar por informações do banco de dados. No entanto, o problema é que o Grid não possui funções de edição e impressão, e as posições das colunas não podem ser trocadas entre si. O autor tentou adicionar essas funções ao Grid para torná-lo ainda melhor e mais poderoso. O método de melhoria e o programa fonte são fornecidos abaixo. Os leitores só precisam escrever o programa fonte de acordo com as etapas para que seu Grid tenha função de impressão. O autor depurou este programa usando VB5.0 no ambiente HP5/100Window95 e o aprovou.
----Existem três maneiras de adicionar impressão ao controle Grid: 1. Imprimir o controle diretamente, 2. realizar a função de impressão através do PRinter e 3. realizar a impressão chamando MS-Word e MS-Excel.
----Primeiro, abra um aplicativo, adicione o controle DATA DATA1 no FORM1, defina o atributo CONNECT de DATA1 como dBASEIII e, em seguida, defina o atributo DATABASENAME como D:/PJXM.DBF. Em seguida, adicione o espaço MSFLEXGRID GRID1 no FORM1 e defina o atributo DATASOURCE de GRID1 como DATA1. Desta forma, as informações do banco de dados PJXM.DBF serão exibidas no GRID1.
----Método 1: Imprima diretamente o método do formulário, adicione um botão de comando (comando) no FORM1, defina o atributo CAPTION para impressão direta e, em seguida, escreva o seguinte código:
Subcomando_clique
Formulário1.printform
Fimsub
----Desta forma, os dados do GRID1 podem ser impressos imprimindo o formulário FORM1. Infelizmente, apenas a parte dos dados exibida no GRID1 pode ser impressa. é muito parecido com uma tela. A cópia impressa também imprime outros controles. Ele também não pode controlar fontes de maneira flexível, etc.
----Método 2: Imprimir através da IMPRESSORA. este método
---- 1. Adicione o botão de comando de impressão (command1) e a função (prnt1) para realizar a função de impressão. O leitor pode gravá-lo em uma função ou processo padrão com pequenas alterações.
Funçãoprnt1(xAsInteger,yAsInteger,
fonteAsSingle,txtAsString)
impressora.CurrentX=x
impressora.CurrentY=y
impressora.FontBold=Falso
impressora.FontSize = fonte
impressora.Printtxt
Função Final
Subcomando1_clique
DimfntAsSingle
Dimppasinteiro
Pp=0'Defina o número da página inicial 0
Dimstry,strx,strx1,stry1,linw,página1,pAsInteger
Statica(8)AsInteger' define o número de colunas a serem impressas
ss$="Extrato de Depósito de Liquidação Interna"'define o cabeçalho
kan = 0
Fori=0To8
a(i)=1500' define a largura de cada coluna
kan=kan a(i)'calcula a largura total da tabela
Próximo
page1=50' define o número de linhas por página
strx = 200
strx1=200' define a posição inicial na direção X
tentativa=1400
stry1=1400' define a posição inicial na direção Y
linw=240' define a largura da linha
fnt=8'define o tamanho da fonte
impressora.fontname="宋体"'definir fonte
dd=prnt1(4000,700,18,ss$)'Imprimir título
impressora.Linha(strx-50,stry-30)
-(strxkan-10,stry-30)
Forj=0Togridrow-1'gridrow é o número de linhas a serem impressas
grade1.row=j
strx=strx1
impressora.Linha(strx-50,stry-30)
-(strxkan-10,stry-30)
p=p 1
Fori=0To8
grade1.col=i
dd=prnt1(strx,stry,fnt,grid1.text)
strx=strx a(i)
Próximo
Ifp>página1Then'nextpage
p = 0
strx=strx1
'linhaúltima linha
impressora.Line(strx-50,stry linw)
-(strx kan-10, tente linw)
tentativa = tentativa1
'linecol
Forn=0To8
impressora.Linha(strx-30,stry-30)
-(strx-30,stry (página 1 2)*linw)
strx=strx a(n)
Próximo
impressora.Linha(strx-30,stry-30)
-(strx-30,stry (página 1 2)*linw)
pp = pp 1
foot$="th" cstr(pp) "página"
dd=prnt1(strx-30-1000,stry (página 1 2)
*linw 100,10,foot$)'Imprimir número do canto da página
impressora.NewPage'nextpage
dd=prnt1(4000,700,18,ss$)'Imprimir título
strx=strx1
tentativa = tentativa1
impressora.Linha(strx-50,stry-30)-
(strx kan-10,stry-30)'imprimir primeira linha
Outro
stry=stry linw
FimSe
Próximo
st=tentativa
Ifp<page1Then' marca as linhas em branco restantes na última página
Fórum=pTopage1 1
strx=strx1
impressora.Linha(strx-50,stry-30)
-(strxkan-10,stry-30)
stry=stry linw
Próximo
FimSe
tentativa = tentativa1
strx=strx1
stry=stry1'linecol
Forn=0To8
impressora.Linha(strx-30,stry-30)-
(strx-30,stry (página 1 2)*linw)
strx=strx a(n)
Próximo
impressora.Linha(strx-30,stry-30)-
(strx-30,stry (página 1 2)*linw)
pp = pp 1
foot$="th" cstr(pp) "página"
dd=prnt1(strx-30-1000,stry (página 1 2)
*linw 100,10,foot$)'Imprimir número do canto da página
impressora.EndDoc'Fim da impressão
Fimsub
----Este método pode ajustar facilmente fontes, estilos de fonte, formatos de linha, páginas, tamanhos de papel, etc. Pode imprimir resultados satisfatórios. Se MICROSOFTWORD e MICROEXCEL estiverem instalados em seu computador, a maneira mais interessante de usá-los é enviar a tabela GRID para MICROSOFTWORD e MICROEXCEL através de VB. Gere tabelas MICROSOFTWORD e MICROEXCEL. Desta forma, você pode aproveitar ao máximo as funções de impressão e edição do MICROSOFTWORD e MICROEXCEL para imprimir resultados mais ideais. Apresentado um por um abaixo.
----Método 3: Imprimir gerando o formulário MICROSOFTWORD
----1. Escreva na declaração:
DimmswordAsObject
----2. Adicione o botão de comando de impressão (command2) e defina CAPTION como "Gerar tabela WORD"
"Formatar", escreva o seguinte código,
PrivateSubcommand2_Click()
tela.MousePointer=11
Setmsword=CreateObject("palavra.basic")
DimAppID,ReturnValue
appID=Shell("d:/office97/office/WINWORD.EXE",1)
'ExecuteMicrosoftWord.
msword.AppActivate"MicrosoftWord"
'msword.AppActivate"MicrosoftWord",1
completo
Tela.MousePointer=0
Fim Sub
----2. Escreva o seguinte processo completo().
Subcompleto()
DimiAsInteger,jAsInteger,
colAsInteger,linhaAsInteger
DimcellcontentAsString
Eu.Ocultar
cols=4'O número de colunas na tabela
row=gridrow' imprime o número de linhas da tabela
msword.filenewdefault
msword.MsgBox"Criando relatório MS_WORD,
Aguarde...","",-1
msword.leftpara
msword.screenupdating0
msword.tableinserttable,col,linha,,,16,167
msword.startofdocument
forj=0togridrow'O número de linhas na tabela
grade1.row=j
Fori=1Tocols
Gri1d.col=i
IfIsNull(grid1.text)Então
conteúdo da célula$=""
Outro
cellcontent$=grid1.text
FimSe
msword.Insertcellcontent$
msword.nextcell
Próximo
Próximoj
msword.tabledeleterow
msword.startofdocument
msword.tableselectrow
msword.tableheadings1
msword.centerpara
'msword.startdocumento
msword.screenrefresh
msword.screenupdating1
msword.MsgBox"Fim","",-1
Eu.Mostrar
Fim Sub
----Método 4: Imprima o formulário enviando para MICROSOFTEXCEL
----1. Adicione o botão de comando de impressão (command3) e defina CAPTION como "Gerar tabela EXCEL"
"Formatar", escreva o seguinte código
PrivateSubcommand3_Click()
DimiAsInteger
DimjAsInteger
DimxlAppAsExcel.application
DimxlBookAsExcel.Workbook
DimxlSheetAsExcel.Worksheet
SetxlApp=CreateObject("Excel.Application")
xlApp.Visible = Verdadeiro
'SetxlBook = xlApp.Workbooks.Add
'OnErrorResumePróximo
SetxlBook=xlApp.Workbooks.Add'Open("d:/text2.xls")
SetxlSheet=xlBook.Worksheets(1)
xlSheet.Cells(6,1)="i"
Fori=0Togridrow
grade1.Row=i
Forj=0To6
Grade1.Col=j
IfIsNull(Grid1.Text)=FalseThen
xlSheet.Cells(i 5,j 1)=Grid1.Text
FimSe
Próximoj
Próximo
SairSub->