Tech-Ecke / Delphi Inhalt / TStringGrid

 

     TStringGrid

 


 

   Grundlegendes

Ein TStringGrid enthält Zellen, welche in Zeilen und Spalten angeordnet sind. Der Inhalt einer einzelnen Zelle ist ein String.
Die Zeilen und Spalten werden durchnummeriert, wobei die erste Spalte bzw. Zeile mit 0 beginnt.


Zuweisen von Text (
var S: String;)

   StringGrid1.Cells[1,2] := 'Hallo';   // Schreibt den Text "Hallo" in die 3. Zelle der 2. Spalte
 


Textformatierung

Um Zellentext formatieren zu können, muss beim Zeichnen der Zellen Hand angelegt werden. Im Beispiel soll die erste Zeile (0) in rot und Fettdruck erscheinen. Dazu beim Ereignis OnDrawCell, der entsprechenden StringGrid (hier StringGrid1) folgenden Code hinterlegen.

  if ARow = 0 then
   with StringGrid1, Canvas do
      begin
         Font.Color := clRed;
         Font.Style := [fsBold];
         TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
      end;
 


 

   Zellmarkierung aufheben

   StringGrid1.Selection := TGridRect(Rect(-1,-1,-1,-1));  // hebt die Markierung auf
 


 

   Zeilen und Spalten zählen ( var Zahl: Integer;)

   Zahl := StringGrid.RowCount;  // die Variable Zahl enthält die Anzahl der Zeilen
 Zahl := StringGr
id.ColCount;  // die Variable Zahl enthält die Anzahl der Spalten
 


 

   Zeilenhöhe und Spaltenbreite

  StringGrid.RowHeights[3] := 10 // setzt die Zeilenhöhe der 4. Zeile auf 10 Pixel
StringGrid.ColWidths[3] := 10 // setzt die Spaltenbreite der 4. Spalte auf 10 Pixel
 


 

   Bild einer Zelle zuweisen

Ein Bild bekommt man über die Klasse Canvas in eine Zelle. Dabei wird das Bild bei dem Event OnDrawCell in die Zelle gezeichnet. Folgender Code prüft beim OnDrawCell ob der Textinhalt, der gerade zu zeichnenden Zelle ein Pfad zu einer Datei ist. Ist dies der Fall, so wird diese Datei (Bitmapdatei) geladen und in die Zelle gezeichnet.

  procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
   bmp: TBitmap;
begin
   if FileExists(StringGrid1.Cells[ACol,ARow]) then
      begin
         bmp := TBitmap.Create;
         bmp.LoadFromFile(StringGrid1.Cells[ACol,ARow]);
         StringGrid1.Canvas.CopyRect(Rect,bmp.Canvas,Classes.Rect(0,0,bmp.Width,bmp.Height));
         bmp.Free;
      end;
end;
 

Anwendung

Da das zuweisen eines Textes den OnDrawCell Event hervorruft, wird hier direkt das angegebene Bild in die entsprechende Zelle gezeichnet.

  StringGrid1.Cells[1,1] := 'c:\test.bmp';
 


 

   StringGrid reagiert auf Rechtsklick

Durch einen Rechtsklick mit der Maus, wird die unter dem Mauscursor liegende Zeile markiert. Dazu hinter dem Event OnMouseDown folgenden Code hinterlegen:

  var
   aGridCoord:TGridCoord;

if Shift = [ssRight] then // nur rechte maustaste
begin
   // mauskoordinaten in gridkoordinaten
   aGridCoord := StringGrid1.MouseCoord(x,y);
   if (aGridCoord.y >= stringgrid1.FixedRows)
     and (aGridCoord.y > -1)
     and (aGridCoord.x >= stringgrid1.FixedCols)
     and (aGridCoord.x > -1) then
       begin
          // zelle markieren
         StringGrid1.Row := aGridCoord.y;
         StringGrid1.Col := aGridCoord.x;
       end;
end;

 

"Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !"

[letzte Aktualisierung 09.10.2006]