WinFuture-Forum.de: Delphi Programm "paint" - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 3 Seiten +
  • 1
  • 2
  • 3

Delphi Programm "paint" Dickes Problem


#1 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

  geschrieben 03. Januar 2006 - 20:23

hi,

also erstmal was grundlegendes:
Ich "durfte" 2 Jahre Java lernen unter absolut unfähigen Lehrkräften. Dies war 2x in der 11. Klassen. Mittlerweile habe ich jedoch die Schule gewechselt und auch dort wieder Informatik belegt - nur wird dort jetzt Delphi unterrichtet. Der Lehrer, wieder mit sehr wenig Ahnung fand es auch nach mehrmaligen Nachfragen nicht wichtig, den Neuankömmlingen (es waren insg. 4 von 11) mal wenigstens etwas über die Basics und so zu vermitteln. Jetzt werden einige sagen: wenn man das selbst aneignet, kann man es am besten. Viel anderes blieb uns auch nicht übrig, aber wirklich beeindruckend ist das nun wirklich nicht. Da wir auch noch andere Fächer haben, hatten wir nun grade mal die Zeit, so ein paar Grundlagen (ein Taschenrechner wars am Ende.. in 8 Wochen) anzueignen und das wars. Da dem Lehrer allerdings dadurch die Zeit weggerannt ist und er kaum da war, haben wir nun eine Hausarbeit bekommen, die jeder selbstständig lösen muss. (Jeder Schüler muss eine andere Version abgeben) Das Problem ist nur: Wir könnens nicht!

Die Aufgabe besteht darin, ein Programm zu kreieren, dass bei Angabe von Maßeinheiten, Radius, Seitenlängen etc. die entsprechende Figur ausgibt/zeichnet. Dies soll in Anlehnung an das gute alte Paint geschehen.

Jetzt sind wir natürlich ordentlich vor den Kopf gestoßen, da keiner so Recht weiß, wo er ansetzen soll. Erschwerend kommt hinzu, dass dies in OOP (objektorientierter Programmierweise) stattfinden soll, was bisher überhaupt noch keiner verstanden, selbst die, die in 11 auch schon Delphi hatten. Die große Hilfe des Lehrers war: Verwendet mehrere Units.

Toll! Das hat uns echt geholfen. Deprimierend wurde es für uns, als es hieß: Wenn die obigen Anforderungen erfüllt sind, gibt es die Note ausreichend - ganz klar zu wenig! Nichtsdestotrotz muss ich nun irgendwie dieses Programm hinzaubern. Ein fertiges aus dem Netz zu ziehen scheidet aus, da es nur viel zu komplizierte Programme gibt, die mit 10 Units aufwarten, bisschen zu hoch gegriffen.
Nach Codeschnipseln zu suchen ist für mich sehr schwer, da ich gar nicht genau weiß, was ich suchen muss. Das einzige was ich Delphi kann ist diese "Form" zu erstellen.

Als Zusatzpunkte kann man sich übrigens Punkte verdienen, umso mehr "Schnickschnack" man einbaut. Z.B. die Farbe wechseln der gezeichneten Formen, Hintergrundmusik, Ladebalken, Icons etc.

Ich bin für jeden Tipp dankbar! Seien es Codeschnipsel, Ansätze, Hilfestellungen etc. Vielen Dank schonmal im Vorraus!

P.S. Ich habe das bewusst nicht ins Hausuafgabenforum gestellt, weil es mir a. zu komplex dafür erscheint und b. weit über ne Hausaufgabe hinaus geht. Die oben beschriebene ist keine frei erfundene Mitleidsgeschichte sondern meine Realität.
0

Anzeige



#2 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 03. Januar 2006 - 20:38

Ich weiß zwar nicht genau was du machen sollst.

Also den Teil mit den Radien usw?
Wie sollen die Formen aussehen..


Aber ich kann dir sagen wie man zeichnet, wennn du willst auch mit codeschnipseln ^^.


Also als erstes musst du wissen das man auf ein canvas bzw TImage zeichnet.
Und dann kann man Pixel ausfüllen, mit verschiedenen Funktionen auch mehrere.
Die Farbe kann man natürlich auch ändern, sowie Breite usw.


Ich habe hier mal ein Beispiel von mir wo ich ein Koordinatensystem zeichnen lasse und dazu die Funktionen.
Wenn du dieses sehen willst könnte ich den Code posten.

Dieser Beitrag wurde von tavoc bearbeitet: 03. Januar 2006 - 20:45

your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#3 Mitglied ist offline   Emicom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 417
  • Beigetreten: 07. Februar 05
  • Reputation: 0
  • Wohnort:Irgendwo an der Grenze zur Schweiz

