StringGrid farbige Zellen



  • Hallo,

    (Hallo Jansen)

    dein Beitrag in der FAQ
    [url] StringGrid - farbige Zellen/Zeilen [/url]

    ...

    // gerade Zeilen Dunkelgrau, aber nicht die feste(n) Zeile(n) oben
      else if (ARow % 2 && ACol >= StringGrid1->FixedCols)
      {
        StringGrid1->Canvas->Brush->Color = clGray;
        StringGrid1->Canvas->Font->Color = clWhite;
      }
    

    ... festen Zeilen...
    Bei mir ist immer nur die erste Zeile so geblieben, obwohl ich zwei FixedRow eingestellt habe. Ich habe schon alles probiert, aber keine Lösung gefunden.
    Ich möchte meine festen Zellen so lassen und dann die nächsten zwei grau dann wieder zwei weiß , zwei grau usw.
    Wie muss ich denn Code dann ändern, damit es so geht???

    danke für die Hilfe



  • guggst du hier.

    ob eine zelle fix ist oder nicht, bekommst du durch auswerten von State.

    // ist zelle die gezeichnet werden soll eine fixe zelle?
    if (State.Contains(gdFixed))
    {
      // blahblah
    }
    

    ggf. sollte jansen sein beispiel darauf hin einmal anpassen. auch finde ich es nicht passend die alignments mit zahlen anzugeben, wo es doch dafür DT_LEFT, DT_RIGHT, DT_CENTER gibt, welche man auch noch in einem halben jahr deuten kann. nur so als anregung. 😉



  • Guter Tip mit gdFixed, ich hätte sonst bestimmt noch jeweils eine zusätzliche Abfrage ala ARow >= StringGrid1->FixedRows eingebaut. 🙂

    Was das halbe Jahr betrifft, ich gehe mal davon aus, dass der Kommentar auch dann noch dort stehen wird. 😉



  • danke euch...



  • Hallo zusammen,

    ich habe immer noch das obengenannte Problem.
    Die StringGrid Zellen farbig zu machen, aber jeweils immer zwei zusammenhängende , dann wieder zwei frei, dann wieder zwei farbig usw.
    Ich habs schon mit verschiedenen swtich,case Anweisungen versucht, aber ohne Erfolg. 😕 Gibt es da nicht eine Lösung, kann mir bitte jemand mal auf die Sprünge helfen??
    Danke und einen schönen Sonntag



  • Korrektur:

    ich meine zwei zusammenhängende Zeilen.

    zb: Zeile 2 und 3 grau
    Zeile 4 und 5 weiss
    Zeile 6 und 7 grau
    usw.



  • void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
      if (!(ARow % 4) || !((ARow - 1) % 4)) // 
      {
        StringGrid1->Canvas->Brush->Color = clGray;
        StringGrid1->Canvas->Font->Color = clWhite;
      }
      StringGrid1->Canvas->FillRect(Rect);
    }
    

    Erklärung: zwei graue/zwei weisse Zeilen macht zusammen jeweils 4 Zeilen. ARow modulo 4 gibt 0 bzw. false zurück, wenn die Zeilennummer ohne Rest durch 4 teilbar ist. Es wird also geprüft, ob wir uns in einer "vierten Zeile" befinden oder ob die vorherige Zeile eine "vierte Zeile" ist.

    Das ist aber ein reines Logikproblem und hat eigentlich nicht direkt mit dem StringGrid zu tun. 😉



  • @Jansen,

    Logikproblem, hast ja Recht, aber manchmal dreht man sich einfach im Kreis und kommt nicht auf die einfachsten Lösungen.
    Ich werde es gleich mal ausprobieren. Danke 🙂


Anmelden zum Antworten