Geglättete, dicke Linien zeichnen
Auf Anfrage eines DF-Mitglieds habe ich eine kleine Klasse (
TPaintBoxEx) geschrieben, welche ähnlich wie 
TPaintBox ist. Auf Anfrage eines anderen DF-Mitglieds veröffentliche ich die Routinen hier. 
Im Gegensatz zu 
TPaintBox wird das gezeichnete Bild bei 
TPaintBoxEx gepuffert und flimmerfrei angezeigt. Die Komponente ist fokusierbar und enthält einige Zeichenroutinen wie 
DrawLineAA (zeichnen von geglätteten Linien) und schneller Pixel-Zugriff via 
Pixels[]. 
Nach einem Zugriff auf 
TPaintBoxEx ist stets ein 
Invalidate (bzw. 
Repaint) erforderlich, um das Bild zu aktualisieren. 
Das ganze ist nicht so sauber programmiert, wie es sein könnte; für die meisten Zwecke sollte es aber eigentlich reichen. 
Beispiel 1 (geglättete, dicke Linien Zeichnen -- siehe Screenshot):
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 
 | constN = 24;
 var
 I: Integer;
 p: Single;
 begin
 for I := 0 to N-1 do
 with PaintBox1, CanvasBuffer do
 begin
 p := I/N*pi*2;
 Pen.Style := psDot;
 Pen.Color := clBlue;
 Pen.Width := 2;
 DrawLineAA(20*cos(p)+200,20*sin(p)+200,200*cos(p)+200,200*sin(p)+200);
 Pen.Style := psDashDotDot;
 Pen.Color := clRed;
 Pen.Width := 8;
 DrawLineAA(20*cos(p)+250,20*sin(p)+200,200*cos(p)+250,200*sin(p)+200);
 end;
 PaintBox1.Invalidate;
 end;
 | 
		
	  
Beispiel 2 (schneller Pixel-Zugriff):
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 
 | varx, y: Integer;
 begin
 with PaintBoxEx1 do
 for y := 0 to 255 do
 for x := 0 to 255 do
 Pixels[x,y] := Ord(x and y = 0)*clRed;
 
 PaintBoxEx1.Invalidate;
 end;
 | 
		
	  
Siehe auch: 
Hier ist ein alter Post mit einer anderen Routine für geglättete Linien.
Die Linienroutinen basieren auf Ausführungen von 
dieser Seite.
//Edit: Exe entfernt, Beispiele und Erläuterungen hinzugefügt.