TExtendedStringGrid




Das Grid ist nur für BCB 6. Borland ist hier wohl nicht abwärtkompatibel.

Leider sind gute professionelle Grids teuer bzw. schwer zu finden. Schöne Grids bietet die Firma TMS-Software.Diese Grids kann man dort auch downloaden. Da es sich um Demo-Komponenten handelt, sind Hinweise auf die Firma im Grid zu sehen.

Beim Umstieg von BCB 4 auf BCB 6 mußte ich feststellen, dass das von mir favorisierte Grid nicht mehr im BCB 6 läuft. Überhaupt ist festzustellen, dass viele in Delphi geschriebene Komponenten nicht mehr im BCB 6 laufen. Was hier Borland macht ist mir ziemlich unklar (Auch der Support ist wohl der schlechteste den man sich vorstellen kann).

Nun es hat mich also gereizt selbst mal so eine Grid-Komponente zu schreiben. Die Arbeit an der vorliegende Komponente ist noch nicht beendet . Zur Zeit hat die Komponete die gleichen Eigenschaften wie die StringGrid Komponente kann aber zusätzlich:

Leider gibt es keine Klasse TCustomStringGrid. So muß das Grid von TCustomDrawGrid abgeleitet werden, da sonst prinzipiell alle Eigenschaften und Methoden public sind, ohen dass man sie ausblenden könnte. So steht das Ereigniss ONDRAWCELL nicht mehr zur Verfügung. Die Komponente übernimmt jetzt wegen der Ausrichtung generell das Zeichnen der Zellen. Asi diesem Grunde ist die Eigenschaft DEFAULTDRAWING ebenso nicht mehr vorhanden. Beide können ohne Probleme in der Komponente wieder sichtbar gemacht werden, aber einer kann nur für die Ausgabe sorgen.

Die Methoden CELL, COLS und ROWS wurden wie im BCB StringGrid implementiert.

Hier wie immer die Liste der zusätzlichen Eigenschaften (__published) und Methoden (public)

TExtendedStringGrid
__published: __property TExt_Align TextAlign Generelle Ausrichtung aller Zellen im Grid:
algLeft = Links
algCenter = Mitte
algRight = Rechts
 
  __property TExt_Align TextFixedCol Ausrichtung der festen Spalten:
algLeft = Links
algCenter = Mitte
algRight = Rechts
 
  __property TExt_Align TextFixedRow Ausrichtung der festen Zeilen:
algLeft = Links
algCenter = Mitte
algRight = Rechts
 
  __property Graphics::TFont* FontFixedCols Font der festen Spalten
 
  __property Graphics::TFont* FontFixedRows Font der festen Zeilen
 
  __property Graphics::TFont* Font2 freier Font. Für direkte Vorgabemethoden im Abschnitt public
 
  __property TStringList* FixedColsText Text der festen Spalten
 
  __property TStringList* FixedRowsText Text der festen Zeilen
 
  __property TColor SortBitmapColor Gibt die Farbe an, mit der die Pfeile angezeigt werden, die die Sortierungsrichtung anzeigen
 
  __property TColor SelectedCellColor Gibt die Farbe an, mit der die selektierten Zellen gezeichnet werden
 
public: void __fastcall TextAlignCol(int ACol,TExt_Align alg,bool fixed=false); Die Spalte ACol bekommt die in TExt_Align angegebene Ausrichtung. Der boolsche Parameter fixed gibt an, ob dies auch für die festen Spalten gelten soll (vorgegeben false = nein)
 
  void __fastcall TextAlignRow(int ARow,TExt_Align alg,bool fixed=false); Die Zeile ARow bekommt die in TExt_Align angegebene Ausrichtung. Der boolsche Parameter fixed gibt an, ob dies auch für die festen Zeilen gelten soll (vorgegeben false = nein)
  void __fastcall TextAlignCell(int ACol, int ARow,TExt_Align alg); Die Zelle an Spalte ACol, Zeile ARow bekommt die in TExt_Align angegebene Ausrichtung.
 
  void __fastcall FontCol(int ACol,TExt_Font fnt, bool fixed);

void __fastcall FontCol(int ACol,Graphics::TFont *fnt, bool fixed);
Die Spalte ACol bekommt den in TExt_Font angegebenen Font.
fntText = Standardfont
fntRows = Font der Zeilen
fntCols = Font der Spalten
fntFont2 = freier Font
Der boolsche Parameter fixed gibt an, ob dies auch für die festen Spalten gelten soll (vorgegeben false = nein).Wird die mit Graphics::TFont *fnt überladene Funktion angewandt so kann ein Zeiger auf TFont übergeben werden.
 
  void __fastcall FontRow(int ARow,TExt_Font fnt, bool fixed);

void __fastcall FontRow(int ARow,Graphics::TFont *fnt, bool fixed);
Die Zeile ARow bekommt den in TExt_Font angegebenen Font.
fntText = Standardfont
fntRows = Font der Zeilen
fntCols = Font der Spalten
fntFont2 = freier Font
Der boolsche Parameter fixed gibt an, ob dies auch für die festen Spalten gelten soll (vorgegeben false = nein)Wird die mit Graphics::TFont *fnt überladene Funktion angewandt so kann ein Zeiger auf TFont übergeben werden.
 
  void __fastcall FontCell(int ACol, int ARow, TExt_Font fnt);

void __fastcall FontCell(int ACol, int ARow, Graphics::TFont *fnt);
Die Zelle an Spalte ACol, Zeile ARow bekommt den in TExt_Font angegebenen Font.
fntText = Standardfont
fntRows = Font der Zeilen
fntCols = Font der Spalten
fntFont2 = freier Font
Wird die mit Graphics::TFont *fnt überladene Funktion angewandt so kann ein Zeiger auf TFont übergeben werden.
 
  void __fastcall ClearGrid(); Löscht das komplette Grid
 
  bool __fastcall SaveAsCSV(String fname, String sep="#"); Speichert das Grid in eine Datei. fname enthält den Pfad und Namen der Datei. Der String sep gibt an, mit welchem Zeichen die einzlenen Werte getrennt werden (Vorgabe ist das Gatter). Jede Zeile wird durch einen Zeilenumbruch gekennzeichnet. Der boolsche Rückgabewert zeigt an, ob die Funktion erfolgreich war.
 
  bool __fastcall LoadFromCSV(String fname, String sep = "#", bool clear=false); Liest eine gespeicherte Datei wieder ein. Die Vorgabe des korrekten Trenner ist zu beachten (Vorgabe ist das Gatter). Über clear kann bestimmt werden, ob vor dem Laden die Tabelle gelöscht wird. Der boolsche Rückgabewert zeigt an, ob die Funktion erfolgreich war.
 
  bool __fastcall SaveAsHTML(String fname); Speicher die Tabelle als HTML-Seite mit allen erforderlichen Tags. Jedoche werden keine Tabllen-Attribute gesetzt.
 
  void __fastcall DeleteRow(int ARow, int Anzahl); Löscht ab der Zeile ARow die angebene Anzahl von Zeilen. Dabei muß Anzahl mindestens 1 betragen, 0 löscht keine Zeile
DeleteRow(3,1) = Löschen der Zeile 3
DeleteRow(3,3) = Löschen der Zeile 3,4,5
 
  void __fastcall DeleteCol(int ACol, int Anzahl); Löscht ab der Zeile ACol die angebene Anzahl von Spalten. Dabei muß Anzahl mindestens 1 betragen, 0 löscht keine Spalte
DeleteCol(3,1) = Löschen der Spalte 3
DeleteCol(3,3) = Löschen der Spalte 3,4,5
 
  void __fastcall InsertRow(int ARow, int Anzahl); Fügt vor der in ARow angegebenen Zeile Anzahl Zeilen ein. Dabei muß Anzahl mindestens 1 betragen, 0 fügt keine Zeile ein
 
  void __fastcall InsertCol(int ACol, int Anzahl); Fügt vor der in ACol angegebenen Spalte Anzahl Spalten ein. Dabei muß Anzahl mindestens 1 betragen, 0 fügt keine Spalte ein
 
  bool __fastcall SortCol(int ACol, TExt_SortDirection direction, TExt_SortType type, bool sensitive=true); Das Grid wird nach Spalte ACol sortiert. Dabei wird in direction folgende Reihenfolge vorgegeben:
sortAscending = aufwärts Aufwärts
sortDescending = abwärts Abwärts

In type wird die Art der Sortierung festgelegt:
sortAsString = nach String
sortAsNumber = nummerisch
sortAsDate = nach Datum
sortAsCustom = Benutzerdefinierte Sortierung

Wird "nach Strings" sortiert kann mit sensitive angegeben werden, ob Groß-/Kleinschreibung berücksichtigt werden soll.
Der Rückgabewert zeigt an, ob die Sortierung erfolgreich durchgeführt wurde
 
  bool __fastcall SetCheckBox(int ACol, int ARow, TExt_CBType Type, bool State); Setzt in der Zelle mit der Spalte ACol und der Reihe ARow eine CheckBox vom Typ
Square off / Square on = cbSquare
Circle off / Circle on = cbCircle
und dem Status State
true = checked
false = nicht checked
Der Rückgabewert zeigt an, ob das setzen der Checkbox erfolgreich war. In festen Zeilen oder Spalten kann keine Checkbox gesetzt werden.
 
  bool __fastcall GetCheckboxState(int ACol, int ARow); Gibt den Status einer Checkbox mit der Spalte ACol und der Reihe ARow zurück:
