Einzelnen Beitrag anzeigen

Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#3

Re: StringGrid Zeile Kopieren

  Alt 29. Aug 2008, 01:49
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
  Mit Zitat antworten Zitat