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:
//_____________ZEILE LÖSCHEN_________________________________________
 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 user profile iconNarses: 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

user profile iconoldmax 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

user profile iconPaule90 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:
//_____________ZEILE LÖSCHEN_________________________________________
 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

user profile iconPaule90 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