Autor Beitrag
navarro2010
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 13.03.11 19:59 
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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               //pmCopy - Stiftfarbe von Color
      else
        Pen.Mode:=pmNotXor;            // pmNotXor - Umkehren bzw löschen
    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);// hier zeichnen wir eine Linie zu X und Y, die in der Prozedur enthalten sind
          2begin
               //hier musst du etwas sinnvolles einfügen, wie auch bei 3,4,5
             end;
          3: Image1.Canvas.Rectangle(x,y,x,y);   
          4: Image1.Canvas.Ellipse(x,y,x,y);  //hieraus soll der kreis werden
          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;    //pmCopy heißt, dass jetzt die Stiftfarbe aus dem DIalog verwendet wird
      Case grafikart of
        2: LineTo(x,y); //wie schon oben, musst du jetzt die richtigen Befehle zum Zeichnen geben.
        3: Rectangle(x0,y0,x1,y1);
        4: Ellipse(x0,y0,x1,y1);  //wie kann ich hier den kreis zeichnen lassen???
        5: Ellipse(x0,y0,x1,y1);
      end;
    end;
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 13.03.11 20:22 
wenn ich min eingebe, kommt eine fehlermeldung undefinierter benutzer.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 13.03.11 20:23 
Du hast da etwas überlesen...
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
uses
  Math;
Die Unit Math muss in die uses-Klausel.
navarro2010 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 13.03.11 20:33 
ich hab des jetzt mal soweit eingefüg. leider bekomm ich immer noch nicht einen kreis.
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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;       //schwarz
  Pinselfarbe:=clBlack;      //schwarz
  Stiftart:=psSolid;         //undurchsichtig
  Pinselart:=bsClear;        //durchsichtig
  Image1.Canvas.Pen.Color:=Stiftfarbe;
end;

procedure TForm1.PenButtonClick(Sender: TObject);   //Zeichenwerkzeuge 1-5
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;                      //jetzt wird gezeichnet
  x0:=X; y0:=Y;                        //Startpunkt
  x1:=X; y1:=Y;                        //Endpunkt - wird geändert bei Bewegung
  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               //pmCopy - Stiftfarbe von Color
      else
        Pen.Mode:=pmNotXor;            // pmNotXor - Umkehren bzw löschen
    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);// hier zeichnen wir eine Linie zu X und Y, die in der Prozedur enthalten sind
          2begin
               //hier musst du etwas sinnvolles einfügen, wie auch bei 3,4,5
             end;
          3: Image1.Canvas.Rectangle(x,y,x,y);   // Viereck.1.Versuch,noch Fehler!
          4: Image1.Canvas.Ellipse(x,y,x,y);
          5: Image1.Canvas.Ellipse(x,y,x,y);
        end;
        x1:=x;       //hier wird nach jeder Mausbewegung die X-Position der Maus gespeichert
        y1:=y;       //hier die Y-Position -> zusammen mit pmNotXor kann damit ein löschen des
      end;           //letzten Zeichenschrittes bewirkt werden.
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;    //pmCopy heißt, dass jetzt die Stiftfarbe aus dem DIalog verwendet wird
      Case grafikart of
        2: LineTo(x,y); //wie schon oben, musst du jetzt die richtigen Befehle zum Zeichnen geben.
        3: Rectangle(x0,y0,x1,y1);
        4: Ellipse(x0, y0, x1 + CircleDiameter, y1 + CircleDiameter);
        5: Ellipse(x0,y0,x1,y1);
      end;
    end;
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 13.03.11 20:35 
Naja, zumindest kopieren müsste man halt können... :roll: Nimm dir ein Beispiel an Guttenberg...
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
  Ellipse(x0, y0, x0 + CircleDiameter, y0 + CircleDiameter);					

user profile iconnavarro2010 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
        4: Ellipse(x0, y0, x1 + CircleDiameter, y1 + CircleDiameter);					
navarro2010 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 13.03.11 20:38 
auja, danke für den hinweis und für deine hilfe!!!!!
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 14.03.11 00:08 
Übrigens wäre deine Grafikart Variable ein Fall für eine enumeration.
www.christian-stelzm...rials_crashkurs.html