Autor |
Beitrag |
navarro2010
      
Beiträge: 25
Erhaltene Danke: 1
|
Verfasst: So 13.03.11 19:50
wie kann ich einen kreis zeichnen lassen? ich möchte diesen kreis auf einem image feld zeichen lassen und wollte es erst mit einer ellipse veruschen, bin dann aber nicht weitergekommen. vielleicht kann mir jemand weiterhelfen?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.03.11 19:54
Wenn du eine Ellipse mit derselben Breite wie Höhe zeichnest, ist das ein Kreis. Das ist also schon richtig.
Wie hast du es denn versucht?
|
|
navarro2010 
      
Beiträge: 25
Erhaltene Danke: 1
|
Verfasst: So 13.03.11 19:59
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;
type TForm1 = class(TForm) Image1: TImage; ColorDialog1: TColorDialog; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Panel1: TPanel; OpenButton: TSpeedButton; SaveButton: TSpeedButton; NewButton: TSpeedButton; ComboBox2: TComboBox; ComboBox1: TComboBox; PenButton: TSpeedButton; LineButton: TSpeedButton; RectButton: TSpeedButton; CircleButton: TSpeedButton; EllipseButton: TSpeedButton; PenColorButton: TSpeedButton; BrushColorButton: TSpeedButton; xButton: TSpeedButton; yButton: TSpeedButton; ExitButton: TSpeedButton; procedure FormCreate(Sender: TObject); procedure PenButtonClick(Sender: TObject); procedure LineButtonClick(Sender: TObject); procedure RectButtonClick(Sender: TObject); procedure CircleButtonClick(Sender: TObject); procedure EllipseButtonClick(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure PenColorButtonClick(Sender: TObject); procedure BrushColorButtonClick(Sender: TObject); procedure OpenButtonClick(Sender: TObject); procedure SaveButtonClick(Sender: TObject); procedure NewButtonClick(Sender: TObject); procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ComboBox2DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ExitButtonClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} var Grafikart: Integer; Stiftart: TPenStyle; Pinselart: TBrushStyle; Zeichnen: Boolean; Stiftfarbe, Pinselfarbe: TColor; x0,y0,x1,y1: LongInt;
procedure TForm1.FormCreate(Sender: TObject); begin Grafikart:=1; Stiftfarbe:=clBlack; Pinselfarbe:=clBlack; Stiftart:=psSolid; Pinselart:=bsClear; Image1.Canvas.Pen.Color:=Stiftfarbe; end;
procedure TForm1.PenButtonClick(Sender: TObject); begin Grafikart:=1; end;
procedure TForm1.LineButtonClick(Sender: TObject); begin Grafikart:=2; end;
procedure TForm1.RectButtonClick(Sender: TObject); begin Grafikart:=3; end;
procedure TForm1.CircleButtonClick(Sender: TObject); begin Grafikart:=4; end;
procedure TForm1.EllipseButtonClick(Sender: TObject); begin Grafikart:=5; end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Zeichnen:=True; x0:=X; y0:=Y; with Image1.Canvas do begin Pen.Color:=Stiftfarbe; Pen.Style:=Stiftart; Brush.Color:=Pinselfarbe; Brush.Style:=Pinselart; MoveTo(X,Y); if Grafikart=1 then Pen.Mode:=pmCopy else Pen.Mode:=pmNotXor; end; end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Zeichnen then with Image1.Canvas do begin Case Grafikart of 1: Image1.Canvas.LineTo(x,y); 2: begin end; 3: Image1.Canvas.Rectangle(x,y,x,y); 4: Image1.Canvas.Ellipse(x,y,x,y); 5: Image1.Canvas.Ellipse(x,y,x,y); end; x1:=x; y1:=y; end; end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Zeichnen:=False; with Image1.Canvas do begin Pen.Mode:=pmCopy; Case grafikart of 2: LineTo(x,y); 3: Rectangle(x0,y0,x1,y1); 4: Ellipse(x0,y0,x1,y1); 5: Ellipse(x0,y0,x1,y1); end; end; end; |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.03.11 20:08
Nun, was du machen möchtest ist ja eine Ellipse mit gleichen Seitenlängen zu zeichnen. Das heißt, du musst dir die Seitenlänge berechnen und die dann in beide Richtungen benutzen.
Am sinnvollsten dürfte für eine Mausauswahl sein, wenn du die kleinere der beiden Ausdehnungen benutzt. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| uses Math;
var CircleDiameter: Integer; begin CircleDiameter := Min(x1 - x0, y1 - y0); Ellipse(x0, y0, x0 + CircleDiameter, y0 + CircleDiameter); |
|
|
navarro2010 
      
