![]() |
DrawGradient und Windows 7 Basic Style
Delphi-Version: XE
Hallo Leute! Ich verwende folgende Funktion von ![]()
Delphi-Quellcode:
Das funktioniert soweit auch wunderbar, vor kurzem habe ich allerdings auf einigen Rechnern (die als Style Windows 7 Basic eingestellt hatten) gesehen dass die Zellen die mit einem Gradient gezeichnet werden sollten einfach nur schwarz sind.
procedure TMainForm.DrawGradient(const Canvas: TCanvas; Color1, Color2: TColor;
ARect: TRect; GradientOrientation: TGradientOrientation); var c1, c2, c: TPixelRec; //for easy access to RGB values as well as TColor value x, y: Integer; //current pixel position to be set OldPenWidth: Integer; //Save old settings to restore them properly OldPenStyle: TPenStyle;//see above begin Canvas.Brush.Style := bsSolid; c1.Color := ColorToRGB(Color1); //convert system colors to RGB values c2.Color := ColorToRGB(Color2); //if neccessary OldPenWidth := Canvas.Pen.Width; //get old settings OldPenStyle := Canvas.Pen.Style; Canvas.Pen.Width:=1; //ensure correct pen settings Canvas.Pen.Style:=psInsideFrame; case GradientOrientation of goVertical: begin for y := 0 to ARect.Bottom - ARect.Top do begin c.r := Round(c1.r + (c2.r - c1.r) * y / (ARect.Bottom - ARect.Top)); c.g := Round(c1.g + (c2.g - c1.g) * y / (ARect.Bottom - ARect.Top)); c.b := Round(c1.b + (c2.b - c1.b) * y / (ARect.Bottom - ARect.Top)); Canvas.Brush.Color := c.Color; Canvas.FillRect(Classes.Rect(ARect.Left, ARect.Top + y, ARect.Right, ARect.Top + y + 1)); end; end; goHorizontal: begin for x := 0 to ARect.Right - ARect.Left do begin c.r := Round(c1.r + (c2.r - c1.r) * x / (ARect.Right - ARect.Left)); c.g := Round(c1.g + (c2.g - c1.g) * x / (ARect.Right - ARect.Left)); c.b := Round(c1.b + (c2.b - c1.b) * x / (ARect.Right - ARect.Left)); Canvas.Brush.Color := c.Color; Canvas.FillRect(Rect(ARect.Left + x, ARect.Top, ARect.Left + x + 1, ARect.Bottom)); end; end; end; Canvas.Pen.Width := OldPenWidth; //restore old settings Canvas.Pen.Style := OldPenStyle; end; Leider tritt dieses Problem nur sporadisch auf, d.h. dass es auch nicht auf allen Rechnern mit diesem Style auftritt und ich es bei mir auch noch nicht reproduzieren konnte. Kennt vielleicht jemand von euch dieses Problem oder kann sich vorstellen woran es liegt? PS: Die Werte mit denen ich die Funktion aufrufe Color1: clWhite Color2: $0090EE90 { Hellgrün } RectHeight: 12 GradientOrientation: goVertical MfG. pHL |
AW: DrawGradient und Windows 7 Basic Style
Liste der Anhänge anzeigen (Anzahl: 1)
Kann es sein, dass der Basic-Style aus einem ganz bestimmten Grund aktiviert wurde? Vielleicht weil die Grafikkarte zu schwach ist?
Aktiviere mal Testhalber den "Modus mit reduzierten Farben" bei dir. (Rechtsklick auf deine *.exe-Datei > Eigenschaften > Kompatibilität) Das dürfte ein Grund sein, warum der Farbverlauf nicht klappt... |
AW: DrawGradient und Windows 7 Basic Style
Zitat:
Das mit den Farbeinstellungen habe ich auch getestet. Wenn ich das einstelle dann wird die Anzeige richtig hässlich, aber man kann immer noch alles erkennen und es gibt keine schwarzen Zellen :) Danke dir aber! MfG |
AW: DrawGradient und Windows 7 Basic Style
Bei mir gibt es da allerdings diese schwarzen Zellen... Vielleicht liegt es an einer Kombination aus schlechter Grafikkarte und einer "unbekannten"? ;-)
|
AW: DrawGradient und Windows 7 Basic Style
Das kann ich mir leider kaum vorstellen weil es so um die 20 komplett gleichen PC's sind, und dieser Fehler nur bei manchen (und da eben auch nicht immer) auftritt :)
Naja vielleicht finde ich den Fehler mal zufällig :) Wäre ja möglich gewesen dass es doch an der Funktion liegt |
AW: DrawGradient und Windows 7 Basic Style
Kannst Du mir sagen warum Du im Jahre 2013 noch so Gradienten in einer Schleife malst? Verwende lieber
![]() |
AW: DrawGradient und Windows 7 Basic Style
Ja das kann ich :) Ich kannte GradientFill bis jetzt nicht, aber ich werde das jetzt umbauen und dann auf längere Zeite testen.
Danke! |
AW: DrawGradient und Windows 7 Basic Style
Es ist ca. 1x schneller als das Manuelle Zeichnen von Linien. Auch die vielen Round-Aufrufe machen das nicht schneller. Schau Dir mal den VCL.Grids Source an. Dort wird ja damit gearbeitet (mindestens seit D2007).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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 by Thomas Breitkreuz