SELECAO NO MSFLEXGRID
Pessaol, estou com o seguinte problema para resolver:
Tenho os dados da tabela carregados em um FlexGrid, até aàtudo bem. Coloco o seguinte código na propriedade Goto_Focus para selecionar uma determinada linha:
With MSFlexGrid
.Col = 0
.Col = .Cols - 1
.BackColorSel = &H8000000D
.HighLight = flexHighlightWithFocus
.SelectionMode = flexSelectionByRow
End With
O meu problema é seguinte:
quando carrego o formulario coloco na propriedade Form_Activate MSFlexGrid.SetFocus para que ao inciar o grid esteja selecionado, mais não acontece, eu só terei a seleção quando clicar no Grid. Outra coisa é que apartir das informações contidas no Grid, eu abro todas as informações do registro selecionado em outro formulario, até aqui blz, mais quando eu encerro o formulario o Grid não aparece selecionado no registro que eu cliquei, o Grid nem aparece seleconado.
Pessoal alguem pode me ajuda, urgente????
Ficarei muito grato a quem puder me dar este help.
Desde ja agradeço a colaboração de todos...
Tenho os dados da tabela carregados em um FlexGrid, até aàtudo bem. Coloco o seguinte código na propriedade Goto_Focus para selecionar uma determinada linha:
With MSFlexGrid
.Col = 0
.Col = .Cols - 1
.BackColorSel = &H8000000D
.HighLight = flexHighlightWithFocus
.SelectionMode = flexSelectionByRow
End With
O meu problema é seguinte:
quando carrego o formulario coloco na propriedade Form_Activate MSFlexGrid.SetFocus para que ao inciar o grid esteja selecionado, mais não acontece, eu só terei a seleção quando clicar no Grid. Outra coisa é que apartir das informações contidas no Grid, eu abro todas as informações do registro selecionado em outro formulario, até aqui blz, mais quando eu encerro o formulario o Grid não aparece selecionado no registro que eu cliquei, o Grid nem aparece seleconado.
Pessoal alguem pode me ajuda, urgente????
Ficarei muito grato a quem puder me dar este help.
Desde ja agradeço a colaboração de todos...
Amigo vamos lá:
Primeiro o evento Activate só ocorre apartir do segundo formulário aberto ao mesmo tempo (e qunado o usuário clicar no que está desativado, nesse momento o formuláio que foi clicado mudará a cor da barra de tÃÂÂtulo ocorrendo o Evento, já o formulário que perdeu o foco "ficou com a barra mais clara" recebeu o evento Deactivate). Conclusão a rotina não está sendo executada.
Para resolver, no evento Load do formulário acrescente a chamada àrotina ficando assim:
uma dica a linha ".Col = 0" não é necessária já que abaixo vc troca o valor de Col indo para a última coluna. ;-)
Sobre o grid não estar selecionado, bem talvez vc clique em algum botão para abrir o formulário, neste momento o focu sai do grid então a seleção existe mas não é exibida porque não está com focu, para resolver acrecente MSFlexGrid.SetFocus após a última rotina do botão.
Qualquer dúvida estaremos aqui, abraços ...
Primeiro o evento Activate só ocorre apartir do segundo formulário aberto ao mesmo tempo (e qunado o usuário clicar no que está desativado, nesse momento o formuláio que foi clicado mudará a cor da barra de tÃÂÂtulo ocorrendo o Evento, já o formulário que perdeu o foco "ficou com a barra mais clara" recebeu o evento Deactivate). Conclusão a rotina não está sendo executada.
Para resolver, no evento Load do formulário acrescente a chamada àrotina ficando assim:
Private Sub Form_Load()
Form_Activate
End Sub
uma dica a linha ".Col = 0" não é necessária já que abaixo vc troca o valor de Col indo para a última coluna. ;-)
Sobre o grid não estar selecionado, bem talvez vc clique em algum botão para abrir o formulário, neste momento o focu sai do grid então a seleção existe mas não é exibida porque não está com focu, para resolver acrecente MSFlexGrid.SetFocus após a última rotina do botão.
Qualquer dúvida estaremos aqui, abraços ...
MJC obrigado pela resposta mais não deu certo.
Deixa eu explicar novamente o que quero.
O objeto ListView tem um propriedade que se marcada com verdadeiro, toda vez que ele perder o foco vai continuar selecionado, tipo assim, quando esta com o foco ele esta selecionado em azul, e após perder o foco ele contina selecionado so que na cor cinza, o que indique qual o registro que foi selecionado para chamar a outra rotina.
Pessoal, só não estou usando o ListView porque não deixa a rotina com visual prossional, deixa a rotina com um visual diferente e também tem algumas funções, digo melhor, resultados, que não consigo aplicar no listview.
Se alguem puder me ajudar ficarei muito grato.
Deixa eu explicar novamente o que quero.
O objeto ListView tem um propriedade que se marcada com verdadeiro, toda vez que ele perder o foco vai continuar selecionado, tipo assim, quando esta com o foco ele esta selecionado em azul, e após perder o foco ele contina selecionado so que na cor cinza, o que indique qual o registro que foi selecionado para chamar a outra rotina.
Pessoal, só não estou usando o ListView porque não deixa a rotina com visual prossional, deixa a rotina com um visual diferente e também tem algumas funções, digo melhor, resultados, que não consigo aplicar no listview.
Se alguem puder me ajudar ficarei muito grato.
calma... deixa eu ver se entendi...
vc quer selecionar um registro do MSFlexGrid, e mesmo quando este perder o foco o mesmo continue selecionado ??
Somente isto??
Se sim, é só pintar a cor do fundo da linha, me dá um toque que eu monto um exemplo pra vc.
vc quer selecionar um registro do MSFlexGrid, e mesmo quando este perder o foco o mesmo continue selecionado ??
Somente isto??
Se sim, é só pintar a cor do fundo da linha, me dá um toque que eu monto um exemplo pra vc.
Sim, é isto que preciso, só que quando eu voltar para a torina que está o grid ele deve estar com o foco e a linha que eu selecionei para chamar a outra rotina deva estar selecionada novamente, igualmente no listview.
Desde ja agradeço.
Desde ja agradeço.
Amigo, fiz o seguinte:
Simples e funcional... ve se lhe atende...
Aàda pra dar a impressao de selecionado quando o flex perder a o foco, vc pode pintar a cor de fundo da linha, e quando receber o foco vc despinta. Tipo assim:
Private Sub Form_Activate()
MSFlexGrid1.SetFocus
End Sub
Simples e funcional... ve se lhe atende...
Aàda pra dar a impressao de selecionado quando o flex perder a o foco, vc pode pintar a cor de fundo da linha, e quando receber o foco vc despinta. Tipo assim:
Private Sub MSFlexGrid1_GotFocus()
For i = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i
MSFlexGrid1.CellBackColor = vbWhite
Next
End Sub
Private Sub MSFlexGrid1_LostFocus()
For i = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i
MSFlexGrid1.CellBackColor = vbBlue
Next
End Sub
Marcelo, obrigado pela tentativa, mais ainda não é o que eu estou precisando, é quase isso.
Pessoal obrigado a todos que com empenho estão tentando me ajudar a chegar a um resultado satisfatório mas após muito persistir ja estou quase terminando o desenvolvimento e assiim que estiver pronto postarei aqui para que todas possam ver. Peço aos Moderadores que ainda não encerrem este tópico pois colocarei em breve, em breve mesmo, o fonte para que todos vejam e também colocarei ele disponÃÂÂvel para Download.
Desde ja agradeço a todos.
Desde ja agradeço a todos.
Pessoal, bom dia....
Consegui, bom pelo menos eu acho que consegui, terminar o que estou procurando e chegar ao resultado que vos mostrarei a seguir. Gostaria que fizessem e me postassem se houver algum bug, ou alguma falha. Então segue:
'x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
Option Explicit
Dim UltimaLinha As Integer
Dim AtualLinha As Integer
Dim CimaPressed As Boolean
Dim BaixoPressed As Boolean
Dim Clicked As Boolean
Dim I As Integer
'x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
Agora vou explicar o que eu aprontei...
Primeiro eu criei o cabeçalho do grid e depois o preenchi, só com o número das linhas para ficar mais fácil de vizualizar.
Depois com um código que eu mesmo peguei aqui no site para reconhecer as setas no MSFlexGrid, só que algumas modificações e adptações, que explicarei no final, para me dizer quando foi pressionada as setas para mudar a linha. Jogo o foco após serem pressiondas, uma das duas, ou para cima ou para baixo para uma TextBox que fara toda a verificação. Quando a TextBox recebe o foco ela verificar qual seta foi pressionada e verificar qual foi a ultima linha para pintala de Branco e as Letras em Preto, feito isto ele pega a Linha atual, a que recebeu a mudança e a pinta de Azul e as Letras em Branco. Se pressionada a telca Enter, Keyascii = vbKeyReturn, chamarara um segundo Form aàda-se pra ver que a linha do Grid na qual estava focada ao pressionar o Enter passa a ficar em uma cor mais clara que indica que o grid perdeu o focu. No segungo Form você coloca o seguinte:
Agora rode o aplicativo e veja como funciona. assim que for libeerado pela equipe do VBMania o arquivo que estou enviando você poderam baixa-lo e verificar o que eu fiz. Para adiantar o nome do arquivo é Listando MSFlexGrid com e sem Foco.
Pessoal até mais....
Consegui, bom pelo menos eu acho que consegui, terminar o que estou procurando e chegar ao resultado que vos mostrarei a seguir. Gostaria que fizessem e me postassem se houver algum bug, ou alguma falha. Então segue:
'x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
Option Explicit
Dim UltimaLinha As Integer
Dim AtualLinha As Integer
Dim CimaPressed As Boolean
Dim BaixoPressed As Boolean
Dim Clicked As Boolean
Dim I As Integer
Private Sub Form_Load()
Call CabecalhoGrid
Call Preenchegrid
UltimaLinha = 1
AtualLinha = 1
End Sub
Private Sub CabecalhoGrid()
' configuar o grid
With Grid
.GridLines = flexGridFlat
.FixedRows = 1
.FixedCols = 0
.ScrollBars = flexScrollBarBoth
.AllowUserResizing = flexResizeColumns
.Cols = 4 ' Número de colunas(incluindo o cabecalho)
.Rows = 1 ' Número de linhas(com cabecalho)
.ColWidth(0) = 285 ' Largura da coluna 0
.TextArray(1) = "Nr. Linha"
.ColWidth(1) = 1200
.ColAlignment(1) = 2
'
.TextArray(2) = "Secunda Coluna"
.ColWidth(2) = 5275
.ColAlignment(2) = 2
'
.TextArray(3) = "Terceira Coluna"
.ColWidth(3) = 5275
.ColAlignment(3) = 2
'
End With
End Sub
Private Sub Preenchegrid()
Dim Row As Integer
For Row = 1 To 15
Grid.Rows = 16
Grid.Col = 0
Grid.Row = Row
Set Grid.CellPicture = LoadPicture("C:\Documents and Settings\Daniel de Moura\Meus documentos\Meus Programas\Visual Básic 6.0\Programas Comerciais\SGA - System\Pictures\Bol-Ativo.bmp")
Grid.TextMatrix(Row, 1) = Format(Row, "00")
Next
Grid.Row = 1
Grid.Col = 0
End Sub
Private Sub Grid_Click()
AtualLinha = Grid.Row
Clicked = True
txt_Verifica.SetFocus
End Sub
Private Sub Grid_GotFocus()
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = Grid.Row
Grid.CellBackColor = &H8000000D ' Linha Azul
Grid.CellForeColor = &H80000005 ' Letras em Branco
Next
Grid.Col = 0
UltimaLinha = Grid.Row
'reset the key states
Call GetAsyncKeyState(0)
Call GetAsyncKeyState(Press_UP)
Call GetAsyncKeyState(Press_DOWN)
' Call GetAsyncKeyState(Press_RIGHT)
' Call GetAsyncKeyState(Press_LEFT)
tmr_1.Enabled = True
End Sub
Private Sub Grid_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
FRM_Form.Show 1
End If
End Sub
Private Sub Grid_LostFocus()
tmr_1.Enabled = False
If CimaPressed = False And BaixoPressed = False And Clicked = False Then
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = Grid.Row
Grid.CellBackColor = &H8000000F 'Linha na cor ButtonFace
Grid.CellForeColor = &H0& 'Letras Preto
Next I
End If
End Sub
Private Sub tmr_1_Timer()
If GetAsyncKeyState(Press_UP) Then
'UltimaLinha = Grid.Row + 1
CimaPressed = True
txt_Verifica.SetFocus
ElseIf GetAsyncKeyState(Press_DOWN) Then
'UltimaLinha = Grid.Row - 1
BaixoPressed = True
txt_Verifica.SetFocus
ElseIf GetAsyncKeyState(Press_RIGHT) Or GetAsyncKeyState(Press_LEFT) Then
'as Setas para direita e para esquerda não serão usadas
End If
End Sub
Private Sub txt_Verifica_GotFocus()
If CimaPressed = True Then
If UltimaLinha - 1 <> 0 Then
Grid.Col = 0
Grid.Row = UltimaLinha
If Grid.CellBackColor = &H8000000D Then
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = UltimaLinha
Grid.CellBackColor = vbWhite ' Branco
Grid.CellForeColor = vbBlack ' Preto
Next
End If
Grid.Col = 0
Grid.Row = UltimaLinha - 1
If Grid.CellBackColor = vbWhite Or Grid.CellBackColor = 0 Then
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = Grid.Row
Grid.CellBackColor = &H8000000D ' Branco
Grid.CellForeColor = vbWhite ' Preto
Next
End If
End If
CimaPressed = False
Grid.Col = 0
Grid.Row = Grid.Row
Grid.SetFocus
ElseIf BaixoPressed = True Then
If UltimaLinha + 1 <> Grid.Rows Then
Grid.Col = 0
Grid.Row = UltimaLinha
If Grid.CellBackColor = &H8000000D Then
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = UltimaLinha
Grid.CellBackColor = vbWhite ' Branco
Grid.CellForeColor = vbBlack ' Preto
Next
End If
Grid.Col = 0
Grid.Row = UltimaLinha + 1
If Grid.CellBackColor = vbWhite Or Grid.CellBackColor = 0 Then
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = Grid.Row
Grid.CellBackColor = &H8000000D ' Azul
Grid.CellForeColor = &H80000005 ' Branco
Next
End If
End If
BaixoPressed = False
Grid.Col = 0
Grid.Row = Grid.Row
Grid.SetFocus
ElseIf Clicked = True Then
'MsgBox "OK" & vbNewLine & _
"UltimaLinha: " & UltimaLinha & _
"LinhaAtual: " & Grid.Row
For I = 0 To Grid.Cols - 1
Grid.Col = I
Grid.Row = UltimaLinha
Grid.CellBackColor = vbWhite ' Branco
Grid.CellForeColor = vbBlack ' Preto
Next
Grid.Col = 0
Grid.SetFocus
Grid.Row = AtualLinha
Clicked = False
End If
End Sub
'x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x
Agora vou explicar o que eu aprontei...
Primeiro eu criei o cabeçalho do grid e depois o preenchi, só com o número das linhas para ficar mais fácil de vizualizar.
Depois com um código que eu mesmo peguei aqui no site para reconhecer as setas no MSFlexGrid, só que algumas modificações e adptações, que explicarei no final, para me dizer quando foi pressionada as setas para mudar a linha. Jogo o foco após serem pressiondas, uma das duas, ou para cima ou para baixo para uma TextBox que fara toda a verificação. Quando a TextBox recebe o foco ela verificar qual seta foi pressionada e verificar qual foi a ultima linha para pintala de Branco e as Letras em Preto, feito isto ele pega a Linha atual, a que recebeu a mudança e a pinta de Azul e as Letras em Branco. Se pressionada a telca Enter, Keyascii = vbKeyReturn, chamarara um segundo Form aàda-se pra ver que a linha do Grid na qual estava focada ao pressionar o Enter passa a ficar em uma cor mais clara que indica que o grid perdeu o focu. No segungo Form você coloca o seguinte:
Private Sub Form_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox FRM_GridList.Grid.Row
End Sub
Agora rode o aplicativo e veja como funciona. assim que for libeerado pela equipe do VBMania o arquivo que estou enviando você poderam baixa-lo e verificar o que eu fiz. Para adiantar o nome do arquivo é Listando MSFlexGrid com e sem Foco.
Pessoal até mais....
Tópico encerrado , respostas não são mais permitidas