Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TStringGrid markierte Zeile löschen
Paule90 - Mo 05.11.07 20:05
Titel: TStringGrid markierte Zeile löschen
Hi @ all
ich arbeite gerade an einem Program worin ich ein StringGrid verwende.
Ich komme eigentlich ganz gut klar, jedoch finde ich keine Lösung, wie ich eine markierte Zeile des StringGrids löschen kann..... :oops: :? :?
Wichtig ist mir das ich die markierte Zeile löschen und evtl. auch ändern kann!!!
Wenn jemand Tipps hat bitte schreiben :roll: :wink:
danke
Stefan
Kawa - Mo 05.11.07 21:21
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure Zeileweg(sg: TStringAligngrid; Zeile: integer); var i: integer; begin for i :=sg.Row to sg.RowCount-1 do sg.Rows[i].Assign(sg.Rows[i+1]); sg.RowCount := sg.RowCount - 1 end;
procedure TForm1.ButtonLoesClick(Sender: TObject); var mes:Word; begin mes:=MessageDLG('Zeile wird gelöscht!',mtConfirmation,[mbYes,mbNo],0); case mes of mryes:ZeileWeg(StringGrid1, 4); end; end; |
Moderiert von
Narses: Delphi-Tags hinzugefügt
Paule90 - Mo 05.11.07 23:20
Hi
danke Kawa, aber wird denn nicht die 4. Zeile gelöscht?
Ich wollte eigentlich, dass man die markierte Zeile löschen kann....
mfg Stefan
oldmax - Di 06.11.07 08:00
Hi
Kleine Bemerkung:
Delphi-Quelltext
1: 2:
| for i :=sg.Row to sg.RowCount-1 do sg.Rows[i].Assign(sg.Rows[i+1]); sg.RowCount := sg.RowCount - 1 |
muß heißen -2, da -1 die oberste Zeile ist und sg.Rows[i+1] über die Granze greifen würde.
Da meine Version das Align nicht kennt, hab ich's mal so versucht und es geht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TMyForm.Zeileweg(Var sg: TStringgrid); var i: integer; begin for i :=sg.Row to sg.RowCount-2 do sg.Rows[i].Assign(sg.Rows[i+1]); sg.RowCount := sg.RowCount - 1 end; |
Gruß oldmax
MAC. - Di 06.11.07 10:07
oldmax hat folgendes geschrieben: |
Delphi-Quelltext 1:
| procedure TMyForm.Zeileweg(Var sg: TStringgrid); |
|
Was soll das
var hier bewirken?
oldmax - Di 06.11.07 10:54
Hi
War der Ansicht, Ein Übergabeparameter einer Procedure wird nur zurückgeschrieben, wenn das Var davorsteht. Gut, war ein Irrtum, geht auch ohne, es stört aber auch nicht....
Gruß oldmax
raiguen - Di 06.11.07 11:39
Paule90 hat folgendes geschrieben: |
Hi
danke Kawa, aber wird denn nicht die 4. Zeile gelöscht? |
Bei d(ies)em CodeSchnippsel von Kawa mit Sicherheit nicht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure Zeileweg(sg: TStringAligngrid; Zeile: integer); var i: integer; begin for i :=sg.Row to sg.RowCount-1 do sg.Rows[i].Assign(sg.Rows[i+1]); sg.RowCount := sg.RowCount - 1 end; |
, weil der Parameter
Zeile nicht verwendet wird und eigentlich auch nicht benötigt wird
Paule90 hat folgendes geschrieben: |
Ich wollte eigentlich, dass man die markierte Zeile löschen kann....
|
genau->
sg.Row ist die markierte Zeile - und das macht Delphi sogar schon von sich aus, sobald irgendwo in eine Zeile geklickt wird
OnlineHilfe hat folgendes geschrieben: |
Die Eigenschaft Row gibt den Index der Zeile an, die die ausgewählte Zelle enthält. |
Also werden ab der markierten Zeile alle nachfolgenden Zeilen um eins nach oben gezogen -> die markierte Zeile ist somit gelöscht.
Paule90 - Di 06.11.07 14:06
Noch ne Frage:
mit sg.Row erkennt Delphi die aktuelle Zeile, aber wie kann ich diese Zeile dann Selektieren?
Irgendwie mit sg.Selection := TGridRect(Rect(1, sg.Row, 7, sg.Row)) !!!????
Aber das funtzt nicht --> so wird nichts markiert
mfg Stefan
jasocul - Di 06.11.07 14:41
Hallo,
bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:
*geschlossen*
Viele Grüße,
Jasocul
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!