AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Kreis in Vier teile einteilen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Kreis in Vier teile einteilen ?

Ein Thema von mimi · begonnen am 10. Jun 2007 · letzter Beitrag vom 1. Mai 2012
Antwort Antwort
Seite 2 von 3     12 3      
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
mimi

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

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 11:09
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 !
Miniaturansicht angehängter Grafiken
bildschirmfoto-form1_150.png  
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 11:44
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;
Miniaturansicht angehängter Grafiken
kreis2_783.png  
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
mimi

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

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 11:58
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
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 12:03
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().
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
mimi

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

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 12:22
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 !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 12:25
Hö? Was meinst Du denn jetzt? Radius = (Rect.Right - Rect.Left) div 2
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mimi

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

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 12:30
ich meine den wert für DMess.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 12:33
 Durchmesser:= Rect.Right - Rect.Left;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Kreis in Vier teile einteilen ?

  Alt 11. Jun 2007, 12:34
Zitat von bitsetter:
 Durchmesser:= Rect.Right - Rect.Left;
Eigentlich logisch, oder?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.
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