*TURBO*(Prof.)
Cadet 2nd Year
- Registriert
- März 2005
- Beiträge
- 19
Moin allerseits,
Ich und der Großteil des restlichen LKs haben sich leider mit Leistungskurs Informatik etwas verschätzt, was größtenteils an 3 "hardcore Delphiern
" liegt. Naja, ist ja auch egal, jedenfalls ist es mit dem derzeitigen Projekt jetzt noch extremer geworden, eigentlich hängen Alle ziemlich hinterher.
Das Projekt:
Eine Arbeitsoberfläche (Raum) in dem man beliebig Rechtecke und Kreise (Möbel) platzieren kann. Alle Möbel sollen sich beliebig verschieben und vergrößern lassen. Rechtecke sollen sich zusätzlich um jeden Winkel drehen lassen. Jedem Körper soll zur Unterscheidung (für das Programm) eine Andere Farbe zugeordnet werden, also z.B. der nächste Rotton, für das Auge nicht sichtbar, aber für das Programm unterscheidbar. DIe Möbel sollen in einer TList undergegebracht werden. Das Verschieben, Drehen und Größe ändern sollte möglichst über die Maus möglich sein, also Linksklick, Rad und Rechtsclick.
Soweit so gut, haben also 3 Klassen deklariert:
TMoebel mit den Funktionen und Prozeduren:
procedure loesche;
procedure verschiebe;
TKreisMoebel demnach nur Zeichnen.
procedure GroesseAendern;
function GradZuBogenmass: real;
function BogenmassZuGrad: real;
TMoebel soll diese dinge virtuell Für TRechteckMoebel und TKreisMoebel bereitstellen.
TRechteckMoebel erhält also zusätlich: function Zeichne; und Function Drehen;
TKreisMoebel demnach nur Zeichne.
Für die Arbeitsoberfläche haben wir TImage gewählt.
Zusätzlich haben wir noch diese Klasse:
TfrmEinrichtungsprogramm = class(TForm)
imgRechteck: TImage;
cmdTest: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
txtWinkel: TEdit;
procedure FormCreate(Sender: TObject);
procedure cmdTestClick(Sender: TObject);
Unser derzeitiger Stand ist, dass bei Programmstart sofort ein gezeichnetes Rechteck vorhanden ist, wir haben also noch keine TList und nichts zum Rechteck erstellen "gebaut".
Wir haben uns zuerst dem Drehen gewidmet, was auch so weit funktioniert (den Drehwinkel geben wir über ein Edit Feld ein) nach mehrern eingaben wird das Rechteck jedoch zunehmen kleiner und verschwindet schließlich ganz.
procedure TRechteckMoebel.drehen;
begin
with frmEinrichtungsprogramm.imgRechteck.canvas do
begin
pen.color:=clwhite;
brush.color:=clwhite;
polygon(Points);
end;
winkel:=StrToInt(frmEinrichtungsprogramm.txtWinkel.Text);
PosX0:=Points[0].x;
PosY0:=Points[0].y;
PosX1:=Points[1].x;
PosY1:=Points[1].y;
GesamtStreckeA0:=PosX1-PosX0;
TeilStreckeA0:=cos(Moebel.GradZuBogenmass)*GesamtStreckeA0;
TeilStreckeB0:=sin(Moebel.GradZuBogenmass)*GesamtStreckeA0;
PosX1Neu:=TeilStreckeA0+PosX0;
PosY1Neu:=TeilstreckeB0+PosY0;
points[1].X:=round(PosX1Neu);
points[1].Y:=round(PosY1Neu);
PosX1:=Points[1].x;
PosY1:=Points[1].y;
PosX2:=Points[2].x;
PosY2:=Points[2].y;
winkel:=winkel+90;
GesamtStreckeA1:=GesamtStreckeA0;
TeilStreckeA1:=cos(Moebel.GradZuBogenmass)*GesamtStreckeA1;
TeilStreckeB1:=sin(Moebel.GradZuBogenmass)*GesamtStreckeA1;
PosX2Neu:=TeilStreckeA1+PosX1;
PosY2Neu:=TeilstreckeB1+PosY1;
points[2].X:=round(PosX2Neu);
points[2].Y:=round(PosY2Neu);
PosX2:=Points[2].x;
PosY2:=Points[2].y;
PosX3:=Points[3].x;
PosY3:=Points[3].y;
winkel:=winkel+90;
GesamtStreckeA2:=GesamtStreckeA0;
TeilStreckeA2:=cos(Moebel.GradZuBogenmass)*GesamtStreckeA2;
TeilStreckeB2:=sin(Moebel.GradZuBogenmass)*GesamtStreckeA2;
PosX3Neu:=TeilStreckeA2+PosX2;
PosY3Neu:=TeilstreckeB2+PosY2;
points[3].X:=round(PosX3Neu);
points[3].Y:=round(PosY3Neu);
frmEinrichtungsprogramm.Edit3.text:=IntToStr(round(PosX1Neu));
frmEinrichtungsprogramm.Edit4.text:=IntToStr(round(PosY1Neu));
with frmEinrichtungsprogramm.imgRechteck.canvas do
begin
pen.color:=clred;
brush.color:=clred;
polygon(Points);
end;
end;
So, insbesondere bin ich an Gesamtlösungsansätzen interessiert, also wie ich drehen, Größe ändern e.t.c. auf die Maus bekomme, wie das Verschieben funktionieren könnte, also alles wie oben beschrieben.
Falls etwas fehlt, fragt bitte nach.
Ich bin für jegliche Hilfe dankbar.
Grüße
Ich und der Großteil des restlichen LKs haben sich leider mit Leistungskurs Informatik etwas verschätzt, was größtenteils an 3 "hardcore Delphiern

