![]() |
Canvas spinnt
Hi,
So. Ich habe ein Canvas eines Controls. Im OnPaint mal ich damit rum. Außerdem rufe ich im OnPaint folgende Funktion auf:
Delphi-Quellcode:
Eigentlich ganz am Anfang dieser Procedure steht folgender Code:
function DrawGradientRgn(DC: HDC; Rec: TRect; FromColor, ToColor: TColor; Clip: HRGN; Style: TGradientStyle): Boolean;
Delphi-Quellcode:
Aber komischerweise ist das Canvas, wenns wieder im OnPaint ist total verhunst. Man kann danach einstellen was man will, das Canvas malt mit der Farbe die ihr grad gefällt (also nicht ganz aber so grob gesagt könnte man das sagen...) Zumindest kann man festhalten :arrow: Mit dem Canvas ist danach nichts mehr anzufangen. (Das gilt vorallem für Canvas.Font.[...}
if Style = gsNone then
begin Canv := TCanvas.Create; try Canv.Handle := DC; Canv.Brush.Color := FromColor; Canv.Pen.Style := psClear; if Clip <> 0 then Canv.RoundRect(Rec.Left+1,Rec.Top+1,Rec.Right+1,Rec.Bottom+1,23,23) else Canv.Rectangle(Rec.Left+1,Rec.Top+1,Rec.Right+1,Rec.Bottom+1); Canv.Pen.Style := psSolid; exit; // darf man nicht ins finally schreiben ... finally wird trotzdem noch aufgerufen. finally Canv.Free; end; end; Soo.. Jetzt hab ich die Funktion geändert so das kein DC übergeben wird sondern direkt das ganze Canvas.
Delphi-Quellcode:
Grob gesagt: Auch Chaos, wenn auch nicht das Gleiche -.-
function DrawGradientRgn(ACanvas: TCanvas; Rec: TRect; FromColor,ToColor: TColor; Clip: HRGN; Style: TGradientStyle): Boolean;
begin if Style = gsNone then begin ACanvas.Brush.Color := FromColor; ACanvas.Pen.Style := psClear; if Clip <> 0 then ACanvas.RoundRect(Rec.Left+1,Rec.Top+1,Rec.Right+1,Rec.Bottom+1,23,23) else ACanvas.Rectangle(Rec.Left+1,Rec.Top+1,Rec.Right+1,Rec.Bottom+1); ACanvas.Pen.Style := psSolid; exit; end; // ... end; :arrow: :arrow: Ich verzweifle gerade etwas -.- :wall: Gruß Neutral General |
Re: Canvas spinnt
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Kann da voll mitfühlen, bin auch schon oft genug darauf reingefallen. Es geht so definitiv nicht (mehr). Nehme eine Bitmap, pass die Dimensionen an, zeichne den Farbverlauf und dann mit Canvas.Draw(X, Y, Bitmap) die Bitmap. Schon die Nerven und geht schnell. Guten Rutsch. Um den Fehler zu sehen, Menü-Ansicht->GradientHeader und anschließend auf Wochenansicht umstellen. |
Re: Canvas spinnt
Hi,
Delphi-Quellcode:
Canvas ist eine abstrakte Klasse. Das, was du brauchst, ist der Nachfahr TControlCanvas.
Canv := TCanvas.Create;
Das "Chaos" beim direkten Übergeben der Canvas müsste nach der geposteten Stelle liegen. Dort seh ich erstmal kein Problem außer evtl. die hardgecodeten Zahlen z. B. bei RoundRect. Eine BMP als Puffer würd ich eh nehmen, schon um Flackern zu vermeiden. Du scheinst ja erst den Hintergrund zu zeichnen und dann obendrauf was anderes. Übrigens: Canvas spinnt nicht. Mfg FAlter |
Re: Canvas spinnt
Zitat:
|
Re: Canvas spinnt
Zitat:
|
Re: Canvas spinnt
Zitat:
|
Re: Canvas spinnt
Zitat:
Bin jetzt mal weg (Silvester ;) ) Gucke mir morgen nochmal an was so gesagt wurde. Wünsche euch allen schonmal nen guten Rutsch und feiert schön ;) :party: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 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