AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Canvas/TBitmap + Geometrische Figuren
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas/TBitmap + Geometrische Figuren

Ein Thema von He4db4nger · begonnen am 9. Jan 2006 · letzter Beitrag vom 9. Jan 2006
Antwort Antwort
He4db4nger

Registriert seit: 9. Jan 2006
Ort: Mainz
10 Beiträge
 
#1

Canvas/TBitmap + Geometrische Figuren

  Alt 9. Jan 2006, 16:29
hi,
also erstmal meine Situation:
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!

Ich will damit nicht die Hausaufgaben erbetteln oder sonst irgendwas tun. Ich bin einfach nur in einer blöden Situation und erhoffe mir hier Hilfe. Da ich zu meinem "Schnipsel" mehrere Fragen habe, werde ich diesen Thread hier benutzen für die ganzen Probleme und nicht immer ein extra Thread auf machen.

Hier seht ihr einen Screenshot von dem Programm.
Hier könnt ihr das Programm incl. Source runterladen!


Problem 1 wäre:
Ich habe eine PaintBox eingebaut, dessen Inhalt ausgedruckt und exportiert werden soll. Aber ausser der SaveFileDialog und Printdialog Box komm ich nicht weiter. Habe was gelesen von TImage und TBitmap, komm damit aber irgendwie nicht zurecht.

Problem 2 wäre:
Auf dem Screenshot sieht man ja die Eingabefelder. Abhängig von der Auswahl der oberen Checkbox verschwinden bestimmte Edit-Felder. (Das klappt sogar) Jetzt wollte ich anhand dieser Eingaben in der PaintBox unten diese Sachen zeichnen lassen, doch dass tut er nicht. Wenn man jedoch oben von der CheckBox auswählt, zeichnet er mir die Linien/Karos. Derzeit steht das so im Quelltext:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var rad,hoehex,hoehey:integer;
begin
  with PaintBox1.Canvas do begin
  hoehex:=round(form1.Paintbox1.width/2);
  hoehey:=round(form1.Paintbox1.height/2);
  rad:=round(strtoint(Radius.Text));
  Form1.Paintbox1.Canvas.Pen.Color:=clgreen;
  Form1.Paintbox1.Canvas.Pen.Width:=10;
  Form1.Paintbox1.Canvas.Ellipse(hoehex-rad,hoehey-rad,hoehex+rad,hoehey+rad);
  end;
 Radius.Text:=(FloattoStr(StrtoFloat(Umfang.Text) / 2));
end;
Die Zeile Radius.Text.. funktioniert auch irgendwie nicht. Egal,was ich in diesem Editfeld eingebe, erscheint ein EConvertError (Bsp. 2, 2.0, 2,0). Mit InttoStr funzt es ebenfalls nicht.

So und jetzt bin ich erstmal ruhig, is schon viel zu viel Text ^^ Bin wirklich für alles dankbar
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#2

Re: Delphi-Noob hat Fragen

  Alt 9. Jan 2006, 18:25
Ich habe mir mal die Unit angeguckt. Naja Objektorientiert ist da irgentwie nicht viel.
Kleine Einführung zur OOP

Das ganze würde ich in etwa so machen :

Du erstellst dir eine Klasse mit allen Basis Eigenschaften die alle deine (Zeichen-)Objekte gemeinsam haben (mir fallen da spontan top und left ein) und leitest dann von dieser Klasse alle weiteren (Zeichen-)Klassen ab mit den weiteren Eigenschaften wie Radius usw. dann musst du nur noch die Klassen zeichnen oder den Klassen methoden einbauen das Sie sich selbst auf ein TBitmap oder TCanvas zeichnen können.

Zum Drucken und Speichern:
Der Drucker Dialog richtet den Drucker nur ein (Seitenabstand usw.) Drucken musst du mit Printer.Canvas und der SaveDialog liefert nur den Filename speichern kanst du bilder z.B. TBitmap.SaveToFile.
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#3

Re: Delphi-Noob hat Fragen

  Alt 9. Jan 2006, 18:48
Hallo,

