State.Contains(gdFixed) in DBGrid
-
Hallo zusammen,
ich versuche gerade das Aussehen eines DBGrids zu verändern. Klappt auch alles ganz gut im Datenteil.
Mein Problem: ich möchte in der Titelzeile in das Sortierfeld eine Grafik einbinden.
Ich habe aber keine Möglichkeit in diese fixierten Zellen zu gelangen. Nach BCB-Hilfe sollte das über State.Contains(gdFixed) gehen, aber OHNE Erfolg.
Hat jemand von euch einen Vorschlag?
vielen Dank
MG
-
Hallo
du must den OnDrawColumnCell-Event benutzten.
Dann kannst du abfragen, ob gerade eine feste Zelle gezeichnet wird.bis bald
akari
-
Ich benutze den OnDrawColumnCell-Event.
Aber der gdFixed-Ereigniss tritt nicht ein. (Hab es mit einer MSG-Box probiert), Aber seht selbst:
void __fastcall TFormularMainData::GridMainViewDrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { if (State.Contains(gdSelected)) { GridMainView->Canvas->Brush->Color = clNavy; GridMainView->Canvas->Font->Color = clCream; } if (State.Contains(gdFixed)) { Application->MessageBox("gdFixed","msg",MB_OK); } }
Der Teil mit "gdSelected" funktioniert!!!
Gruß MG
-
TStringGrid verwenden?!
http://community.borland.com/article/0,1410,20845,00.html
schonmal gegoogelt? gibts unzählige seiten zu dem thema!
-
Mit StringGrid funktioniert ja alles perfekt!
Es funktioniert NICHT im DBGrid!!!
Die VErwendung der einzelnen Komponenten sind mir schon bekannt
Gruß MG
-
Ausgehend von diesem Newsgroup-Beitrag musst du von TDBGrid ableiten, die DrawCell-Methode überschreiben und dort nach Bedarf die DrawFixedCell-Methode aufrufen.
-
hast du schon einmal so eine Methode überschrieben. Ich hab jetzt eine Stunde hin und her probiert - Aber alles schein nicht zu funktionieren.
Hast du da einen Code-Ansatz für mich?
Vielen Dank
MG
-
Du musst die Komponente ableiten und dort die entspr. Funktion überschreiben!
P.S. zeig erstmal Deinen Code-Ansatz
-
Hi,
hier mein Versuch:
Ich habe die Dateien Grid.hpp und DBGrids.hpp aus dem include-Verzeichnis des BCB in mein Projektverzeichnis kopiert.
Dann habe ich in der Datei Grid.hpp die OnDrawCell-Funktion erweitert.
Vorher:protected: DYNAMIC void __fastcall ColumnMoved(int FromIndex, int ToIndex); virtual void __fastcall DrawCell(int ACol, int ARow, const Types::TRect &ARect, TGridDrawState AState); DYNAMIC AnsiString __fastcall GetEditText(int ACol, int ARow); DYNAMIC void __fastcall SetEditText(int ACol, int ARow, const AnsiString Value); DYNAMIC void __fastcall RowMoved(int FromIndex, int ToIndex);
Nachher:
protected: DYNAMIC void __fastcall ColumnMoved(int FromIndex, int ToIndex); virtual void __fastcall DrawCell(int ACol, int ARow, const Types::TRect &ARect, TGridDrawState AState); { if (AState.Contains == gdFixed) and Assigned(fOnDrawFixedCell) { fOnDrawFixedCell(Self, ACol, ARow, ARect, AState ); } } DYNAMIC AnsiString __fastcall GetEditText(int ACol, int ARow); DYNAMIC void __fastcall SetEditText(int ACol, int ARow, const AnsiString Value); DYNAMIC void __fastcall RowMoved(int FromIndex, int ToIndex);
Aber das funktioniert leider nicht. Kann mir jemand helfen, da ich noch nie irgendwelche Klassen abgeleitet habe und mir dazu (denk ich mal und wird auch so sein ) das nötige Grundverständnis fehlt. Dieses Lücke möchte ich aber gern schließen und brauch dazu eure Hilfe!!!
1000 Dank
MG
-
Hallo
1. auf keinen Fall die Original-Dateien verändern!
2. zum Entwickeln von Komponenten kannst du hier nachlesen
http://bcb-tutorial.c-plusplus.net/index_old.html
allerdings solltest du vorher OOP-Grundlagen besitzen.bis bald
akari
-
Hallo,
ich habe das Problem jetzt anders gelöst:
Um eine kleine Grafik in den festen Teil des DBGrids einzufügen, prüfe ich im DrawColumnCell-Event die erste Datenreihe und schreibe das Bild dann nicht mit top = rect.top sondern mit einem festen Wert "2".ABER SEHT SELBST:
if (Column->FieldName == sort_field && MainView->RecNo == 1) { if (sort_desc > 0) { GridMainView->Canvas->Draw(Rect.Left+Rect.Width()-Master->SortDESC->Width-1, 2, Master->SortDESC->Picture->Graphic); } else { GridMainView->Canvas->Draw(Rect.Left+Rect.Width()-Master->SortASC->Width-1, 2, Master->SortASC->Picture->Graphic); } }
DANKE FÜR JEGLICHE HILFE VON EUCH
Viele Grüße
MG