Beiträge: 25
Erhaltene Danke: 1
|
Verfasst: So 13.03.11 20:15
erst einaml vielen dank für deine hilfe. aber wie und wo kann ich deinen vorschlag in mein programm einfügen?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 13.03.11 20:16
Dort wo du halt den Kreis zeichnen willst. Ist ja nicht so schwer rauszufinden, immerhin hast du den Rest ja auch alleine geschafft.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
navarro2010 
      
Beiträge: 25
Erhaltene Danke: 1
|
Verfasst: So 13.03.11 20:22
wenn ich min eingebe, kommt eine fehlermeldung undefinierter benutzer.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.03.11 20:23
|
|
navarro2010 
      
Beiträge: 25
Erhaltene Danke: 1
|
Verfasst: So 13.03.11 20:33
ich hab des jetzt mal soweit eingefüg. leider bekomm ich immer noch nicht einen kreis.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Math;
type TForm1 = class(TForm) Image1: TImage; ColorDialog1: TColorDialog; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Panel1: TPanel; OpenButton: TSpeedButton; SaveButton: TSpeedButton; NewButton: TSpeedButton; ComboBox2: TComboBox; ComboBox1: TComboBox; PenButton: TSpeedButton; LineButton: TSpeedButton; RectButton: TSpeedButton; CircleButton: TSpeedButton; EllipseButton: TSpeedButton; PenColorButton: TSpeedButton; BrushColorButton: TSpeedButton; xButton: TSpeedButton; yButton: TSpeedButton; ExitButton: TSpeedButton; procedure FormCreate(Sender: TObject); procedure PenButtonClick(Sender: TObject); procedure LineButtonClick(Sender: TObject); procedure RectButtonClick(Sender: TObject); procedure CircleButtonClick(Sender: TObject); procedure EllipseButtonClick(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure PenColorButtonClick(Sender: TObject); procedure BrushColorButtonClick(Sender: TObject); procedure OpenButtonClick(Sender: TObject); procedure SaveButtonClick(Sender: TObject); procedure NewButtonClick(Sender: TObject); procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ComboBox2DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ExitButtonClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} var Grafikart: Integer; Stiftart: TPenStyle; Pinselart: TBrushStyle; Zeichnen: Boolean; Stiftfarbe, Pinselfarbe: TColor; x0,y0,x1,y1: LongInt; CircleDiameter: Integer;
procedure TForm1.FormCreate(Sender: TObject); begin Grafikart:=1; Stiftfarbe:=clBlack; Pinselfarbe:=clBlack; Stiftart:=psSolid; Pinselart:=bsClear; Image1.Canvas.Pen.Color:=Stiftfarbe; end;
procedure TForm1.PenButtonClick(Sender: TObject); begin Grafikart:=1; end;
procedure TForm1.LineButtonClick(Sender: TObject); begin Grafikart:=2; end;
procedure TForm1.RectButtonClick(Sender: TObject); begin Grafikart:=3; end;
procedure TForm1.CircleButtonClick(Sender: TObject); begin Grafikart:=4; end;
procedure TForm1.EllipseButtonClick(Sender: TObject); begin Grafikart:=5; end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Zeichnen:=True; x0:=X; y0:=Y; x1:=X; y1:=Y; with Image1.Canvas do begin Pen.Color:=Stiftfarbe; Pen.Style:=Stiftart; Brush.Color:=Pinselfarbe; Brush.Style:=Pinselart; MoveTo(X,Y); if Grafikart=1 then Pen.Mode:=pmCopy else Pen.Mode:=pmNotXor; end; end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Zeichnen then with Image1.Canvas do begin Case Grafikart of 1: Image1.Canvas.LineTo(x,y); 2: begin end; 3: Image1.Canvas.Rectangle(x,y,x,y); 4: Image1.Canvas.Ellipse(x,y,x,y); 5: Image1.Canvas.Ellipse(x,y,x,y); end; x1:=x; y1:=y; end; end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Zeichnen:=False; CircleDiameter := Min(x1 - x0, y1 - y0); with Image1.Canvas do begin Pen.Mode:=pmCopy; Case grafikart of 2: LineTo(x,y); 3: Rectangle(x0,y0,x1,y1); 4: Ellipse(x0, y0, x1 + CircleDiameter, y1 + CircleDiameter); 5: Ellipse(x0,y0,x1,y1); end; end; end; |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.03.11 20:35
|
|
navarro2010 
      
Beiträge: 25
Erhaltene Danke: 1
|
Verfasst: So 13.03.11 20:38
auja, danke für den hinweis und für deine hilfe!!!!!
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 14.03.11 00:08
Übrigens wäre deine Grafikart Variable ein Fall für eine enumeration.
www.christian-stelzm...rials_crashkurs.html
|
|
|