StringGrid: Editieren trotz Options goRowSelect = true
-
Hallo,
gibt es eine Möglichkeit eine Zelle eines StringGrid zu editieren, obwohl die Options bei goRowSelect auf true steht?
Bei der Funktion Select Cell bekomm ich ja die angewählte Celle raus.
bin für jeden Tip dankbar.
-
Probier mal in einem dazu passenden Grid-Ereignis (z.b. OnClick):
StringGrid->EditorMode = true;
Oder schau mal auf meiner Seite unter Stringgrid, da habe ich ein Bsp, wie man sowas auch selber realisieren kann.
-
Guten Morgen,
leider tut sich mit StingGrid->EditorMode = true nichts.
Das auf Deiner Seite hab ich mir angesehen und werd mal schauen ob ich das für mich nutzen kann.Eine frage hab ich noch, wenn ich die ganze Zeile markiert habe, und das in die Zwischenablage schieben will, steht dann tatsächlich alles drin oder muss ich das per Hand machen?
-
Ich schätze mal, das muss man händisch machen.
-
Hallo,
@F98:
Dank für den Link auf Deine Seite, der Code funzt super !
Das in die Zwischenablage schieben einer ganzen Zeile muss man per Hand machen.
Also nochmal vielen Dank.Eine Frage hab ich aber noch, hast du bzw. gibt es ne Möglichkeit aus dem ZeilenSelect, ein Multiselect zu machen? Ich mein damit mehrere Zeilen zu markieren und zu kopieren bzw einzufügen. Wie müßte ich das dann machen?
Danke schon mal
-
Mit
StringGrid1->Selection.Top; StringGrid1->Selection.Bottom;
holst du dir Anfang und Ende des selektierten Bereichs.
Dann kannst du dir mitStringGrid1->Rows [y]->CommaText;
den Inhalt der selektierten Zeilen holen.
-
Hi,
danke für den Tip, aber ich weiß nicht genau wo ich das mache und muss dazu noch ein bestimmtes Flag bei den Options gesetzt werden?
-
Beim herkömmlichen StringGrid reicht es wenn du RowSelect setzt, dann kannst du auch mehrere Zeilen selektieren.
Beim "von Hand" markieren wie bei F98 müsstest du dann dies so erweitern, das du einen Bereich nimmst.int FocusedRowTop,FocusedRowBottom;
Und dann im OnDrawCell
if (ARow>=FocusedRowTop&&ARow<=FocusedRowBottom) { // blauer Markierungsbalken mit weißer Schrift ...
FocusedRowTop und FocusedRowBottom musst du dann natürlich von Hand setzen.
Könnte man eventuell bei OnClick bzw OnMouseDown,OnMouseUp machen.
-
Hi,
ich hab es auch so gemacht wie du in der zweiten Variante andeutest, aber das haut noch nicht ganz hin, mal sehen ob ich das noch hinbekomme. Der markierte Bereich stimmt noch nich ganz mit dem überein, was ich tatsächlich markiert habe.
-
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if(Shift.Contains(ssLeft)) { int ACol, ARow; StringGrid1->MouseToCell(X, Y, ACol, ARow); FocusedRowTop=ARow; FocusedRowBottom=ARow; StringGrid1->Repaint(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(Shift.Contains(ssLeft)) { int ACol, ARow; StringGrid1->MouseToCell(X, Y, ACol, ARow); FocusedRowBottom=ARow; StringGrid1->Repaint(); } }
-
Vielleicht besser nur bei Veränderung neu zeichnen ...
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(Shift.Contains(ssLeft)) { int ACol, ARow; StringGrid1->MouseToCell(X, Y, ACol, ARow); if(ARow!=FocusedRowBottom) { FocusedRowBottom=ARow; StringGrid1->Repaint(); } } }
-
Hi,
naja was passiert aber wenn er nicht die Mouse zum Selektieren nimmt sondern nur die Tastatur?
-
OnKeyPress ?
-
ich glaub OnKeyDown bzw. OnKeyUp ist da besser,weil ich da ia auf alle Fälle zum Markieren noch die Umschalt-Taste drücken muss, aber wie komm ich da an die ZellKordinaten ran?
-
StringGrid1->Row;
-
ja ich habs mittlerweile fast hinbekommen, das Problem ist nur, das wenn die Funktion OnKeyDown aufgerufen wird in Grid->Row noch die Zeile der vorher markierten Zeile drin steht. Erst wenn OnSelectCell aufgerufen wurde, ändert sich das. Das hab ich aber ganz gut hinbekommen, und es funzt für eine Zeile,
markiert mit Maus oder Tastatur und für mehrere Zeilen mit Mouse.
Mit der Tastatur muss ich es noch hinbekommen, das im OnSelectCell nachgesehen wird welchen Status die Shift taste hat. Da grüble ich noch über ner Lösung.
Vielen Dank bis hierher, ich bin für weiter Vorschläge offen.
-
ich hab es auch für MultiSelect über die Tastatur hinbekommen,
eine Frage hab ich aber noch, wenn ich mit der Mouse was markiere, dann geht das im Moment immer nur von oben nach unten gibts auch ne Möglichkeit von unten nach oben? Das gleiche gilt auch für mit der Tastatur markieren.
Also nochmal deutlich.
Ich markier ein Zeile unten im Grid und will dann nach oben weitermarkieren, aber das geht irgendwie noch nich.
Hängt das vielleicht mit dem Top und Bottom zusammen, das müßte da ja verdret sein. Mir kommt da eine IdeeP.S. falls die Lösung jemanden interresiert einfach mal melden
-
Okay, vielen Dank es funzt