Das Projekt:
Eine Arbeitsoberfläche (Raum) in dem man beliebig Rechtecke und Kreise (Möbel) platzieren kann. Alle Möbel sollen sich beliebig verschieben und vergrößern lassen. Rechtecke sollen sich zusätzlich um jeden Winkel drehen lassen. Jedem Körper soll zur Unterscheidung (für das Programm) eine Andere Farbe zugeordnet werden, also z.B. der nächste Rotton, für das Auge nicht sichtbar, aber für das Programm unterscheidbar. DIe Möbel sollen in einer TList undergegebracht werden. Das Verschieben, Drehen und Größe ändern sollte möglichst über die Maus möglich sein, also Linksklick, Rad und Rechtsclick.
Soweit so gut, haben also 3 Klassen deklariert:
TMoebel mit den Funktionen und Prozeduren:
procedure loesche;
procedure verschiebe;
TKreisMoebel demnach nur Zeichnen.
procedure GroesseAendern;
function GradZuBogenmass: real;
function BogenmassZuGrad: real;
TMoebel soll diese dinge virtuell Für TRechteckMoebel und TKreisMoebel bereitstellen.
TRechteckMoebel erhält also zusätlich: function Zeichne; und Function Drehen;
TKreisMoebel demnach nur Zeichne.
Für die Arbeitsoberfläche haben wir TImage gewählt.
Zusätzlich haben wir noch diese Klasse:
TfrmEinrichtungsprogramm = class(TForm)
imgRechteck: TImage;
cmdTest: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
txtWinkel: TEdit;
procedure FormCreate(Sender: TObject);
procedure cmdTestClick(Sender: TObject);
Unser derzeitiger Stand ist, dass bei Programmstart sofort ein gezeichnetes Rechteck vorhanden ist, wir haben also noch keine TList und nichts zum Rechteck erstellen "gebaut".
Wir haben uns zuerst dem Drehen gewidmet, was auch so weit funktioniert (den Drehwinkel geben wir über ein Edit Feld ein) nach mehrern eingaben wird das Rechteck jedoch zunehmen kleiner und verschwindet schließlich ganz.
procedure TRechteckMoebel.drehen;
begin
with frmEinrichtungsprogramm.imgRechteck.canvas do
begin
pen.color:=clwhite;
brush.color:=clwhite;
polygon(Points);
end;
winkel:=StrToInt(frmEinrichtungsprogramm.txtWinkel.Text);
PosX0:=Points[0].x;
PosY0:=Points[0].y;
PosX1:=Points[1].x;
PosY1:=Points[1].y;
GesamtStreckeA0:=PosX1-PosX0;
TeilStreckeA0:=cos(Moebel.GradZuBogenmass)*GesamtStreckeA0;
TeilStreckeB0:=sin(Moebel.GradZuBogenmass)*GesamtStreckeA0;
PosX1Neu:=TeilStreckeA0+PosX0;
PosY1Neu:=TeilstreckeB0+PosY0;
points[1].X:=round(PosX1Neu);
points[1].Y:=round(PosY1Neu);
PosX1:=Points[1].x;
PosY1:=Points[1].y;
PosX2:=Points[2].x;
PosY2:=Points[2].y;
winkel:=winkel+90;
GesamtStreckeA1:=GesamtStreckeA0;
TeilStreckeA1:=cos(Moebel.GradZuBogenmass)*GesamtStreckeA1;
TeilStreckeB1:=sin(Moebel.GradZuBogenmass)*GesamtStreckeA1;
PosX2Neu:=TeilStreckeA1+PosX1;
PosY2Neu:=TeilstreckeB1+PosY1;
points[2].X:=round(PosX2Neu);
points[2].Y:=round(PosY2Neu);
PosX2:=Points[2].x;
PosY2:=Points[2].y;
PosX3:=Points[3].x;
PosY3:=Points[3].y;
winkel:=winkel+90;
GesamtStreckeA2:=GesamtStreckeA0;
TeilStreckeA2:=cos(Moebel.GradZuBogenmass)*GesamtStreckeA2;
TeilStreckeB2:=sin(Moebel.GradZuBogenmass)*GesamtStreckeA2;
PosX3Neu:=TeilStreckeA2+PosX2;
PosY3Neu:=TeilstreckeB2+PosY2;
points[3].X:=round(PosX3Neu);
points[3].Y:=round(PosY3Neu);
frmEinrichtungsprogramm.Edit3.text:=IntToStr(round(PosX1Neu));
frmEinrichtungsprogramm.Edit4.text:=IntToStr(round(PosY1Neu));
with frmEinrichtungsprogramm.imgRechteck.canvas do
begin
pen.color:=clred;
brush.color:=clred;
polygon(Points);
end;
end;
So, insbesondere bin ich an Gesamtlösungsansätzen interessiert, also wie ich drehen, Größe ändern e.t.c. auf die Maus bekomme, wie das Verschieben funktionieren könnte, also alles wie oben beschrieben.
Falls etwas fehlt, fragt bitte nach.
Ich bin für jegliche Hilfe dankbar.
Grüße
Zuletzt bearbeitet: