Zum Inhalt springen
KleptR

DBGrid einfärben .. aber wie?

Empfohlene Beiträge

Hat jemand ahnnng von C++? wen ja kann mir jemand sagen wie ich in einer DBGrid komponente den hintergrund einer einzelnen zelle einfärbe? brauch das sehr dringend

Bearbeitet von Klept-O-Maniac
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, wenn das so, wie in Delphi ist, dann mußt Du im OnDraw-Ereignis des Grids dies machen. Wenn der Zähler genau auf dieser Zelle (Spalte, Zeile) steht, wird der Hintergrund in der Farbe gefärbt. Dazu muß vermutlich (zumindest in Delphi muß man es so machen) die gesamte Draw-Funktion des Rechteckes überschrieben werden. Schau mal, ob Du über die Google-Suche da was findest.

Ich hab mal ein Beispiel von mir in Delphi (6-2007) mit reingehangen:

procedure TfoLaufwegsuche.GridDrawCellGeneral(Sender: TObject; ACol, ARow: integer;

  Rect: TRect; State: TGridDrawState);

var

  sText: string;

  DrawFormat: longint;



const

  DrawConst = DT_NOPREFIX or DT_NOCLIP or DT_VCENTER;



begin

  with TJvStringGrid(Sender).Canvas do

  begin

    sText := TJvStringGrid(Sender).Cells[ACol, ARow];

    // Zeichenroutine für Selektion

    Font.Style := [];

    Brush.Color := clWindow; // nicht selektierte Zelle

    Font.Color := clBlack;

    if ARow = 0 then

      Brush.Color := FarbeKopfZeile// Kopfzeile



    else

    begin // alle folgenden Zeilen

      // Zeichenroutine für Selektion

      if ARow = TJvStringGrid(Sender).Row then

        Brush.Color := FarbeZeile

      else

        Brush.Color := clWindow;

      if (state = [gdSelected]) then

        Brush.Color := FarbeZeile; // Zelle selektiert



      if TJvStringGrid(Sender).Name = StrAbsGrid.Name then

      begin

        if (TJvStringGrid(Sender).Tag > 0) and (ARow = TJvStringGrid(Sender).Row) and

          (ACol = TJvStringGrid(Sender).Tag) then

        begin

          Font.Color := clRed;

          Font.Style := [fsBold];

        end;

        // Ausblenden der Zeilen > 1, wenn nur ein Datumswert für alle benutzt wird

        if (ACol in [cColBetrDat_StrAbs, cColStandVDat_StrAbs]) and (DatumGleich) and

          (ARow > 1) then

          sText := '';

      end;

    end;



    if ARow = Pred(TJvStringGrid(Sender).FixedRows) then

      DrawFormat := DT_SINGLELINE or DT_CENTER// Kopfzeilen mit zentriertem Text



    else

      DrawFormat := DT_WORDBREAK or DT_LEFT;



    if Pos('XSGTTAB', TJvStringGrid(Sender).Name) > 0 then

      if (ARow > 1) and (ACol in [cColkm_Lw, cColRL100_Lw, cColName_Lw, cColVon_Lw, cColBis_Lw]) then

        if TJvStringGrid(Sender).Cells[ACol, pred(ARow)] = TJvStringGrid(

          Sender).Cells[ACol, ARow] then

          DrawFormat := DT_SINGLELINE +

            DT_CENTER//          if trim(TJvStringGrid(Sender).Cells[ACol, pred(ARow)]) <> '' then sText := '-"-';

    // Ausblenden der doppelten Spalten

    ;



    if TJvStringGrid(Sender).Name = FehlerGrid.Name then

    begin

      Font.Color := clRed;

      Font.Style := [fsBold];

    end;

    FillRect(Rect); // Hintergrund füllen

    Rect.Left := Rect.Left + 1;

DrawText(Handle, PChar(sText), length(sText), Rect, DrawConst + DrawFormat or DT_CALCRECT);
// Ausrechen des Rechteckes

DrawText(Handle, PChar(sText), length(sText), Rect, DrawConst + DrawFormat);
// Jetzt zeichnen.

if Rect.Bottom - Rect.Top > TJvStringGrid(Sender).RowHeights[ARow] then
TJvStringGrid(Sender).RowHeights[ARow] := Rect.Bottom - Rect.Top;
end;
end;
[/codebox]

Link zu diesem Kommentar
Auf anderen Seiten teilen

hm danke aber leider kann ich mit delphi wenig anfangen weil ich davon 0 plan hab .. aber paar ähnlichkeiten sind da schon .... hab jetz auf jedenfall raus das bei mir der zeiger auf die selektierte zelle gefehlt hat :puuuh:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, mir ging es auch nur ums Prinzip, weil es ja fast alles irgendwelche API-Funktionen sind, die die Zelle färben, und den Text ausgeben. Ich habe an den Zuegs auch lange gefeilt und 100%-ig funktioniert es auch nicht immer, insbesondere, wenn das Grid so eingestellt ist, daß man die komplette Zeile selektieren kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden


  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.