geschrieben 03. Januar 2006 - 20:44

Off-Topic: @ He4db4nger: Auf welcher Schule bist du?
0

#4 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 03. Januar 2006 - 20:49

Beitrag anzeigenZitat (Emicom: 03.01.2006, 20:44)

Off-Topic: @ He4db4nger: Auf welcher Schule bist du?

Es wird wohl ein Gymnasium sein, wenn er von der 11ten Klasse spricht.
your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#5 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 03. Januar 2006 - 21:19

Aus den Anfängen meiner Programmierung, der Code ist ein bissel unsauber, aber für die 11te dürfte er reichen
function achsen(einheiten:integer; zahl:integer):boolean;
var i:integer;
begin
if zahl=1 then
begin
hoehex:=form1.Graphl.width;
hoehey:=form1.Graphl.height;
x:=round(hoehex/2)+vxl;
y:=round(hoehey/2)+vyl;
step:=(hoehex/einheiten);
for i:=0 to einheiten do
begin
  with form1.Graphl.Canvas do
  begin
	Pen.Color:=clsilver;
	Pen.Width:=1;
	moveto(round(i/(1/step)),0);
	lineto(round(i/(1/step)),hoehey);
	moveto(0,round(i/(1/step)));
	lineto(hoehex,round(i/(1/step)));
  end;
end;
with form1.Graphl.Canvas do
begin
  Pen.Color:=clnavy;
  Pen.Width:=1;
  moveto(x,0);
  lineto(x,hoehey);
  moveto(0,y);
  lineto(hoehex,y);
end;
with form1.Graphl.Canvas do
begin
  Pen.Color:=clnavy;
  Pen.Width:=1;
  textout(x+10,0,'y');
  textout(2*round(hoehex/2)-5,y+5,'x');
end;
with form1.Graphl.Canvas do
begin
  Pen.Color:=clnavy;
  Pen.Width:=1;
  moveto(x,0);
  lineto(x-5,10);
  moveto(x+1,0);
  lineto(x+6,10);
  moveto(hoehey,y);
  lineto(hoehey-10,y-5);
  moveto(hoehey,y+1);
  lineto(hoehey-10,y+6);
end;
zooml:=einheiten;
end;
if zahl=2 then
begin
hoehex:=form1.Graphq.width;
hoehey:=form1.Graphq.height;
x:=round(hoehex/2)+vxq;
y:=round(hoehey/2)+vyq;
step:=(hoehex/einheiten);
for i:=0 to einheiten do			  //quadrate zeichnen
begin
  with form1.Graphq.Canvas do
  begin
	Pen.Color:=clsilver;
	Pen.Width:=1;
	moveto(round(i/(1/step)),0);
	lineto(round(i/(1/step)),hoehey);
	moveto(0,round(i/(1/step)));
	lineto(hoehex,round(i/(1/step)));
  end;
end;
with form1.Graphq.Canvas do		 //blaue linie zeichnen
begin
  Pen.Color:=clnavy;
  Pen.Width:=1;
  moveto(x,0);
  lineto(x,hoehey);
  moveto(0,y);
  lineto(hoehex,y);
end;
with form1.Graphq.Canvas do
begin
  Pen.Color:=clnavy;
  Pen.Width:=1;
  textout(x+10,0,'y');
  textout(2*round(hoehex/2)-5,y+5,'x');
end;
with form1.Graphq.Canvas do
begin
  Pen.Color:=clnavy;
  Pen.Width:=1;
  moveto(x,0);
  lineto(x-5,10);
  moveto(x+1,0);
  lineto(x+6,10);
  moveto(hoehey,y);
  lineto(hoehey-10,y-5);
  moveto(hoehey,y+1);
  lineto(hoehey-10,y+6);
end;
zoomq:=einheiten;
end;
result:=true;
end;


function zeichnel(einheiten:integer):boolean;
var x1,x2,y1,y2:integer;
begin
if senkrecht=0 then
begin
  x1:=round(einheiten*step);
  x2:=round(-einheiten*step);
  y1:=y-round(strtofloat(m)*x1+strtofloat(op1+n)*step);
  y2:=y-round(strtofloat(m)*x2+strtofloat(op1+n)*step);
  with form1.Graphl.Canvas do
  begin
	Pen.Color:=clblack;
	Pen.Width:=1;
	moveto((x1+x),y1);
	lineto((x2+x),y2);
  end;
end;
if senkrecht=1 then
begin
  with form1.Graphl.Canvas do
  begin
	Pen.Color:=clblack;
	Pen.Width:=1;
	moveto(round(step*strtoint(m))+x,0);
	lineto(round(step*strtoint(m))+x,hoehey);
  end;
