Moin fuknersascha,
du sollst als erstes die DelphiPraxis-Suche nutzen. Dafür ist sie schließlich da ;) Es gibt hunderte Einträge zur Selektion einer Zeile. Da ich gerade guter Laune bin, hier noch mal für faule:
Delphi-Quellcode:
StringGrid1.Options := StringGrid1.Options + [goRowSelect]; // aktiviert Selektion der ganzen Zeile anstelle der einen Zelle
StringGrid1.Options := StringGrid1.Options - [goRangeSelect]; // deaktiviert Selektion mehrerer Zeilen
Diese Einstellungen kannste auch im Objektinspektor vornehmen.
Edit:
Aber es sieht so aus, als wollest du deine Selektion nicht per Mausklick realisieren.
Dazu erst einmal:
StringGrid1.Selection
nimmt nur Koordinaten für eine Zelle oder einer ganzen Zeile an bzw. des gesamten StringGrids. Es werden anscheinend nicht mehrere Zellen verschiedener Zeilen unterstützt. Desweiteren stellt ein
Rect einen Bereich einer Komponente in Pixel dar. Du kannst also auch nicht einfach für
Left einen Spalteindex angeben (Index <> Pixelposition).
Tja, dies musst du wohl selbst programmieren, denn meines Wissens gibt es keine vorprogrammierte Funktion dafür. Ich habe hier mal ein kleines Beispiel für dich:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options + [goRowSelect]; // aktiviert Selektion der ganzen Zeile anstelle der einen Zelle
StringGrid1.Options := StringGrid1.Options - [goRangeSelect]; // deaktiviert Selektion mehrerer Zeilen
selList := TList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
selList.Free;
end;
//---------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
selList.Add(i);
StringGrid1.Invalidate;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
this: TStringGrid;
begin
if (Sender is TStringGrid) then
begin
this := TStringGrid(Sender);
if not (gdSelected in State) then
begin
if (ACol >= this.FixedCols) and (ARow >= this.FixedRows) and (selList.IndexOf(ARow) <> -1) then
begin
this.Canvas.Brush.Color := clHighlight;
this.Canvas.Font.Color := clHighlightText;
this.Canvas.FillRect(Rect);
end;
end;
end;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
selList.Clear;
StringGrid1.Invalidate;
end;
Die
selList ist hierbei eine Liste, die Integer-Werte (hier: Zeilenindizes des StringGrids) aufnimmt. Da es keine generischen Listen bis mind. Delphi 7 gibt (nur ein Add-On iwo im Netz), müsstest du dir eine solche Liste auch noch mal programmieren (einfach die Delphi-Suche benutzen - gibt sogar nen Tutorial, wenn ich mich nicht irre).
MfG
Nogge