LCRamos
|
GOIANIA GO - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 14/09/2012 01:30 hs
Olha, não teve jeito, quando você carrega um MSHFlex direto do recordset, ele tem um comportamente muito estranho, as vezes ao clicar seleciona toda a grade, outras vezes trava a grade, voce não consegue nem o foco na grade. Então, estou carregando e outra forma paginando o recordset, e preenchendo as TextMatrix pela tabela, até ai tudo agora funciona bem, mas tem mais um detalhe. Desta forma o FormatString da Grade não funciona, então tem que preencher o cabeçário também. E agora o problema, como o FormatString naõ funciona, não estou conseguindo alinhar as colunas da forma que preciso, só ficam alinhadas a esquerda. Já Tentei .ColAlignment = flexAlignRightCenter .ColAlignment = 1 .CellAlignment = flexAlignRightCenter Nada funciona. Consegui alinhar mais ou menos, mais para a direita um pouco assim: Format$(Format$(.TextMatrix(liJ, Col), "###,###,##0.00"), "@@@@@@@@@@@@@@") Mas ficam desalinhadas dependendo do tamanho do campo. Sabem de alguma informação???
vlu//
|
|
|
|
Treze
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 14/09/2012 10:20 hs
Ramos veja bem o flexgrid é algo mais simples do que imaginamos, eu por exemplo tenho um flexgrid em um programa de folha de ponto onde insiro as horas direto no grid, e a formatação das horas é automática, com calculo de hora extra inclusive, vou explicar a forma básica de se utilizar o flexgrrid sem ter problemas.
primeira coisa a fazer é preencher o flexgrid, eu costumo criar uma função para o cabeçalho, e chamo esta função sempre que desejo apagar o flex e preencher com novos dados, então vamos lá
veja:
Sub CabecalhoGrid() With MSFlexGrid1 .Rows = 1 .Cols = 4 .FixedCols = 0 .FormatString = "re|nome de Guerra|Nome|<Cargo função" .ColWidth(0) = 800 .ColWidth(1) = 2000 .ColWidth(2) = 4500 .ColWidth(3) = 3000 End With
acima a função que cria o cabeçalho do flexgrid, repare que determino que o grid terá 01 linha e 04 colunas, não deixo nenhuma colana fixa
depois uso o formatstring para preencher o titilo das colunas, veja que se eu usar <, > , ^ eu determino o alinhamento.
com ColWidth(numero da coluna) eu determino a largura de cada coluna.
Pronto a primeira formatação está feita.
depois vou preencher o grid então procedo da seguinte forma
' chamo o cabeçalho CabecalhoGrid ' e preencho Dim Linha As Integer sSQL= " SELECT * FROM tabela" Set RS = CONN.Execute(sSQL) Do While Not RS.EOF With MSFlexgrid1 .Rows = .Rows + 1 ' o cabeçalho vai ter apenas uma linha então a cada loop insiro mais uma Linha = .Rows - 1 ' aqui determino a posição em que foi criada a linha .TextMatrix(Linha, 0) = RS!re .TextMatrix(Linha, 1) = RS!guerra .TextMatrix(Linha, 2) = RS!Nome .TextMatrix(Linha, 3) = RS!Cargo RS.MoveNext End With Loop
durante o Preenchimento vc pode até formatar uma determinada linha, tipo
.TextMatrix(linha, 0) = Format(RS!telefone,"(@@) @@@@-@@@@")
e assim vai
apos isso vc pode usar as funções click, entercel, etc sem problema pois a primeira parte ja foi feita.
|
|
|
Tiranossauro
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 14/09/2012 16:20 hs
.ColAlignment(0) = 1 ' Alinha à esquerda .ColAlignment(0) = 4 ' Alinha à Centralizado .ColAlignment(0) = 7 ' Alinha à Direita
substitua o zero pelo número da coluna
|
|
|
LCRamos
|
GOIANIA GO - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 14/09/2012 16:26 hs
treze olha ai: With msfCLIENTES .Redraw = False .Clear .Cols = 8 .SelectionMode = flexSelectionByRow .FillStyle = flexFillRepeat .Rows = 1 .Gridlines = chkGRADE.Value .BackColorSel = lfundoSELECT .ForeColorSel = lfrenteSELECT ' aqui antes eu colocava o FormatString ' com MSHFlex ele apaga o cabeçário quando recebe o foco ' então tive que fazer assim .ColWidth(0) = (700 * lwidTH) .TextMatrix(0, 0) = "CODIGO" .ColWidth(1) = (3500 * lwidTH) .TextMatrix(0, 1) = "NOME DO CLIENTE" .ColWidth(2) = (2550 * lwidTH) .TextMatrix(0, 2) = "FANTASIA/APELIDO" .ColWidth(3) = (1000 * lwidTH) .TextMatrix(0, 3) = "C.P.F./C.N.P.J." .ColWidth(4) = (950 * lwidTH) .TextMatrix(0, 4) = "TELEFONE1" .ColWidth(5) = (950 * lwidTH) .TextMatrix(0, 5) = "TELEFONE2" .ColWidth(6) = (950 * lwidTH) .TextMatrix(0, 6) = "CELULAR" .ColWidth(7) = (800 * lwidTH) .TextMatrix(0, 7) = "CÓD.CONV." If lREGISTROS > 0 Then iZEBRA = 0 rsCLIENTES.MoveMin txtCODCLI.Text = rsCLIENTES!codcli txtNOMECLI.Text = rsCLIENTES!nomecli For liJ = 1 To lREGISTROS .Rows = (.Rows + 1) .Row = liJ .Col = 0 .ColSel = .Cols - 1 .TextMatrix(liJ, 0) = IIf(IsNull(rsCLIENTES!codcli), "", rsCLIENTES!codcli) .TextMatrix(liJ, 1) = IIf(IsNull(rsCLIENTES!nomecli), "", rsCLIENTES!nomecli) .TextMatrix(liJ, 2) = IIf(IsNull(rsCLIENTES!fantasia), "", rsCLIENTES!fantasia) .TextMatrix(liJ, 3) = IIf(IsNull(rsCLIENTES!cpfcnpj), "", rsCLIENTES!cpfcnpj) .TextMatrix(liJ, 4) = IIf(IsNull(rsCLIENTES!fone1), "", rsCLIENTES!fone1) .TextMatrix(liJ, 5) = IIf(IsNull(rsCLIENTES!FONE2), "", rsCLIENTES!FONE2) .TextMatrix(liJ, 6) = IIf(IsNull(rsCLIENTES!celular), "", rsCLIENTES!celular) .TextMatrix(liJ, 7) = IIf(IsNull(rsCLIENTES!codconv), "", rsCLIENTES!codconv) If iZEBRA = 0 Then cor = lfundoZEBRA1 cor1 = lfrenteZEBRA1 iZEBRA = iZEBRA + 1 Else cor = lfundoZEBRA2 cor1 = lfrenteZEBRA2 iZEBRA = 0 End If .CellBackColor = cor .CellForeColor = cor1 rsCLIENTES.MoveNext Next liJ .Row = 1 .Col = 0 .ColSel = .Cols - 1 End If End With
É isto ai amigo, agora já tentei centralizar as colunas de toda forma, nada funciona.
vlu//
|
|
|
LCRamos
|
GOIANIA GO - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 14/09/2012 16:28 hs
Lembrando que a resposta acima do Tiranossauro, funciona muito bem no MSFlex, mas no MSHFlex, não. Etive que migrar para o MSHflex, por causa do BD.
vlu//
|
|
|
Treze
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 14/09/2012 16:44 hs
Veja bem é praticamente a mesma coisa que o flexgrid
Private Sub Form_Load() With MSHFlexGrid1 .Rows = 2 .Cols = 3 .FixedRows = 1 .FixedCols = 0 .FormatString = "^codigo|^nome|^idade" .ColWidth(0) = 1000 .ColWidth(1) = 1000 .ColWidth(2) = 1000 End With End Sub
simplesmente cria o grid com uma linha e o cabeçalho alinhados ao centro
|
|
|
|