![]() |
StringGrid Zellenfärben mit 3D-Effekt
Hallo Ihr Buben,
ich hoffe der Beitrag erscheint jetzt nicht zweimal. Wenn doch, bitte einen löschen. Also, ich möchte in einem StringGrid Zellen einfärben, eigentlich ganze Zeilen, ist auch egal. Geht alles mit Ownerdraw, schon gemacht. Das Problem ist, sie sollen nicht nur die Farbe der Spalten- bzw. Reihenköpfe haben, sondern auch deren 3D-Effekt. Also quasi Zeilenköpfe mitten im StringGrid. Hat da jemand einen Tipp? |
Re: StringGrid Zellenfärben mit 3D-Effekt
Hallo
Wenn du die Eigenschaft FixedRows änderst, werden weitere Zeilen auch wie der Kopf angezeigt. Oder möchtest du nur einzelne Zeilen in 3D darstellen? |
Re: StringGrid Zellenfärben mit 3D-Effekt
Ja, genau, ich möchte z.B. jede vierte Zeile so darstellen.
ich wollte halt nicht 5 StringGrids mit Spaltenkopf (fixedRow) untereinander setzen sondern alles in einem. Ich habe in der Delphi Hilfe was gelesen, dass bei FixedCols/FixedRows die Eigenschaft CTL3D auf True gesetzt wird, eben für die Zeile/Spalte 0, nur finde ich nicht raus, wie ich das für eine andere beliebige Zeile/Spalte mache. |
Re: StringGrid Zellenfärben mit 3D-Effekt
Hallo,
Fixed kann man nur in den ersten Spalten bzw. Zeilen setzen, also da bleibt Dir nichts anderes übrig als selber zu zeichnen in OnDrawCell. Der folgende Code zeichnet einen 3D-Effekt über zwei Zellen in Spalte 2 + 3 in der 2-ten Zeile:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var aRect : TRect; begin if (ACol in [2,3]) and (ARow = 2) then begin aRect := Rect; if ACol = 2 then aRect.Right := aRect.Right + StringGrid1.ColWidths[3] else aRect.Left := aRect.Left - StringGrid1.ColWidths[2]; DrawFrameControl(StringGrid1.Canvas.Handle,aRect,DFC_BUTTON,DFCS_BUTTONPUSH); end; end; |
Re: StringGrid Zellenfärben mit 3D-Effekt
Super, das funktioniert.
Vielen Dank erstmal. Hab schon alles durchgegoogelt was geht, finde nirgens was. Es sieht zwar nicht ganz so aus, wie die FixedCols/Rows, aber es geht. Bei den "echten" FixedRows/Cols sind die Zwischenlinien schwarz, statt grau. Lässt sich das auch noch rein bringen? Ich will nicht unverschämt sein muss aber fragen weil weder die Begriffe: - DrawFrameControl - DFC_BUTTON - DFCS_BUTTONPUSH in meiner Delphi 5 Hilfe zu finden sind!!! EDIT: Sorry, hab gefunden, es handelt sich um eine Windows API Funktion, die ist in der Delphi Hilfe nicht drin und es geht wohl auch nicht besser. Deshalb nochmal, Danke! |
Re: StringGrid Zellenfärben mit 3D-Effekt
Hallo,
versuch das mal:
Delphi-Quellcode:
if (ACol in [2,3]) and (ARow = 2) then
begin aRect := Rect; if ACol = 2 then aRect.Right := aRect.Right + StringGrid1.ColWidths[3] else aRect.Left := aRect.Left - StringGrid1.ColWidths[2]; //DrawFrameControl(StringGrid1.Canvas.Handle,aRect,DFC_BUTTON,DFCS_BUTTONPUSH); StringGrid1.Canvas.Brush.Color := StringGrid1.FixedColor; StringGrid1.Canvas.FillRect(aRect); DrawEdge(StringGrid1.Canvas.Handle,aRect,BDR_RAISEDINNER,BF_RECT); StringGrid1.Canvas.Brush.Color := clBlack; aRect.Right := aRect.Right+1; aRect.Bottom := aRect.Bottom+1; aRect.Top := aRect.Top-1; aRect.Left := aRect.Left-1; StringGrid1.Canvas.FrameRect(aRect); end; |
Re: StringGrid Zellenfärben mit 3D-Effekt
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ich habe den Code noch etwas angepasst. So wird nun jede 4. Zeile eine "Fixed Row". Evtl sind weitere Optimierungen nötig. Siehe Anhang für Resultat.
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var TempRect: TRect; begin if (ARow mod 4 = 0) then with TStringGrid(Sender) do begin TempRect := Rect; DrawFrameControl(Canvas.Handle, TempRect, DFC_BUTTON, DFCS_BUTTONPUSH); Canvas.Brush.Color := FixedColor; Canvas.FillRect(TempRect); DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDINNER, BF_RECT); Canvas.Brush.Color := clBlack; with TempRect do begin if ACol = ColCount - 1 then Right := Right else Right := Right + 1; Bottom := Bottom + 1; Top := Top - 1; Left := Left - 1; Canvas.FrameRect(TempRect); end; end; end; |
Re: StringGrid Zellenfärben mit 3D-Effekt
Hey, einen schönen guten morgen Euch allen!
Mann Ihr seid ja der absolute Hammer! Manche scheinen sogar Gedanken lesen zu können. Wenn ich den Code richtig verstehe ist die Erweiterung grundsätzlich im DrawEdge zu finden. Genau das habe ich gestern gesucht aber nicht gefunden. Ich habe da ein paar Probleme, dass ich z. T. die Delphi-Hilfe nicht nutzen kann. Hab einen neuen PC mit Vista, hab zwar den Winhlp-patch, aber der behebt das Problem auch nicht 100%. Wie auch immer, vielen Dank. Ihr habt ja schon fast den fertigen code geliefert, das hab ich nicht erwartet, hilft mir aber die Zusammensetzung und Funktion zu verstehen. Ich werde jetzt den kram einbauen und eine meine Funktionalität anpassen. Ich danke Euch nochmals sehr. :-D |
Re: StringGrid Zellenfärben mit 3D-Effekt
Hallo,
@toms: gibt es einen Grund vor DrawEdge und FillRect (übermalt doch alles mit FixedColor) noch DrawFrameControl einzusetzen? |
Re: StringGrid Zellenfärben mit 3D-Effekt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz