Werte von DBGrid ändern
-
Bernd22 schrieb:
funktioniert bei mir nicht, habe auch folgendes ausprobiert:
DBGrid1->Canvas->Font->Color = clRed; DBGrid1->Canvas->TextRect(Rect,Rect.Left +2, Rect.Top +2,Field->AsString);
was mache ich falsch? gibt es keine andere möglichkeit wie über diese Methode?
Aber rot wird der Text im DB Grid angezeigt? bzw. wo ist deine Entschlüsslungsfunktion?
-
void __fastcall TForm3::DBGrid1DrawDataCell(TObject *Sender, const TRect &Rect, TField *Field, TGridDrawState State) { DBGrid1->Canvas->Font->Color = clRed; DBGrid1->Canvas->TextRect(Rect,Rect.Left +2, Rect.Top +2,Form3->encrypt(AnsiString(Field->AsString).c_str())); }
Hier der komplette Quellcode, der Text ist weiterhin schwarz!
Die Entschlüsselungsfunktion hab ich mit Form3->encrypt eingebaut, jedoch zeigt er mir weiterhin den Inhalt verschlüsselt an.
-
Und deine encrypt Funktion hat auch einen AnsiString Rückgabewert ?
Weil du übergibst ja einen c_str() an deine Funktion nicht das du
nur den Inhalt des c_str() änderst, denn das bringt nichts.
-
Hier meine Funktion:
char* TForm3::encrypt(char *text){ char *str; int i = strlen(text); char *c = text; for(int a = 0; a < i; a++){ text[a] = text[a] ^ 0x77; if(text[a] == '\'') ShowMessage("Hochkomma"); } return text; }
habe Sie mit Werten getestet, daran könnte es nicht liegen
-
Böse Böse zeiger geschupse und zu letzt als Rückgabe einen Zeiger auf einen gecasteten AnsiString.
Form3->encrypt(AnsiString(Field->AsString).c_str())); char* TForm3::encrypt(char *text)
verwende lieber sowas in der art:
AnsiString TForm3::encrypt(AnsiString text) { char *c = text.c_str(); for(int a = 0; a < text.Length(); a++){ c[a] = c[a] ^ 0x77; if(c[a] == '\'') ShowMessage("Hochkomma"); } return c; }
-
danke, mein Problem ist leider damit nicht gelöst ;). hast vll noch ne idee was ich falsch mache?
-
Du keine Ahnung was du falsch machst den
void __fastcall TFormDispo::DBGrid1DrawDataCell(TObject *Sender, const TRect &Rect, TField *Field, TGridDrawState State) { DBGrid1->Canvas->Font->Color = clRed; DBGrid1->Canvas->TextRect(Rect, Rect.Left +2, Rect.Top +2, "TEST"); }
klappt zB wunderbar
Versuch doch mal mit dem Debugger zu schauen ob wirklich deine Funktion einen Rückgabewert zurück gibt, denn wenn nichts zurück kommt kann logischerweise auch nichts gezeichnet werden
DBGrid1->Canvas->Font->Color = clRed; AnsiString Test = Form3->encrypt(AnsiString(Field->AsString).c_str()); DBGrid1->Canvas->TextRect(Rect,Rect.Left +2, Rect.Top +2, Test );
-
hm ich habe ein BreakPoint in die DBGrid1DrawDataCell Funktion gesetzt und er haltet dort nicht. Er läd mir zwar zwei Zeilen in das DBGrid von der Datenbank, jedoch springt er nie in diese Funktion rein! Denke der Fehler kommt nicht von der Verschlüsselungsfunktion!
-
Dann setzt mal DefaultDrawing auf false im DBGrid
-
hab ich gemacht, jedoch zeigt er mir nur 3 leere Zeilen an, auch wenn ich folgendes mache:
DBGrid1->Canvas->TextRect(Rect,Rect.Left +2, Rect.Top +2, "test");
-
Hast wieder mit dem Debugger überprüft ob er in das Ereignis DBGrid1DrawDataCell springt?
-
ja macht er nicht
-
danke mal für deine Mühe VergissEs !
habe jetzt herausgefunden warum es nicht geht. ich hatte im Strukturfenster Coloumns zu DBGrid1 hinzugefügt, also Spalten. Sobald nur eine Spalte erstellt wurde, springt er mir nicht mehr in die Zeichenfunktion.Wie kann ich auch mit Coloumns die funktion zum laufen bekommen? Und wie kann ich coden das er nur bei Spalte "Name", die Zeichenfunktion verwendet?
-
vieleicht hilft dieser Link, da gehts zwar primär um das Ändern der Schriftfarbe, aber das ist sehr gut für deine Wünsche anpassbar
-
Bernd22 schrieb:
Wie kann ich auch mit Coloumns die funktion zum laufen bekommen? Und wie kann ich coden das er nur bei Spalte "Name", die Zeichenfunktion verwendet?
Versuch mal statt DrawDataCell DrawColumnCell zu verwenden evtl. klappt es dann.
-
VergissEs schrieb:
Versuch mal statt DrawDataCell DrawColumnCell zu verwenden evtl. klappt es dann.
ja danke dann gehts! nur weiß ich nicht wie ich den Wert abfange, bei DrawDataCell ist das ja Field->AsString
-
ah okay habe es selber rausgefunden:
Column->Field->AsString
nun funktioniert alles wie ich es haben wollte :), vielen dank VergissEs !!