Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einzelne Zelle in DBGrid einfärben (https://www.delphipraxis.net/165224-einzelne-zelle-dbgrid-einfaerben.html)

t0mmy 19. Dez 2011 14:18

Einzelne Zelle in DBGrid einfärben
 
Hallo!

Also kann ich und wenn ja kann mir jemand hilfestellung leisten? - Eine Zelle in einer DBGrid so einfärben als wäre es ein Fortschrittsbalken, sprich die länge des balkens bestimmend einfärben?

himitsu 19. Dez 2011 14:23

AW: Einzelne Zelle in DBGrid einfärben
 
Wie man einzelne Zellen zeichnet wird hier überall, an bestimmt jeder 10 Ecke erklärt.

Und was du dort reinzeichnest ist vollkommen egal.

Egal ob ein ausgemaltes Rechteck, wie in vielen Demos/Threads, oder was Anspruchvolleres, wie deinen Balken.
Für Letzteres gibt es genügend Tutorials, zur Nutzung des Canvas.

t0mmy 20. Dez 2011 08:21

AW: Einzelne Zelle in DBGrid einfärben
 
Hmm Suche=vergebens ich habe nichts gefunden oder suche halt falsch -.-

DeddyH 20. Dez 2011 08:25

AW: Einzelne Zelle in DBGrid einfärben
 
[DP]DBGrid färben[/DP], damit findet man nichts? Das mag ich nicht glauben.

t0mmy 20. Dez 2011 08:29

AW: Einzelne Zelle in DBGrid einfärben
 
Ja das mit dem Färben bekomm ich hin aber das ich in einer Zelle ein Rechteck zeichnen möchte und das einfärben möchte -.-

DeddyH 20. Dez 2011 08:31

AW: Einzelne Zelle in DBGrid einfärben
 
Wie zeichnest Du denn sonst ein Rechteck?

t0mmy 20. Dez 2011 08:39

AW: Einzelne Zelle in DBGrid einfärben
 
Ja mit DBGrid1.Canvas.Rectangle(x,x,x,x)
Jedoch möchte ich das er mir in die zweite Spalte, erste zeile diesen balken hinzeichnet oder 3te spalte... und das es genau hineinpasst -.-

DeddyH 20. Dez 2011 08:44

AW: Einzelne Zelle in DBGrid einfärben
 
Hast Du Dir die Parameter von OnDrawColumnCell einmal genau angeschaut? Die Spalte und das Rechteck der aktuellen Zelle werden Dir doch übergeben.

t0mmy 20. Dez 2011 08:48

AW: Einzelne Zelle in DBGrid einfärben
 
Jap die hab ich mir angesehn ich kann da nur mit Rect. Left, Right, Bottom usw.. was machen aber das ich sage es soll in der zweiten Spalte das Rechteck genau so breit werden das check ich nicht -.- bin da in sachen Draw ziemlich ein anfänger -.-

DeddyH 20. Dez 2011 08:58

AW: Einzelne Zelle in DBGrid einfärben
 
Na gut, hier ein Beispiel:
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
  if Column.FieldName = 'ObjectId' then
    begin
      TDBGrid(Sender).Canvas.Brush.Color := clRed;
      TDBGrid(Sender).Canvas.RectAngle(Rect);
    end;
end;
Damit wird die Spalte, die das Feld "ObjectId" darstellt, mit Rot ausgefüllt.

t0mmy 20. Dez 2011 09:16

AW: Einzelne Zelle in DBGrid einfärben
 
Danke aber wie kann ich nur eine gewisse länge einfärben?

DeddyH 20. Dez 2011 09:31

AW: Einzelne Zelle in DBGrid einfärben
 
Noch' n Gedicht:
Delphi-Quellcode:
uses Types; //für Rect-Funktion benötigt

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  R: TRect;
  Gr: TDBGrid;
  RdPercent: integer;
begin
  Gr := Sender as TDBGrid;
  //Standard-Zeichnen ohne Berücksichtigung von State
  Gr.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  //Spalte "ObjectId" selbst zeichnen
  if Column.FieldName = 'ObjectId' then
    begin
      //roter Rahmen
      R := Rect;
      Gr.Canvas.Pen.Color := clRed;
      Gr.Canvas.Rectangle(R);
      //Zufallswert zwischen 0 und 100 als fiktive Prozentangabe
      RdPercent := Random(101);
      //Rechteck anhand des Zufallswertes neu definieren
      R := Types.Rect(R.Left,
                      R.Top,
                      R.Left + trunc((R.Right - R.Left) * (RdPercent / 100)),
                      R.Bottom);
      //...und einfärben
      Gr.Canvas.Brush.Color := clRed;
      //Prozentangabe mittig ausgeben
      Gr.Canvas.Rectangle(R);
      Gr.Canvas.Brush.Style := bsClear;
      R := Rect;
      DrawText(Gr.Canvas.Handle, PChar(IntToStr(RdPercent) + '%'), -1, R, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
    end;

t0mmy 20. Dez 2011 10:25

AW: Einzelne Zelle in DBGrid einfärben
 
Welche Uses muss ich für Types.Rect einbinden? Es wird nämlich nicht erkannt

DeddyH 20. Dez 2011 10:28

AW: Einzelne Zelle in DBGrid einfärben
 
Schau mal in die allererste Zeile meines Beispiels, oder hieß die Unit unter Delphi 7 anders? Zur Not wirf halt einen Blick in die Hilfe.

t0mmy 20. Dez 2011 12:36

AW: Einzelne Zelle in DBGrid einfärben
 
hmm immer wieder das genaue lesn! sry für die Frage -.-


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz