DBCheckBox oder Bitmap im DBGrid für wahr/falsch
-
Hallo,
habe letztens mal herumexperimentiert, um eine dbcheckbox in einem dbgrid zu bekommen, anstelle des "wahr/falsch". leider klappt es irgendwie nicht vernünftig.
hier mein code beispiel:
void __fastcall TfrmVerwaltung::dbMitgliederDrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { TColor BackColor,FontColor; TDBGrid* dbg=dynamic_cast<TDBGrid *>(Sender); try { //nur zum einfärben der Checkbox spalten if(Column->Field->DataType == ftBoolean) { BackColor = StringToColor(IntToStr(0x00f8f8f8)); FontColor = StringToColor(IntToStr(0x00000000)); dbMitglieder->Canvas->Brush->Color = BackColor; dbMitglieder->Canvas->Font->Color = FontColor; } dbMitglieder->DefaultDrawColumnCell(Rect,DataCol,Column,State); if(DataCol == SortColumn && SameColumn == 1) { dbg->Canvas->Draw(Rect.right - bmpSortUp->Width - 2 , 5 , bmpSortUp); } else if(DataCol == SortColumn && SameColumn == 0) { dbg->Canvas->Draw(Rect.right - bmpSortUp->Width - 2 , 5 , bmpSortDown); } if(Column->Field->DataType == ftBoolean && tblMitglieder->RecordCount != 0) { dbcmbMitglieder->DataField = Column->Field->FieldName; UINT Checked = (Column->Field->AsBoolean && !Column->Field->IsNull ? DFCS_BUTTONCHECK | DFCS_CHECKED : DFCS_BUTTONCHECK); TRect DrawRect; if (State.Contains(gdFocused)) { if (Column->Field->FieldName == dbcmbMitglieder->DataField) { dbcmbMitglieder->Left = Rect.Left + dbg->Left + 2; dbcmbMitglieder->Top = Rect.Top + dbg->Top + 2; dbcmbMitglieder->Width = Rect.Right - Rect.Left; dbcmbMitglieder->Height = Rect.Bottom - Rect.Top; dbcmbMitglieder->Visible = True; } } else { if (Column->Field->FieldName == dbcmbMitglieder->DataField) { DrawRect=Rect; InflateRect(&DrawRect,-1,-1); dbg->Canvas->FillRect(Rect); DrawFrameControl(dbg->Canvas->Handle, &DrawRect, DFC_BUTTON, Checked); } } } } catch(...) {} }diese beispiel klappt leider nicht immer. irgendwie bleibt er an dieser stelle hängen, nur warum ist mir ein rätsel:
if(Column->Field->DataType == ftBoolean)mir würde es völlig ausreichen, wenn ich zwei bitmaps anstelle der wahr/falsch werte bekommen könnte. die methode fände ich auch wesentlich besser, weil sie mir gleich das zeichnen in gewissen zellen aufzeigen kann.
könnte mir jemand ein solches beispiel (bitmaps, je nach true/false wert) zeigen? und auch so, dass es völlig egal ist, wieviele boolean spalten angezeigt werden? das umschalten von wahr/falsch bekomme ich selber leicht hin, dazu brauche ich nicht unbedingt die checkboxfunktionalität. mir geht es in erster linie um das aussehen.
danke im voraus!
gruß gerd
-
Hallo Leute,
brauche keine Hilfe mehr, habe alle Fehler selber lokalisiert. Ebenfalls habe ich es hinbekommen eine Grafik als Anzeige für Wahr/Falsch einträge anzuzeigen.
Gruß Gerd
-
BackColor = StringToColor(IntToStr(0x00f8f8f8)); FontColor = StringToColor(IntToStr(0x00000000));args, davon bekommt man ja augenkrebs! ineffizienter gehts glaub ich kaum noch!
BackColor = (TColor) 0x00f8f8f8; FontColor = (TColor) 0x00000000; // entspr.: FontColor = clBlack;
-
ich weiss, dass es so klappt, aber die warnings regen mich auf.

gruß gerd
-
da kommt kein warning!
-
etwas C++ konformer
BackColor = static_cast<TColor>(0x00f8f8f8); FontColor = static_cast<TColor>(0x00000000);
-
gerd01 schrieb:
brauche keine Hilfe mehr, habe alle Fehler selber lokalisiert. Ebenfalls habe ich es hinbekommen eine Grafik als Anzeige für Wahr/Falsch einträge anzuzeigen.
Es gehört zum guten Ton, auch selbstgefundene und/oder triviale Lösungen mitzuteilen.