Rahmen um Zellen:
Benutze die neue Methode ShowCellBorders, der man die Koordinaten der Eckzellen und die CellBorderStyle-Records für die Rand- und inneren Linien angeben kann. Wenn keine Rahmenlinie erwünscht ist, nimmt man dafür die Konstante NO_CELL_BORDER, die in fpsWorksheetGrid.pas definiert ist.
Ändern des Auswahlrechtecks:
Dafür hat das Grid eine neue Eigenschaft SelectionPen, über die man alle Parameter des Pens einstellen kann. Beachte auch das geerbte UseXORFeatures, mit dem man die Farbe des Untergrunds umkehren kann, so dass der Auswahlrahmen nie verschwinden kann.
Einlesen aus einem Stream direkt in das Grid
Das habe ich so nicht realisiert, weil die Dateiendung zur Formaterkennung nicht zur Verfügung steht. Stattdessen musst du das Workbook selbst aus dem Stream lesen, denn du weißt ja, in welchem Format die Daten in den Stream gekommen sind, und es per LoadFromWorkbook ans Grid übergeben. Wichtig ist hier, dass du das Workbook nicht selbst zerstören darfst, weil sich das Grid davon aus Performance-Gründen keine eigene Kopie erstellt. (Sehr glücklich bin ich über diese Konstruktion nicht...).
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
stream: TStream;
workbook: TsWorkbook;
begin
stream := TFileStream.Create('test.xls', fmOpenRead);
try
workbook := TsWorkbook.Create;
workbook.ReadFromStream(stream, sfidExcel8);
sWorksheetGrid1.LoadFromWorkbook(workbook, 0);
// Do not free workbook here, this will be done by the grid's WorkbookSource.
finally
stream.Free;
end;
end;
Der Zugriff auf die wesentlichen Daten kann nun genauso erfolgen wie bei einem StringGrid. Es gibt eine Property Cells, mit der man Zelldaten auslesen bzw. schreiben kann. In der Regel braucht man den Umweg über Worksheet und Workbook nicht mehr.
Siehe generell dazu die neue wiki-Seite http://wiki.lazarus.freepascal.org/TsWorksheetGrid