Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
FreePascal / Lazarus
|
Re: Kreis in Vier teile einteilen ?
11. Jun 2007, 11:48
ICH HABE ES.
ich habe den code einfach etwas geändert:
Delphi-Quellcode:
procedure Kreis4Farben(cav: TCanvas; iLeft, iTop, DMesser: integer);
var
PTemp: TPoint;
Halb, Viertel, DreiV: integer;
begin
Halb := DMesser div 2;
Viertel := Halb div 2;
DreiV := Halb + Viertel;
with cav do
begin
// GetViewportOrgEx(Handle, PTemp);
// SetViewportOrgEx(Handle, iLeft, iTop, nil);
Pen.Color:= clRed;
Arc(0, 0, DMesser, DMesser, DMesser, Halb, Halb, 0);
// MoveTo(DMesser, Halb);
// LineTo(Halb, Halb);
// MoveTo(Halb, Halb);
// LineTo(Halb, 0);
Brush.Color := clRed;
// FloodFill(DreiV, Viertel, clred, fsBorder);
Pen.Color:= clYellow;
Arc(0, 0, DMesser, DMesser, Halb, 0, 0, Halb);
// MoveTo(0, Halb);
// LineTo(Halb, Halb);
// MoveTo(Halb, Halb);
// LineTo(Halb, 0);
Brush.Color := clYellow;
// FloodFill(Viertel, Viertel, clYellow, fsBorder);
Pen.Color := clGreen;
Arc(0, 0, DMesser, DMesser, 0, Halb, Halb, DMesser);
//MoveTo(0, Halb);
// LineTo(Halb, Halb);
// MoveTo(Halb, Halb);
// LineTo(Halb, DMesser);
Brush.Color := clGreen;
// FloodFill(Viertel, DreiV, clGreen, fsBorder);
Pen.Color := clAqua;
Arc(0, 0, DMesser, DMesser, Halb, DMesser, DMesser, Halb);
// MoveTo(DMesser, Halb);
// LineTo(Halb, Halb);
// MoveTo(Halb, Halb);
// LineTo(Halb, DMesser);
Brush.Color:= clAqua;
// FloodFill(DreiV, DreiV, clAqua, fsBorder);
// SetViewportOrgEx(Handle, PTemp.X, PTemp.Y, nil);
end;
end;
Ich hatte die MoveTo, lineTo nicht gesehen beim ersten mal
Vielen Dank für eure Hilfe !
ich wollte jetzt die Fläche inerhalbt des Kreises füllen mit
FloodFill(ileft div 2, iTop div 2, clBtnFace, fsBorder);
aber irgendwie geht das nicht.... ich wollte einfach den Mittelpunkt berechnen.
ach ja die FloodFill Procedure wird ganz zum Schluss auf gerufen
edit00
ich habe den code in meiner GUI eingebaut:
Delphi-Quellcode:
procedure Kreis4Farben(cav: TCanvas; iLeft, iTop, DMesser: integer);
var
PTemp: TPoint;
Halb, Viertel, DreiV: integer;
begin
Halb := DMesser div 2;
Viertel := Halb div 2;
DreiV := Halb + Viertel;
with cav do
begin
Pen.Color:= clRed;
Arc(iLeft, iTop, DMesser, DMesser, DMesser, Halb, Halb, 0);
Pen.Color:= clYellow;
Arc(iLeft, iTop, DMesser, DMesser, Halb, 0, 0, Halb);
Pen.Color := clGreen;
Arc(iLeft, iTop, DMesser, DMesser, 0, Halb, Halb, DMesser);
Pen.Color := clAqua;
Arc(iLeft, iTop, DMesser, DMesser, Halb, DMesser, DMesser, Halb);
end;
end;
procedure TmyShape.DrawKreis;
var
r:TRect;
begin
r.left:=rx; r.top:=ry; r.Right:=r.left+rw; r.Bottom:=(r.Top+rh);
// Kreis4Farben(fcanvas,r.left,r.top,10);
fcanvas.Ellipse(r);
fcanvas.Pen.Assign(pen);
Kreis4Farben(fcanvas,rx,ry,10);
end;
und weiter angepasst. allerdings ist der Code leider zu langsam
bzw. es passiert nicht das was im Demo Programm passiert.
Da geht es nämlich genau so .
auf der Linken Bildschirmseite werden 2 lange Blikende Llinen angezeigt
ersetzt ich Kreis4Farben durch Elepsse geht es allerdings ohne die 4 farben !
Michael Springwald MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
|