Einzelne Einträge in TStringGrid farblich darstellen
-
hast du es ausprobiert?
-
ja hab ich ausprobiert und es geht nicht, deshalb wollt ich ja euch hier fragen wo ihr das machen würdet,
oder wie man das sonst lösen könnte.
Gruß
-
Hast du denn auch irgendwo ein DrawText() o.ä. stehen (vorzugsweise im OnDrawCell ;))?
Denn es reicht nicht, die gewünschten Buntstifte zurechtzulegen, es muss auch damit gezeichnet werden. Und zwar von dir selbst.
-
ja hab ich, hier nochmal der gesamte Quelltext:
in der Refresh Routine steht folgendes:
for(int i=0;i<CIRCUITS_NUMBER_OF;i++) { if(Circuits->Circuit[i]->Check()) { CircuitGrid->Cells[0][i+1]=AnsiString(" ")+AnsiString(i+1)+AnsiString("."); CircuitGrid->Cells[1][i+1]=AnsiString(Circuits->Circuit[i]->Name()); if((bSimpleDisplay&&Circuits->Circuit[i]->ShowOnSimpleWindow())||bSimpleDisplay==false) { CircuitGrid->Cells[2][i+1]=AnsiString(Circuits->Circuit[i]->Status()); char cTemp[10]; sprintf(cTemp,"%2.0f°C",Circuits->Circuit[i]->Required()); CircuitGrid->Cells[3][i+1]=AnsiString(cTemp); CircuitGrid->Cells[4][i+1]=AnsiString(Circuits->Circuit[i]->TmV->ValueText(0,false)); CircuitGrid->Cells[5][i+1]=AnsiString(Circuits->Circuit[i]->IstWert()); iCurrentCircuit=i; CircuitGrid->Repaint(); } else { CircuitGrid->Cells[2][i+1]=AnsiString(""); CircuitGrid->Cells[3][i+1]=AnsiString(""); CircuitGrid->Cells[4][i+1]=AnsiString(""); CircuitGrid->Cells[5][i+1]=AnsiString(""); } } else { for(int j=1;j<6;j++) CircuitGrid->Cells[j][i+1]=AnsiString(""); } }
im CircuitGridDrawCell, steht nun folgendes drin, so wie es mir von euch gesagt wurde:
if(Circuits->Circuit[iCurrentCircuit]->Check()) { if(Circuits->Circuit[iCurrentCircuit]->iCircuitType==0) CircuitGrid->Canvas->Font->Color=clRed; if(Circuits->Circuit[iCurrentCircuit]->iCircuitType==1||Circuits->Circuit[iCurrentCircuit]->iCircuitType==2) CircuitGrid->Canvas->Font->Color=clGreen; if(Circuits->Circuit[iCurrentCircuit]->iCircuitType==3) CircuitGrid->Canvas->Font->Color=clBlack; if(Circuits->Circuit[iCurrentCircuit]->iCircuitType==4) CircuitGrid->Canvas->Font->Color=clBlue; DrawText(CircuitGrid->Canvas->Handle, CircuitGrid->Cells[ACol][ARow].c_str(), -1, &Rect, DT_SINGLELINE | DT_VCENTER | 0); }
Hab ich noch was vergessen?
Gruß, unknown_2
-
zur Zeit tritt nämlich folgendes Problem auf:
es werden alle Einträge rot dargestellt, obwohl er im Programmcode auch die anderen Farben des "Stiften" zuweist und auch das DrawText() mit diesen Farben durchführt.
nutzt aber nix, leider.
habt ihr noch ne Idee?
-
Hast du das im Debugger verifiziert? Wenn du z.B. bei CircuitGrid->Canvas->Font->Color=clBlue; einen Haltepunkt setzt, wird der jemals erreicht?
Nebenbemerkung: so eine Abfrage schreit geradezu nach einem switch/case, zumindest gehört vor die nachfolgenden ifs in derselben Hierarchiestufe ein else.
-
Ja der Punkt wird erreicht, habs mitm Debugger ausprobiert,
das komische ist nur, aufgrund der Einstellungen meiner Daten wird zuerst der Rote, dann der Grüne ausgewählt und zum schluss nochmal der Rote, das würde ja soweit noch passen, nur es ist dann eben alles Rot?Gruß
-
Vielleicht solltest du dich nocheinmal etwas genauer mit den Parametern, die OnDrawCell übergeben werden, beschäftigen. Zudem würde ich die Repaint-Methode nach der for-Schleife in der Refresh-Funktion aufrufen.
-
wieso was passt damit nicht? und was würde es mir bringen wenn ich das ganze nachher aufrufe, ausser dass ich noch eine for schleife brauche, die die einzelnen circuits wieder durchläuft und abfragt in welcher Farbe er dargestellt werden soll?
-
Ok:
1.) OnDrawCell wird (wie der Name schon sagt, es heißt ja nicht "OnDrawCells") für jede Zelle aufgerufen. In ACol und ARow steht, welche Zeile das ist.2.) Mittels Repaint zeichnest du das komplette StringGrid (d.h. alle Zellen) neu. Deswegen zuerst dein Refresh, und dann das Repaint um das Grid komplett neu zu zeichnen. Dabei greifst du dann nicht mehr über iCurrentCircuit sondern über ACol/ARow oder was du brauchst auf dein Array zu.
-
hey super jetzt zeichnet er mir die Zeilen in versch. Farben so wie ichs haben will,
nur:
macht er nach den Strings immer ein Klammer hin und diese auch noch in Blau???
Hast du dazu auch ne Idee?
DANKE soweit mal
-
hab rausgefunden was das ist, das ist noch von dem alten unformatierten Text, der da anscheinden ne größere Schriftart eingestellt hat. Hab jetzt einfach die standardschrift im F11 Menü auf clWhite gestellt und jetzt gehts.
DAnke für die Hilfe an alle