end;
end;

function zeichneq(einheiten:integer):boolean;
var x1,x2,y1,y2,i,k:integer;
begin
k:=0;
while (Feld2[k]<>'^') and (k<255) do k:=k+1;
if Feld2[k]<>'^' then exit;
for i:=-hoehex to hoehex do
begin
  x1:=round(i-((strtofloat(b)/strtofloat(a))/2)*step);
  x2:=round(i+1-((strtofloat(b)/strtofloat(a))/2*step));
  if b<>'0' then
  begin
  y1:=hoehey-round((strtofloat(a)*(i)*(i))/step)+round((SQR(strtofloat(b)/strtofloat(a))/4+(strtofloat©/strtofloat(a)))*step)-round(2*strtofloat©*step);
  y2:=hoehey-round((strtofloat(a)*(i+1)*(i+1))/step)+round((SQR(strtofloat(b)/strtofloat(a))/4+(strtofloat©/strtofloat(a)))*step)-round(2*strtofloat©*step);
  end
  else
  begin
  y1:=hoehey-round((strtofloat(a)*(i)*(i))/step)-round(strtofloat©*step);
  y2:=hoehey-round((strtofloat(a)*(i+1)*(i+1))/step)-round(strtofloat©*step);
  end;
  with form1.Graphq.Canvas do
  begin
	Pen.Color:=clblack;
	Pen.Width:=1;
	moveto((x1)+x,y1-round(hoehey/2)-1+vyq);
	lineto((x2)+x,y2-round(hoehey/2)-1+vyq);
  end;
end;
end;




Mit moveto und lineto zeichnest du linien...

Dieser Beitrag wurde von stefanra bearbeitet: 16. Juli 2006 - 09:45

your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#6 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

geschrieben 03. Januar 2006 - 22:37

12te Klasse ^^ (nähe von mainz)
vielen dank schonmal für eure tipps.

@tavoc: werde mir morgen mal deinen code zu Rate ziehen. Muss den dann auch nochmal nachvollziehen, muss ja schließlich sagen können, was da gemacht wird. Vielen Dank schonmal.

Gemacht werden soll ein Canvas Feld, in dem Figuren/Formen gezeichnet werden, die die bestimmten Eingaben (Radius, Seitenlänge, Strichdicke etc.) berücksichtigen. Wenn das steht, muss ich noch irgendwelche Gimmicks einbauen (Hitnergrundmusik, "Meldungen" und son Zeugs). Aber das steht erstmal hinten an. Hauptsache die Grundfunktion steht.

ach tavoc, ist das untere Programm das oben beschriebene mit dem Koordinatensystem? müsste sein, soweit ich das erkennen kann als delphi-n00b ^^

Dieser Beitrag wurde von He4db4nger bearbeitet: 03. Januar 2006 - 22:39

0

#7 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 04. Januar 2006 - 07:43

Ja, es ein Teil des Programmes, dieser hier gepostete bezieht sich nur darauf wie gezeichnet wird, die restlichen Berechnungen/Abfragen brauchst du ja nicht.

Falls du Fragen dazu hast frag ruhig.
your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#8 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

geschrieben 04. Januar 2006 - 18:36

ich hab jetzt mal den teil in delphi reinkopiert und versucht, die variablen zu definieren, jedoch kommen da haufenweise fehlermeldungen..
ich hab jetzt nochma bei google gekuckt und da noch ein paar codeschnipsel gefunden.. mal sehen, vll.schaff ichs ja, die zu verknüpfen.. da sind immer nur für die geometrischen einzelformen die beispiele gegeben, was mir auch nich so viel bringt...

ansonsten müsste ich dein programm weiter wurschteln.. wenn man allerdings keinen plan hat verdammt schwierig..
0

#9 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

geschrieben 04. Januar 2006 - 18:55

ok,ich mach das jetzt anders... ich bastel mir selbst nen grundstock, und da wos hängt, frag ich dann nach ^^ is wahrscheinlich einfacher ^^

ok,ich mach das jetzt anders... ich bastel mir selbst nen grundstock, und da wos hängt, frag ich dann nach ^^ is wahrscheinlich einfacher ^^
0

#10 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 04. Januar 2006 - 19:06

ich könnte dir auch das programm schicken wenn du willst ...
your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#11 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

geschrieben 05. Januar 2006 - 18:24

wäre sau nett, das problem ist nur, ich muss das präsentieren. Und off. "in der Lage sein, jede Zeile erklären zu können". Ich nehm mal an, dass dein Programm schon etwas professioneller ist, da kann jede Funktion "tödlich" sein ^^

Ich hab mir jetzt mal n eigenes n00b Programm gebastelt, läuft bis jetzt eig. ganz gut, problematisch sind eig. nur 2 Dinge (bis jetzt):

- Ein "Canvas" Feld. Habe mich bisschen in google drüber eingelesen und auch mein "Schulbuch" zu Rate gezogen, aber wie man nun anhand einer Eingabe "Umfang" eines Kreises nun diesen Kreis auf dieses Canvas Feld zaubert, keine Ahnung.

Beispiel: Oben wird "Kreis" ausgewählt, die Felder "Umfang" und "Radius" erscheinen (so weit hab ichs noch selbst gemacht), dann gibt man nun in eins der beiden Felder einen Wert ein, meinetwegen Radius=5. Nun soll das Programm einen Kreis mit Radius 5 zeichnen.

Wie geht das? Ich kriegs irgendwie nich so hin. Was sich mit der oberen Lösung dann evtl. ebenfalls beheben lässt: Ich habe noch 2 CheckBoxen "Raster" und "Linien"... wenn man nun "Raster" anklickt, soll in dem PaintBox Feld unten ein Raster erscheinen, welches, wenn möglich, mit dem Maßstab der gezeichneten Figur übereinstimmt. Das zählt auch zu den Gimmicks.

- Ich habe ne MediaPlayer Komponente (gehört zu dem Schnickschnack, den mein Lehrer will) eingebaut, die Einstellungen scheinen laut delphi-treff und google zu stimmen, man kann auch die Buttons auswählen und anklicken, den MCIDevice Fehler habe ich mittlerweile auch weggemacht, allerdings kommt kein Ton raus. Quelle ist eine mono-wav Datei, 8 Bit, 22kHz. Jemand ne Idee?

Dieser Beitrag wurde von He4db4nger bearbeitet: 05. Januar 2006 - 18:27

0

#12 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 05. Januar 2006 - 18:33

Es sollte so gehen mit dem Kreis:

Form1.Canvas.Ellipse(Center.X-Radius, Center.Y-Radius, Center.X+Radius, Center.Y+Radius);


Du zeichnest halt eine ellipse wobei die sonderform ein kreis wäre.

Zu dem mediaplayer müsste ich wissen wie du das eingebunden hast.
BTw ich find sound blöd in solchen Programmen, mach lieber das das Program stylisch aussieht.
Also nette Buttons, gutes Layout.
Am besten du kümmerst dich erstmal um die hauptaufgabe und dann der rest.
your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#13 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

geschrieben 05. Januar 2006 - 18:55

ich hab jetzt halt nur erstma den schnickschnack gemacht.. hatte grad pause von dem canvas *gg*
das programm ist ja eh nich für den alltag gedacht.. soll halt die funktionen können, der lehrer kuckt drüber, ich sach, was geht, und fertig ^^
eingebunden is der media player..tja, gute Frage.. mit:

uses Mplayer;
type MediaPlayer1: TMediaPlayer;

und den Rest hab ich über diesen Objekt Inspektor gemacht. Das Lied ist auch nicht allzu nervig, is ein umkonvertiertes Lied von UnrealTournamentClassic ^^

das mit der ellipse schau ich gleich mal nachem essen.. muss vorher noch dieses blöde x und y definieren..
0

#14 Mitglied ist offline   tavoc 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.446
  • Beigetreten: 22. Juli 04
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 05. Januar 2006 - 19:07

procedure TForm1.FormCreate(Sender: TObject);
begin
PlaySound('mh.wav', 0, SND_ASYNC);
end;

Oder du machst es über die Bass Dll, dann kannst du auch mp3 abspielen, aber dere einbindung ist schon komplizierter.
Weiterhin könntest du den sound in ein .rc file legen, dann hast du aber wieder das problem mit dem entpacken und streams.

Dieser Beitrag wurde von tavoc bearbeitet: 05. Januar 2006 - 19:10

your IP is 127.0.0.1 or ::1
you are running an OS
you use a Browser
I know so much about you...
0

#15 Mitglied ist offline   He4db4nger 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.005
  • Beigetreten: 27. März 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Mainz
  • Interessen:www.schenx.eu

geschrieben 05. Januar 2006 - 19:41

falls man deinen code einfach nur reinkopieren muss, klappt es nicht (mh.wav is umbenannt in den richtigen dateinamen), gibt 3 Fehlermeldungen beim Compilen..

Undeclared identifier.. gibts für FormCreate, PlaySound und SND_ASYNC
0

Thema verteilen:


  • 3 Seiten +
  • 1
  • 2
  • 3

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0