farbige Zeile in einer Stringgrid
-
Hallo,
nutze folgender Code, um Zeilen im StringGrid farbig dazustellen.
Wenn zB. eine Fehlermeldung kommt, stelle ich diese Zeilen rot da.
Problem, beim scrollen werden danach alle Zeilen rot dargestellt.
Frage: muß ich in einem Speicher die Farbwerte zwischenspeichern, oder lößt man dies anderst ?// if (StringGridFarbIndex > 0) { // StringGridFarbIndex > 0 // switch (StringGridFarbIndex) { // switch (StringGridFarbIndex) // case 1: case 2: case 3: case 4: { // case 1 // Standardfarben für selektierte Zelle(n) if (State.Contains(gdSelected)) { StringGrid1->Canvas->Brush->Color = clHighlight; StringGrid1->Canvas->Font->Color = clHighlightText; } // gerade Zeilen Dunkelgrau, aber nicht die feste(n) Zeile(n) oben else if (ARow % 2 && !State.Contains(gdFixed)) { StringGrid1->Canvas->Brush->Color = clGray; StringGrid1->Canvas->Font->Color = clWhite; } // gerade Spalten Hellgrau, aber nicht ... links else if (ACol % 10 && !State.Contains(gdFixed)) { StringGrid1->Canvas->Brush->Color = clMedGray; //clSilver; StringGrid1->Canvas->Font->Color = clWhite; } // Zelle 2/2 Gelb else if (ACol == 2 && ARow == 2) { // StringGrid1->Canvas->Brush->Color = clYellow; // StringGrid1->Canvas->Font->Color = clBlack; } // // break; } // case 1 // // case 100: { // case 100 // Standardfarben für selektierte Zelle(n) if (State.Contains(gdSelected)) { StringGrid1->Canvas->Brush->Color = clRed; //clHighlight; StringGrid1->Canvas->Font->Color = clHighlightText; } // gerade Zeilen Dunkelgrau, aber nicht die feste(n) Zeile(n) oben else if (ARow % 2 && !State.Contains(gdFixed)) { StringGrid1->Canvas->Brush->Color = clRed; //clGray; StringGrid1->Canvas->Font->Color = clWhite; } // gerade Spalten Hellgrau, aber nicht ... links else if (ACol % 10 && !State.Contains(gdFixed)) { StringGrid1->Canvas->Brush->Color = clRed; //clMedGray; //clSilver; StringGrid1->Canvas->Font->Color = clWhite; } // Zelle 2/2 Gelb else if (ACol == 2 && ARow == 2) { // StringGrid1->Canvas->Brush->Color = clYellow; // StringGrid1->Canvas->Font->Color = clBlack; } // // break; } // case 100 // } // switch (StringGridFarbIndex) // // Farben festlegen: // Zelle endlich zeichnen StringGrid1->Canvas->FillRect(Rect); // noch ein Gimmick für die Textausrichtung int hAlign; // text align, 0/1/2 - Left/Center/Right if (ACol % 2) { hAlign = 1; } else { hAlign = 2; } hAlign = 0; // und zum Schluss den Text in die Zelle malen DrawText(StringGrid1->Canvas->Handle, StringGrid1->Cells[ACol][ARow].c_str(), -1, &Rect, DT_SINGLELINE | DT_VCENTER | hAlign); // } // StringGridFarbIndex > 0 // //
Gruß Siegfried
-
Beppo schrieb:
Frage: muß ich in einem Speicher die Farbwerte zwischenspeichern, ...
Ja. Du könntest dafür die Eigenschaft Objects benutzen, die es für jede Zelle gibt.
-
Hallo,
wie muß ich dies machen ?
Gruß Siegfried
-
schau in die BCB-Hilfe
TStringGrid::Objects
-
Hallo
siehe BCB Hilfe zu TStringGrid::Rows::Objects.
bis bald
akari
-
Hallo,
komme mit der Hilfe nicht weiter. wer kann mir helfen ?
Gruß Siegfried
-
Hallo
/// schreibt und liest einen Farbwert in den Object-Speicher der Zelle in Zeile 1, Spalte 2 TColor color = clRed; StringGrid->Rows[1]->Objects[2] = reinterpret_cast<TObject*>(color); ... color = reinterpret_cast<TColor>(StringGrid->Rows[1]->Objects[2]);
Das solltest du natürlich nur so machen, wenn du auch Objects nicht andersweitig benutzt.
bis bald
akari
-
Hallo,
alles erledig, vielen Dank für eure Hilfe
Gruß Siegfried
-
Alternativ könntest du auch einfach den Text der zu zeichnenden Zelle auf entsprechende Schlüsselwörter hin auswerten, also z.B. bei "Fehler: blabla" rot zeichnen etc.