TStringGrid -> Text zentrieren und Farben ändern



  • Hallo,

    ich möchte gern in allen meinen Spalten eines TStringGrid den Text zentrieren und für vereinzelte Spalten die Textfarbe ändern.
    Im Netz hab ich schon etwas gefunden, was aber leider nicht funktioniert.

    void __fastcall TMainForm::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
        if ((ACol == 1) || (ACol == 2)) {
    
            StringGrid1->Canvas->Font->Color = clRed;
        }
    }
    

    Warum werden hier die Texte der entsprechenden Spalten nicht in clRed dargestellt?
    Zudem habe ich noch eine Frage:
    Wie schaffe ich es, dass Zahleneinträge mit führenden Nullen auch mit führenden Nullen im TStringGrid angezeigt werden.
    Wenn ich einem Label ("%08X", 0) als Caption gebe zeigt der mir zum Beispiel alle 8 Nullen - das TStringGrid zeigt aber nur eine 0. 😕

    vielen Dank
    bye Saxony



  • Du musst nicht nur die Farbe angeben sondern auch die ganze Zelle selbst malen

    void __fastcall TMainForm::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
    
        if ((ACol == 1) || (ACol == 2)) {
    
            StringGrid1->Canvas->Font->Color = clRed;
            StringGrid1->Canvas->FillRect(Rect); //Zelle übermalen
            StringGrid1->Canvas->TextOut(Rect.Left+2, Rect.Top+2, StringGrid1->Cells[ACol][ARow]);
    
        }
    }
    


  • doppelt



  • Hallo,

    also auch mit

    StringGrid1->Canvas->Font->Color = clRed; 
    StringGrid1->Canvas->FillRect(Rect);
    StringGrid1->Canvas->TextOut(Rect.Left+2, Rect.Top+2, StringGrid1->Cells[ACol][ARow]);
    

    habe ich leider keinen roten Text. 😞

    bye Saxony



  • Default Drawing des StringGrid hast Du auch auf false gestellt?
    Du mußt dann natürlich alle Datenzellen selbst zeichnen.



  • Hallo

    es ist nicht nötig DefaultDrawing auf false zusetzen.
    Ich vermute eher die Methode StringGrid1DrawCell ist nicht für den Event des StringGrids eingetragen. Überprüf das mal mit dem Objektinspektor

    bis bald
    akari



  • Aha akari hat den Finger drauf. 🙂

    Jetzt gehts 🙂

    bye Saxony



  • akari schrieb:

    es ist nicht nötig DefaultDrawing auf false zusetzen.

    Und wieder was gelernt. Dann vermute ich, ist auch der zweite Teil meines Posts falsch. Ausprobiert habe ich es allerdings nicht.



  • Hallo,

    ich bins nochmal.

    Eine Frage ist ja noch übrig. Wie zentriere ich dann meinen Text in einer Spalte?
    Mir würde es auch reichen, wenn jemand weiß wie ich die Länge (in Pixel) eines Strings bestimmen kann.

    mfg Saxony



  • Hallo

    siehe TCancas::TextWidth.
    Damit kannst du die Breite des Textes in den aktuellen Einstellungen des Canvas-Fontes bestimmen, und damit den Text per Rechung zentrieren.

    bis bald
    akari



  • alternativ geht auch ein Blick in die FAQ -> StringGrid -> farbige Zellen/Zeilen



  • Hallo,

    funktioniert einwandfrei. *rumhüpp*
    Vielen Dank nochma an alle.

    bye Saxony


Anmelden zum Antworten