Private Sub MSHFlexGrid_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim lngRow As Long
Dim lngCol As Long
Dim lngColor As Long
'TÄMÄ TOIMII HALUTULLA TAVALLA
If Button = vbLeftButton And Shift = vbCtrlMask Then
With MSHFlexGrid
.HighLight = 0
.Redraw = False
lngRow = .MouseRow
If lngRow >= .FixedRows Then
.Col = .FixedCols
If .CellBackColor = vbInfoBackground Then
lngColor = .BackColor
Else
lngColor = vbInfoBackground
End If
For lngCol = .FixedCols To .Cols - 1
.Col = lngCol
.CellBackColor = lngColor
Next lngCol
End If
.Redraw = True
End With
End If
End Sub
----------------------------------------------------------------------------------------------------------
Private Sub MSHFlexGrid_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDown And Shift = vbShiftMask Then
'MITEN TAPAHTUU MONIVALINTA YKSITTÄIN ALASPÄIN LIIKKUESSA?
End If
If KeyCode = vbKeyUp And Shift = vbShiftMask Then
'MITEN TAPAHTUU MONIVALINNAN PERUUTTAMINEN YKSITTÄIN YLÖSPÄIN LIIKKUESSA?
End If
End Sub----------------------------------------------------------------------------------------------------------
Entä mitenkä tehdään monivalinta alkaen ekasta klikatusta rivistä ja päättyen viimeiseen kikattuun riviin pitämällä Shift-näppäintä alhaalla ja klikkaamalla vikaa riviä? Eli samalla tavalla kuin Windowsin resurssienhallinnassa käsitellään tiedostoja.
Koodia ei välttämättä kannata liittää KeyDown-tapahtumaan. Yksi toteutus on panna muistiin rivi, jolla hiiren nappi painetaan pohjaan. Sitten kun nappi vapautetaan, tiedossa on merkittävän alueen alku- ja loppukohta. Tapahtumat ovat siis MouseDown ja MouseUp. Kirjoittamasi koodi kelpaa melkein sellaisenaan, sitä pitää muuttaa vain niin, että yhden rivin merkitsemisen asemesta merkitään kokonainen alue. Jos merkinnän pitää tulla näkyviin sitä mukaa kuin hiirtä liikutetaan, koodia pitää kirjoittaa vielä MouseMove-tapahtumaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.