Announcement

Collapse
No announcement yet.

Die Zweilen in einem DBGrid abwechselnd einfärben. Bitte um Hilfe!

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

  • Die Zweilen in einem DBGrid abwechselnd einfärben. Bitte um Hilfe!

    Hallo,

    Ich möchte alle ungeraden Zeilen eines DBGrid anders färben.
    Das Problem ist nur, daß wenn ich mich im DBGrid bewege (scrolle) um die DAten einzusehen, werden alle Zeilen eingefärbt. Wie Kann ich das verhindern????

    Grruß,
    Marco

  • #2
    <p>Hallo Marco,<br>
    <br>
    aufbauend auf mein Beispiel von gestern, folgend die notwendigen Erweiterungen:<br>
    <br>
    Schau dir einmal in der Hilfe die Function <b>Odd</b> an.<br>
    <br>
    <pre>
    procedure TDatenEditDlg.StammGridDrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn;
    State: TGridDrawState);
    var aFarbe :TColor;
    begin
    { Datacol gibt die Nummer des Feldes (beginnend ab 0) in der
    Tabelle zurück
    Im Beispiel wird das 1. Feld in der Tabelle angenommen }
    if (DataCol=0) then
    begin
    if (InterTab.Fields[0].AsInteger>1000) then aFarbe:=clRed else
    aFarbe:=clBlack;
    end else aFarbe:=clBlack;
    with TDBGrid(Sender), Canvas do
    begin
    // ---------------------------------------------------
    // Hier die notwendige Erweiterung für Dein Problem:
    // ---------------------------------------------------
    if Odd(InterTab.RecNo) then Brush.Color:=clSilver else
    Brush.Color:=clWhite;
    // ---------------------------------------------------

    Font.Color:=aFarbe;
    FillRect(Rect);
    TextOut(Rect.Left+1, Rect.Top+1, InterTab.Fields[DataCol].AsString);
    end;
    end;
    </pre>
    <br>
    Gruß Thomas</p&gt

    Comment


    • #3
      <p>Hallo Marco,<br>
      <br>
      aufbauend auf mein Beispiel von gestern, folgend die notwendigen Erweiterungen:<br>
      <br>
      Schau dir einmal in der Hilfe die Function <b>Odd</b> an.<br>
      <br>
      <pre>
      procedure TDatenEditDlg.StammGridDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
      var aFarbe :TColor;
      begin
      { Datacol gibt die Nummer des Feldes (beginnend ab 0) in der
      Tabelle zurück
      Im Beispiel wird das 1. Feld in der Tabelle angenommen }
      if (DataCol=0) then
      begin
      if (InterTab.Fields[0].AsInteger>1000) then aFarbe:=clRed else
      aFarbe:=clBlack;
      end else aFarbe:=clBlack;
      with TDBGrid(Sender), Canvas do
      begin
      // ---------------------------------------------------
      // Hier die notwendige Erweiterung für Dein Problem:
      // ---------------------------------------------------
      if Odd(InterTab.RecNo) then Brush.Color:=clSilver else
      Brush.Color:=clWhite;
      // ---------------------------------------------------
      Font.Color:=aFarbe;
      FillRect(Rect);
      TextOut(Rect.Left+1, Rect.Top+1, InterTab.Fields[DataCol].AsString);
      end;
      end;
      </pre>
      <br>
      Gruß Thomas</p&gt

      Comment


      • #4
        Hallo Thomas,<br>
        <br>
        ich habe deine Programmzeilen hinzugefügt.Die Zeilen des DBGRids werden auch eingefärbt, jedoch werden sie beim Scrollen des Grids immer wieder neu eingefärbt. Dann kommt es zu derben Unregelmäßigkeiten der Zeileneinfärbung. Drei bis vier Zeilen hintereinander, die alle in der gleichen Farbe erscheinen. Gibt es nicht eine Möglichkeit die Zeilen das Grid einmalig mit den Farben zu belegen und das beim Scrollvorgang nicht immer wieder alles neu berechnet wird? Oder weißt Du woran das liegt?
        Ich finde es echt stark von Dir, daß Du mir so hilfst. Ich nutze noch nicht so lange ein Forum. Ich bin völlig begeister von dieser Geschichte.
        <br><br>
        Gruß,
        Marc

        Comment


        • #5
          <p>Hallo Marco,<br>
          <br>
          ich kann Dein Problem nicht nachvollziehen. Bei mir tut's ohne die von Dir beschriebenen Seiteneffekte. Kannst Du mir mal Deinen Code posten? Entweder hier im Forum oder an meine Mail-Adresse: <a href="mailto:[email protected]">[email protected]</a>.<br>
          <br>
          Gruß Thomas</p&gt

          Comment


          • #6
            DBGrid bearbeiten<br>
            Ich lese in ein DBGrid mit 4 Spalten Daten ein.<br>
            Der Benutzer soll nun in Spalte 2 und 3 Änderungen vornehmen dürfen,<br> aber in Spalte 1 und 4 nicht.<br>
            Ist das bei einem DBGrid möglich und wenn ja, wie?<br>
            Danke im Voraus<br>
            Be

            Comment


            • #7
              Hallo Beate,<br>ja es ist möglich. Mach mal in der IDE einen Doppelklick auf das DBGrid. Dann erscheint Propertyeditor, mit dem Du die Spalten festlegen kannst, die aus der Datenmenge angezeigt werden sollen. Dort kannst Du auch für jede Spalte festlegen, ob sie ReadOnly sein soll oder nicht.<br>:-) Jens Schuman

              Comment


              • #8
                Hallo,<br>
                um die Zeilen einer DBGrid einzufärben schlage ich folgende Methode vor:
                <pre>
                procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
                const Rect: TRect; DataCol: Integer; Column: TColumn;
                State: TGridDrawState);
                begin
                with TDBGrid(Sender), Canvas do
                begin
                if not (gdSelected in State) or (Focused = FALSE) then
                begin
                if TTable1.RecNo <= 3 then
                Brush.Color:=clSilver
                else
                Brush.Color:=clWhite;
                Font.Color :=clBlack;
                end
                else
                begin
                Brush.Color:=clNavy;
                Font.Color :=clWhite;
                end;
                DefaultDrawColumnCell(Rect, DataCol, Column, State);
                end;
                end;
                </pre>
                Gegenüber der obigen Methode wird nicht Textout und FillRect angewendet, sondern es wird die Methode DefaultDrawColumnCell genutzt. Das hat den Vorteil, dass die Displayformatierungen richtig dargestellt werden. Im Beispiel werden die ersten drei Zeilen in clSilver dargestellt. Hat die DBGrid den Focus, wird ein Selektionsbalken dargestellt (was je nach Geschmack angepasst werden kann)

                Comment

                Working...
                X