true = checked
false = nicht checked
 
  void __fastcall DeleteCheckBox(int ACol, int ARow); Löscht die CheckBox ist der Zelle mit der Spalte ACol und der Reihe ARow
 
  void __fastcall TExtendedStringGrid::ColPrefix(int ACol, String value) Setzt für jede Spalte (ACol) ein Prefix (value) zur Anzeige
 
  void __fastcall TExtendedStringGrid::RowPrefix(int ARow, String value) Setzt für jede Reihe (ARow) ein Prefix (value) zur Anzeige
 
Ereignisse    
  virtual void __fastcall CustomSort(int& Result, String a, String b); Benutzerdefinierte Sortierung
 
  virtual void __fastcall FixedRowClick(int ARow, int ACol); Diese Ereignisse werden ausgelöst, wenn auf eine feste Reihe oder Spalte geklickt wird. Weiterhin wird zusätzlich das Ereignis OnMouseDown weiterhin ebenfalls ausgelöst. Die Parameter geben die Reihe und Spalte an, auf die geklickt wurde.
   
  virtual void __fastcall FixedColClick(int ARow, int ACol);
 
  virtual void __fastcall CheckBoxClick(int ARow, int ACol); Wird eine Zelle mit einer CheckBox angeclickt, wird dieses Ereignis ausgelöst. Die Zelle wird übermittelt.

Benutzerdefinierte Sortierung

Sofern eine Sortierung nach String, nummerisch oder Datum nicht gewünscht ist, können eigene Sortierkirterien vorgegeben werden. Dazu ist dem Aufruf der Sortierung SortCol beim Typ sortAsCustom vorzugeben. Durch die Vorgabe dieses Typs wird beim Sortieren ein Ereignis (OnCustomSort) ausgelöst. Das Ereignis OnCustomSort wird dabei jedes mal dann ausgelöst, wenn zwei Strings der Spalte sortiert werden müssen.Der Routine werden die beiden zu sortierenden Strings übergeben (a und b). Die Routine muß die Entscheidung treffen welcher der beiden Strings zuerst kommt. Dazu ist die dem Ereignis mitübergebende Variable Result zu setzen:

Zum sortieren wird Quicksort genutzt.

Font's und Colors

Die Einstllung der genutzen Schrift und Farbe erfolgt über ein TFont-Objket.Für das Grid stehen im Objektinspektor 3 TFont-Objekte zur Verfügung:

Desweiteren sind die Methoden

wie der obigen Aufstellung zu entnehmen ist überladen. Es kann ein Aufruf mit
fntText = Standardfont
fntRows = Font der Zeilen
fntCols = Font der Spalten
fntFont2 = freier Font
erfolgen, wobei die im Objektinspektor eingestellten Werte genutzt werden. Oder im Programm selber kann ein TFont-Objekt erzeugt werden, und dieses übergeben werden.

TFont*myfont=new TFont();
myfont->Color=clGreen;
myfont->Name="Steve Regular";
ExtendedStringGrid1->FontCol(2,myfont,false);
ExtendedStringGrid1->FontRow(2,myfont,true);
ExtendedStringGrid1->FontCell(3,3,myfont);

Die Kommentare in dem Source-File wurden mit dem Kommentator erzeugt


Download

TExtendedStringGrid 90 KB
Zur Installation unter Datei -> Öffnen die *.bpk Datei öffnen, das Projekt compilieren und installieren oder das Package (BPL-Datei) installieren

Revision

29.05.2005 Optimierung der Vergrößerung und Verkleinerung von Reihen und Spalten in Zusammenarbeit mit Bodo
11.01.2003 Sofern eine Spalte sortiert wird, wird die Sortierrichtung durch ein grafisches Symbol dargestellt. Da jetzt zusäzliche *.res Dateien erforderlich sind, wird das gesamte Projekt einschließlich BPK-Datei ausgeliefert.
Benutzerdefinierte Sortierung möglich.
12.01.2003 Die Ereignisse OnFiixedRowClick und OnFixedColClick eingeführt
19.01.2003 Fontzuweisung per externen Zeiger. Methoden überladen
23.01.2003 Editieren möglich, Checkboxen eingeführt, Farbe der slektierten Zellen kann gesetzt werden
25.01.2003 Die Eigenschaften einer Zelle (Ausrichtung, Font, Checkbox) werden beim Sortieren mitsortiert
29.01.2003 Prefixe für Zeilen und Spalten eingeführt
23.05.2003 RES-Datei includiert, braucht nicht mehr extra eingebunden zu werden
25.05.2003 Fehler beim sortieren & beim Ereignis OnRow- OnColClick behoben
09.06.2003 Fehler bei RowCount beseitigt