Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Exception bei TStringGrid und Scrollbarfrage
Arne - Di 27.12.05 13:23
Titel: Exception bei TStringGrid und Scrollbarfrage
Moin zusammen,
neuer Tag, neues Problem ;)
Ich habe eine Instanz eines TStringGrid, fange Mausbuttonclicks (links) in das TStringGrid ab , um dann mittels TStringGrid.Selection := myTGridRect; eine Zeile zu selektieren.
Bei meinen Tests waren immer mehr Zeilen im TStringGrid, als gerade sichtbar, d.h. der vertikale Scrollbar ist sichtbar.
Selektiere ich jetzt eine Zeile und bewege das Mausrad, erhalte ich eine Exception der Klasse "EInvalidGridOperation". Wenn ich über die Up-/Down Buttons des vert. Scrollbars gehe, ist alles in Butter.
Kann da bitte jemand Licht reinbringen? Kann ich die Exception abfangen und nix tun - muß ich was tun???
Weiterhin: wie kann ich die Größe des verschiebbaren Teils des vert. Scrollbars so anpassen, daß er nicht die standardmäßige quadratische Form hat, sondern in der vertikalen Größe in Relation zu den Zeilen im TStringGrid steht. Hat TStringGrid da eine Eigenschaft/Methode? Ich find nämlich nix.
Many Thanx, Arne
Keldorn - Di 27.12.05 21:41
Hallo
zeig mal bitte deinen Code. mir siond Probleme nur bekannt, wenn du die selection bereits auf einen ungültigen Wert (z.B. -1,-1,-1,-1) setzt und dann außerhalb des Grids scrollst. das kannst du dann so umgehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin with Sender as Tstringgrid do begin if TopRow+Visiblerowcount<rowcount then toprow:=toprow+1 end; handled:=true; end;
procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin with Sender as Tstringgrid do begin if TopRow>fixedrows then toprow:=toprow-1 end; handled:=true; end; |
2. Frage:
http://www.swissdelphicenter.ch/de/showcode.php?id=1052
funktioniert für meine Bergriffe aber auch nicht so wirklich, da die scrollbox nicht 100% ausgedehnt wird.
Mfg Frank
Arne - Mi 28.12.05 11:49
Hallo Frank,
danke erstmal für Deine Antwort.
Der Code zum Selektieren einer TStringGrid Zeile sieht bei mir so aus (eine FixedRow):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TFormDBMain.DBMainStringGridClick(Sender: TObject); var rGrid : TGridCoord; rCursorPos : TPoint; rRect : TGridRect;
begin GetCursorPos(rCursorPos); rCursorPos := DBMainStringGrid.ScreenToClient(rCursorPos); rGrid := DBMainStringGrid.MouseCoord(rCursorPos.X, rCursorPos.Y); if (rGrid.Y > 1) and (rGrid.Y < DBMainStringGrid.RowCount) then begin rRect.Top := rGrid.Y; rRect.Bottom := rGrid.Y; rRect.Left := 0; rRect.Right := DBMainStringGrid.ColCount; DBMainStringGrid.Selection := rRect; end; end; |
Wenn der vert. Scrollbar erscheint und ich das Mausrad bewege, kracht es jedesmal.
Werde mal deinen Code einbauen...
bye, Arne
Keldorn - Mi 28.12.05 12:03
Zitat: |
rRect.Right := DBMainStringGrid.ColCount;
|
colcount ist nicht die letzte Spalte. damit setzt du die Selecttion auf einen ungültigen Bereich.
Delphi-Quelltext
1:
| rRect.Right := DBMainStringGrid.ColCount-1; |
ich habe es jetzt nicht probiert, aber die Umrechnerei mit den mousecursor brauchst du nicht. bei onclick ist col und row schon gesetzt und du kannst mit den Werten arebiten.
Mfg Frank
Arne - Do 29.12.05 18:43
Zitat: |
colcount ist nicht die letzte Spalte. damit setzt du die Selecttion auf einen ungültigen Bereich. |
Autsch.... da hast Du natürlich vollkommen Recht. Typischer Plus-Minus-Eins Fehler....
Funktioniert jetzt. Scrollbars noch nicht, aber jetzt weiß ich, wo ich in der Win32 API zu schauen habe. Dachte, es gäb da ein Property :cry:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!