1. Nicht zu viele unnötige Umwandlungen.
2. Besserer Code-Stil. Dann kannst du selbst besser durchblicken. Siehe dazu die Änbderungen unten.
3. Die Delphi-Hilfe liefert zu vielen Funktionen eine gute Beschreibung. Zum Beispiel gibt die Funktion StrToIntDef "0" zurück, wenn man irgend einen Mist eingibt. Alternativ kann man Fehleingaben mit Delphi-Referenz durchsuchentry...except abfangen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var rad, hoehex, hoehey : Integer;
begin
  Rad := StrToIntDef(Radius.Text, 0);
  with PaintBox1 do begin
    hoehex := width DIV 2;
    hoehey := height DIV 2;
    Canvas.Pen.Color := clGreen;
    Canvas.Pen.Width := 10;
    Canvas.Ellipse(hoehex - rad, hoehey - rad, hoehex + rad, hoehey + rad);
  end;
  //Radius.Text:=(FloattoStr(StrtoFloat(Umfang.Text) / 2));
  //Den Sinn dieser Zeile verstehe ich nicht ganz.
  //eher folgende, um den Umfang zu berechnen:
  Umfang.Text := IntToStr(Round(2 * PI * Rad));
end;
Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Delphi-Noob hat Fragen

  Alt 9. Jan 2006, 19:03
TImage ist praktisch das selbe wie eine TPaintbox, nur mit dem Vorteil dass der Canvas nicht verlorengeht wenn du ein anderes Form darüber hinwegziehst.

TBitmap kannst du so verwenden:
Delphi-Quellcode:
var
  b:tbitmap;
begin
  b:=tbitmap.create; //erstellen
  b.width:=breite;
  b.height:=hoehe;
  b.canvas.dosomething;
  b.savetofile('c:\datei.bmp');
  paintbox1.canvas.draw(0,0,b); //legt das Bitmap auf der Paintbox ab
  b.free; //freigeben
end;
ich würd es so machen, dass ich eine globale Bitmap-Variable habe, die ich in der form.create erstelle und in der Paintbox im Ereigniss onpaint oder bei Änderungen der Bitmap mit paintbox1.canvas.draw ausgebe. Gezeichnet wird nur auf den Canvas des Bitamps (sowieso schneller) Ich glaub tbitmap hat auch den Befehl print.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Delphi-Noob hat Fragen

  Alt 9. Jan 2006, 19:09
Ein TImage ist aber nicht zum Zeichnen gedacht und auch nicht dafür geeignet.

@He4db4nger: Bitte editier dein erstes Posting und gibt iohm ein ausagekräftiges Topic, was deutölich macht, um was es geth. Das geht umso leichter, wenn man sich an die Regeln hält und auch nur eine Frage pro Thread stellt. Halte dich bitte das nächste mal daran.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
He4db4nger

Registriert seit: 9. Jan 2006
Ort: Mainz
10 Beiträge
 
#6

Re: Delphi-Noob hat Fragen

  Alt 9. Jan 2006, 19:10
ManuMF, ich werde dich in mein abendgebet einschließen ^^
*niederknie* Es funktioniert.. danke,danke,danke ^^

und wie krieg ich das jetzt hin (ja.. ich weiß ^^), dass das jetzt auch noch für Rechtecke und Quadrate funzt?


wenn du mir noch das hinschreibst, wie man eine weitere figur da reinkriegt, müsste ich die nächsten eig. können..^^

Delphi-Quellcode:
...
 end;
  Umfang.Text := IntToStr(Round(2 * PI * Rad));
  Radius.Text := IntToStr(Round(StrToInt(Radius.Text) div 2));
so zumindest gehts schonmal nicht..
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#7

Re: Canvas/TBitmap + Geometrische Figuren

  Alt 9. Jan 2006, 19:14
Mit Canvas.Rectangle zeichnest du Recheck und Quadrat.
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
He4db4nger

Registriert seit: 9. Jan 2006
Ort: Mainz
10 Beiträge
 
#8

Re: Canvas/TBitmap + Geometrische Figuren

  Alt 9. Jan 2006, 20:17
Zitat:
Mit Canvas.Rectangle zeichnest du Recheck und Quadrat.
ja,schon klar. aber das muss ja jetzt wiederhohlt eingetragen werden in den Codeschnipsel von ManuFM.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:00 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