Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Stringgrid: Zeile markieren aus dem Programmablauf??


Tendl - Di 10.08.04 14:51
Titel: Stringgrid: Zeile markieren aus dem Programmablauf??
In meinem Programm soll eine Maus-Aktion zB. ein Click auf eine Zeile eines Listviews in einem Stringgrid dann ebenfalls eine bestimmte Zeile selektieren. Mein Problem ist ganz trivial:
Ich weiß ich möchte die 2.Zeile im Stringgrid selektieren, aber die property selection ist readonly. Wie kann ich aber genau diese Property anders setzen?


smiegel - Di 10.08.04 15:19

Hallo,

seit wann ist Selection in einem StringGrid readonly?
Wenn Du in der Delphi-Hilfe unter Selection nachgeschaut hättest, würdest Du wissen, wie man eine Zelle markiert. Dort gibt es sogar ein Beispiel dazu.

Sollte Dir dies nicht genügen, so würde ich einmal die Suche hier im Forum bemühen.


Tendl - Di 10.08.04 15:33

Nicht ganz so herablassend wäre manchmal besser.

Konkret:

Die Zeile

Delphi-Quelltext
1:
      stringgrid1.Selection.Top:=1;                    

führt zur Fehlermeldung des Compilers:
Left side cannot be assigned

Wie ich das mit dem Beispiel in der Hilfe vereinbaren kann ist
mir nicht klar.

Über die Eigenschaften row und Col kann ich genau ein Feld selektieren, ich brauche aber die ganze Zeile.

Vielen Dank im Voraus für Eure Hilfe
Thomas

PS. Keine Frage ist so dumm, dass nicht andere ebenfalls fragen würden.


smiegel - Di 10.08.04 15:55

Hallo,

das hat mit herablassend nichts zu tun. Ich verstehe nicht wo das Problem liegt. Wie bereits oben erwähnt, ist in der Delphi-Hilfe ein Beispiel, wie man die Eigenschaft Selection benutzt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
// Die folgenden Angaben setzten vorraus, dass FixedCols und FixedRows auf 1 steht;
// Das Grid hat 4 Spalten
// Es wird die 2. Zeile komplett markiert
procedure TForm1.Button1Click(Sender: TObject);
var myRect: TGridRect;
begin
  myRect.Left:=1;   // --> entspricht Zelle links
  myRect.Top:=2;    // --> entspricht Zelle oben
  myRect.Right:=3;  // --> entspricht Zelle rechts
  myRect.Bottom:=2// --> entspricht Zelle unten

  MyGrid.Selection := myRect;
end;


Anonymous - Di 10.08.04 18:28

@smiegel: Manchmal wäre es auch sinnvoll, zu erklären, warum etwas nicht funktioniert.

Tendl hat folgendes geschrieben:
Die Zeile

Delphi-Quelltext
1:
      stringgrid1.Selection.Top:=1;                    

führt zur Fehlermeldung des Compilers:
Left side cannot be assigned

Wie ich das mit dem Beispiel in der Hilfe vereinbaren kann ist
mir nicht klar.


Liegt daran, dass Selection eine Property vom StringGrid ist. Die hat eine read und eine write-Methode, allerdings haben die Member von Selection dies nicht (da es ein Record ist), also muss man immer gleich alles auf einmal setzen. Das gleiche ists zum Beispiel bei TMemo.CaretPos.


Tendl - Mi 11.08.04 11:03

Danke,

jetzt habe ich kapiert wo das Problem liegt oder vielmehr lag.
Workarounds sind schon in Ordnung, aber eigentlich möchte ich verstehen wárum ich sie brauche.

Thomas