Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 10: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)
  Mit Zitat antworten Zitat