Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kreis in Vier teile einteilen ? (https://www.delphipraxis.net/93729-kreis-vier-teile-einteilen.html)

mimi 11. Jun 2007 10:48

Re: Kreis in Vier teile einteilen ?
 
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 !

mimi 11. Jun 2007 11:09

Re: Kreis in Vier teile einteilen ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Demo Programm passiert leider das gleiche. Wenn ich den Code mehrmals aufrufe.

Im Anhang gibt es ein Bild !

Gut ich weiß jetzt wie es geht:
ich muss ileft + dMesser nehmen dann scheint es zu gehen

Edit00
Geht leider doch nicht ! :(

bitsetter 11. Jun 2007 11:44

Re: Kreis in Vier teile einteilen ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

keine Ahnung warum es bei dir nicht funktioniert, aber in Delphi geht es so:
Delphi-Quellcode:
procedure Kreis4Farben(cav: TCanvas; iLeft, iTop, DMesser: integer);
var
  PTemp: TPoint;
  Halb: integer;
begin
  Halb := DMesser div 2;
  with cav do
  begin
    //GetViewportOrgEx(Handle, PTemp);
    //SetViewportOrgEx(Handle, iLeft, iTop, nil);

    cav.Ellipse(0, 0, DMesser, DMesser);
    Brush.Color := clSilver;
    FloodFill(Halb, Halb, Pen.Color, fsBorder);

    Pen.Color:= clRed;
    Arc(0, 0, DMesser, DMesser, DMesser, Halb, Halb, 0);

    Pen.Color:= clYellow;
    Arc(0, 0, DMesser, DMesser, Halb, 0, 0, Halb);

    Pen.Color := clGreen;
    Arc(0, 0, DMesser, DMesser, 0, Halb, Halb, DMesser);

    Pen.Color := clAqua;
    Arc(0, 0, DMesser, DMesser, Halb, DMesser, DMesser, Halb);
    //SetViewportOrgEx(Handle, PTemp.X, PTemp.Y, nil);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Kreis4Farben(image1.Canvas,0, 0, 120);
end;

mimi 11. Jun 2007 11:58

Re: Kreis in Vier teile einteilen ?
 
naja es geht ja auch, nur ich möchte die Positions angaben anders haben.

bei 0,0 geht es.

nur möchte ich den Kreis auch wo anders angezeigt bekommen !

z.b. an x:20,y:40

bitsetter 11. Jun 2007 12:03

Re: Kreis in Vier teile einteilen ?
 
So jetzt schön kompliziert da ohne ViewportOrgEx.

Delphi-Quellcode:
procedure Kreis4Farben(cav: TCanvas; iLeft, iTop, DMesser: integer);
var
  Halb: integer;
begin
  Halb := DMesser div 2;
  with cav do
  begin
    Brush.Color := clSilver;
    Ellipse(iLeft, iTop, iLeft + DMesser, iTop + DMesser);

    Pen.Color := clRed;
    Arc(iLeft, iTop, iLeft + DMesser, iTop + DMesser, iLeft + DMesser, iTop + Halb, iLeft + Halb, iTop);

    Pen.Color := clYellow;
    Arc(iLeft, iTop, iLeft + DMesser, iTop + DMesser, iLeft + Halb, iTop, iLeft, iTop + Halb);

    Pen.Color := clGreen;
    Arc(iLeft, iTop, iLeft + DMesser, iTop + DMesser, iLeft, iTop + Halb,iLeft + Halb, iTop + DMesser);

    Pen.Color := clAqua;
    Arc(iLeft, iTop, iLeft + DMesser, iTop + DMesser, iLeft + Halb, iTop + DMesser, iLeft + DMesser, iTop + Halb);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Kreis4Farben(image1.Canvas,10, 30, 120);
   //Kreis4Farben(image1.Canvas,40, 80, 120);
end;
EDIT: Es geht auch ohne FloodFill().

mimi 11. Jun 2007 12:22

Re: Kreis in Vier teile einteilen ?
 
Vielen Dank für deine Mühe.

jetzt habe ich nur noch eine Frage:
Wie kann ich den Radius mit Größen angeben berechnen ?
also ich habe ein Trect und aus diesem Trect soll er eine 4FarbenKreis erzeugen


Und nochmals VIELEN DANK !!!!
Du wirst in meinem Projekt auch namentlich erwähnt !

DeddyH 11. Jun 2007 12:25

Re: Kreis in Vier teile einteilen ?
 
Hö? Was meinst Du denn jetzt? Radius = (Rect.Right - Rect.Left) div 2

mimi 11. Jun 2007 12:30

Re: Kreis in Vier teile einteilen ?
 
ich meine den wert für DMess.

bitsetter 11. Jun 2007 12:33

Re: Kreis in Vier teile einteilen ?
 
Delphi-Quellcode:
 Durchmesser:= Rect.Right - Rect.Left;

DeddyH 11. Jun 2007 12:34

Re: Kreis in Vier teile einteilen ?
 
Zitat:

Zitat von bitsetter
Delphi-Quellcode:
 Durchmesser:= Rect.Right - Rect.Left;

Eigentlich logisch, oder? :zwinker: :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz