Announcement

Collapse
No announcement yet.

DBGrid und boolesche Felder

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DBGrid und boolesche Felder

    Hallo,

    Konfig.: Delphi 6 Upd #1, MS SQL 2000, ADO

    Eine Frage an Design-Gurus unter Euch:<br>
    Wie sollen (können) boolesche Felder in einem DBGrid am besten (sinnvollsten) umgesetzt werden? Sinnvoll wäre einfach eine Checkbox, aber die gibt es standardgemäß (leider) nicht. Kann die "nachgerüstet" werden?
    (wenn ja, bitte mit Source)

    Wie löst Ihr solche booleschen Darstellungsprobleme per DBGrid?

    Ein DBCtrlGrid (hier kann eine DBCheckBox plaziert werden) passt ja seine Ausdehnung (pro Datensatz) anhand der Anzahl der Datensätze an, was meiner Ansicht nach nicht unbedingt benutzerfreundlich wirkt.

    Gruß<br>
    Stephan

  • #2
    Hi!
    Du hast recht, ich vermisse auch die Checkbox in der DBGrid, man kann aber, vorausgesetzt du hast persistente Felder in deiner Tabelle eingerichtet, die Erscheinungswerte im Obj.Ispektor einstellen und zwar in den Boolean-Feldern unter "Values" (glaube ich) z.B."Ja;Nein"

    Viel Glüc

    Comment


    • #3
      Hi,
      <br>
      <br>ggf. GxDBGrid (www.helpmaker.net) (ist glaube ich Freeware/OpenSource)
      <br>oder
      <br>Quantum Grid von www.devexpress.com (Komerziell, aber gut)
      <br>
      <br>mfg
      <br>P

      Comment


      • #4
        Hallo,

        danke für Eure Antworten. Eine neue Komponente zu verwenden, nur um ein boolsches Feld adäquat(!) in einem Grid darzustellen...

        Gibt es nicht eine Lösung mit Delphi Bordmitteln? z.B. zur Laufzeit eine DBCheckBox direkt ins Grid plazieren (OnDrawDataCell-Event). Hat hier jemand schon eine Lösung in dieser Richtung?

        Stepha

        Comment


        • #5
          hi

          ich habe es mit folgendem code hinbekommen:

          <p>procedure TUF.GRID1DrawColumnCell(Sender: TObject; const Rect: TRect;</p>
          <p>DataCol: Integer; Column: TColumn; State: TGridDrawState);</p>
          <p>begin</p>
          <p>&nbsp;&nbsp;&nbsp; with Sender as TDBGrid do</p>
          <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; begin</p>
          <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ; if
          Columns[DataCol].FieldName = 'TEST' then</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp; begin</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.Font.Color := canvas.brush.Color;</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          DefaultDrawColumnCell(Rect, DataCol, Column, State);</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.pen.Color := rgb(0,0,0);</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.pen.Width:=1;</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          //zeichnen des vierecks&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          </p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/6) , rect.Top +
          round((rect.Bottom -rect.top)/6));</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 5/6),rect.Top +
          round((rect.Bottom -rect.top)/6));</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 5/6),rect.Top +
          round((rect.Bottom -rect.top)* 5/6));</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.LineTo(rect.Left + round((rect.Right-rect.Left)/6),rect.Top +
          round((rect.Bottom -rect.top)* 5/6));</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.LineTo(rect.Left + round((rect.Right-rect.Left)/6),rect.Top +
          round((rect.Bottom -rect.top)/6));</p>
          <p>&nbsp;</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          if Columns[DataCol].Field.Value = 1 then</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;
          begin</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.pen.Color := rgb(150,150,150);</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.pen.Width:=2;</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/4) , rect.Top +
          round((rect.Bottom -rect.top)/4));</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 3/4),rect.Top +
          round((rect.Bottom -rect.top)* 3/4));</p>
          <p>&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          canvas.Mo

          Comment


          • #6
            hi

            ich hab es mit folgendem code hinbekommen:

            procedure TUF.GRID1DrawColumnCell(Sender: TObject; const Rect: TRect;<br>
            DataCol: Integer; Column: TColumn; State: TGridDrawState);<br>
            begin<br>
            &nbsp;&nbsp;&nbsp; with Sender as TDBGrid do<br>
            &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; begin<br>
            &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ; if
            Columns[DataCol].FieldName = 'TEST' then<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp; begin<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.Font.Color := canvas.brush.Color;<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            DefaultDrawColumnCell(Rect, DataCol, Column, State);<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.pen.Color := rgb(0,0,0);<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.pen.Width:=1;<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            //zeichnen des vierecks&nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/6) , rect.Top +
            round((rect.Bottom -rect.top)/6));<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 5/6),rect.Top +
            round((rect.Bottom -rect.top)/6));<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 5/6),rect.Top +
            round((rect.Bottom -rect.top)* 5/6));<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.LineTo(rect.Left + round((rect.Right-rect.Left)/6),rect.Top +
            round((rect.Bottom -rect.top)* 5/6));<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.LineTo(rect.Left + round((rect.Right-rect.Left)/6),rect.Top +
            round((rect.Bottom -rect.top)/6));<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;
            //zeichnen kreuz<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            if Columns[DataCol].Field.Value = 1 then<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;
            begin<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.pen.Color := rgb(150,150,150);<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.pen.Width:=2;<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/4) , rect.Top +
            round((rect.Bottom -rect.top)/4));<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 3/4),rect.Top +
            round((rect.Bottom -rect.top)* 3/4));<br>
            &nbsp;&nbsp;
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&amp

            Comment


            • #7
              ich hab es mit folgendem code hinbekommen:

              procedure TUF.GRID1DrawColumnCell(Sender: TObject; const Rect: TRect;<br>
              DataCol: Integer; Column: TColumn; State: TGridDrawState);<br>
              begin<br>
              &nbsp;&nbsp;&nbsp; with Sender as TDBGrid do<br>
              &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; begin<br>
              &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ; if
              Columns[DataCol].FieldName = 'TEST' then<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp; begin<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.Font.Color := canvas.brush.Color;<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              DefaultDrawColumnCell(Rect, DataCol, Column, State);<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.pen.Color := rgb(0,0,0);<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.pen.Width:=1;<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              //zeichnen des vierecks&nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              <br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/6) , rect.Top +
              round((rect.Bottom -rect.top)/6));<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 5/6),rect.Top +
              round((rect.Bottom -rect.top)/6));<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 5/6),rect.Top +
              round((rect.Bottom -rect.top)* 5/6));<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.LineTo(rect.Left + round((rect.Right-rect.Left)/6),rect.Top +
              round((rect.Bottom -rect.top)* 5/6));<br>
              &nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              canvas.LineTo(rect.Left + round((rect.Right-rect.Left)/6),rect.Top +
              round((rect.Bottom -rect.top)/6));<br>

              fortsetzung folg

              Comment


              • #8
                //zeichnen kreuz<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                if Columns[DataCol].Field.Value = 1 then<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;
                begin<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                canvas.pen.Color := rgb(150,150,150);<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                canvas.pen.Width:=2;<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/4) , rect.Top +
                round((rect.Bottom -rect.top)/4));<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 3/4),rect.Top +
                round((rect.Bottom -rect.top)* 3/4));<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                canvas.MoveTo(rect.Left + round((rect.Right-rect.Left)/4) ,rect.Top +
                round((rect.Bottom -rect.top)* 3/4));<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                canvas.LineTo(rect.Left + round((rect.Right-rect.Left)* 3/4),rect.Top +
                round((rect.Bottom -rect.top)/4));<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp; end;<br>
                &nbsp;&nbsp; </b></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp; <font SIZE="2"><b>end<br>
                &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ; else<br>
                &nbsp;&nbsp;
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;
                DefaultDrawColumnCell(Rect, DataCol, Column, State);<br>
                &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; end;<br>
                end;<br>

                jetzt nur noch beim cellclick-ereignis den wert von 0 nach 1 bzw umgekehrt schalten.

                das ganze ist zwar kein optischer leckerbissen, dürfte aber seinen zweck erfüllen

                swe

                Comment


                • #9
                  Hallo,

                  danke für die Antworten. Ich habe inzwischen eine Lösung gebaut, die ich nicht schlecht finde. Und sie funktioniert mit Bordmitteln:

                  (Ich gehe davon aus, dass für die darzustellenden boolschen Felder persistente Felder eingerichtet wurden: YourBooleanPersistenFieldX)

                  (1) Je boolsches Feld im DBGrid eine DBCheckBox plazieren. Diese DBCheckBoxes mit den jeweiligen persistenten Feldern verbinden und die Eigenschaft Visible = False setzen. Im DBGrid diese booleschen Felder ebenfalls in die Columns-Collection aufnehmen

                  (2) Zur Darstellung der checked/unchecked CheckBox, die später im Grid erscheinen soll, habe ich zwei Bildchen erstellt und diese in eine ImageList gepackt. Somit kann man das Aussehen individuellen Bedürfnissen anpassen. Ich habe die Standardbilder für checked/unchecked verwendet

                  (3) Ereignis DBGrid.OnColEnter
                  <pre>
                  if DBGrid.Columns[DBGrid.SelectedIndex].Field =
                  YourBooleanPersistentField1 then
                  DBCheckBox1.Visible := True
                  else
                  DBCheckBox1.Visible := False;
                  if DBGrid.Columns[DBGrid.SelectedIndex].Field =
                  YourBooleanPersistentField2 then
                  DBCheckBox2.Visible := True
                  else
                  DBCheckBox2.Visible := False;
                  usw.
                  </pre>

                  (3) Ereignis DBGrid.OnDrawColumnCell<br>
                  <pre>
                  if (gdFocused in State) then begin
                  if (Column.Field = YourBooleanPersistentField1 then
                  DBCheckBox1.SetBounds(
                  Rect.Left + DBGrid.Left + 3,
                  Rect.Top + DBGrid.Top + 1,
                  Rect.Right - Rect.Left,
                  Rect.Bottom - Rect.Top);
                  if (Column.Field = YourBooleanPersistentField2 then
                  DBCheckBox2.SetBounds(
                  Rect.Left + DBGrid.Left + 3,
                  Rect.Top + DBGrid.Top + 1,
                  Rect.Right - Rect.Left,
                  Rect.Bottom - Rect.Top);
                  end else begin
                  if Column.Field = YourBooleanPersistentField1 then
                  ImageList.Draw(DBGrid.Canvas, Rect.Left, Rect.Top,
                  YourBooleanPersistentField1.Value);
                  if Column.Field = YourBooleanPersistentField2 then
                  ImageList.Draw(DBGrid.Canvas, Rect.Left, Rect.Top,
                  YourBooleanPersistentField2.Value);
                  end;
                  </pre>

                  Viel Spaß<br>
                  Stephan Schneide

                  Comment

                  Working...
                  X