![]() |
Abschlussprojekt Informatik Leistungskurs
Hallo,
als Abschlussprojekt im Informatik Leistungskurs, habe ich mir folgendes überlegt. Ich hab mir gedacht, das ich ein Programm schreibe, welches mir diverse mathematische Funktionen Grafisch Darstellt. Mein Projekt vorschlag ist auch schon genehmigt worden. Es sollen später Lineare und Quadratische Funktionen eingezeichnet werden. Bsp.: Lineare Fkt. f(x) = 3x + 7 Quadr. Fkt. f(x) = x² + 4x - 9 Desweiteren sollen alle Shnittpunkte berechnet werden. Also, Nullstellen und Schnittpkt.e mit der y- Achse Eine weitere Bedingung für die Realisierung des Projektes ist, das wir alles in einer anderen Klasse auslagern. Jetzt weiß ich leider bei der Realisierung nicht weiter. Wir haben sowas noch nicht im Unterricht besprochen. Ich habe es mal versucht, aber es funktioniert leider nicht. Es kommt auch eine Fehlermeldung, es wird bloß nix gezeichnet. Hier mein Code:
Delphi-Quellcode:
Hier der aufruf:
unit UKoordinatensystem;
interface uses ExtCtrls, Controls; type TKoordinatensystem = class constructor Create(); procedure Koordinatensystem(); destructor Destroy(); private Image : TImage; FWidth : Integer; FHeight : Integer; FTop : Integer; FLeft : Integer; FRand : Integer; FParent : TWinControl; public published property Width : Integer Read FWidth Write FWidth; property Height : Integer Read FHeight Write FHeight; property Top : Integer Read FTop Write FTop; property Left : Integer Read FLeft Write FLeft; property Rand : Integer Read FRand Write FRand; property Parent : TWinControl Read FParent Write FParent; end; implementation constructor TKoordinatensystem.Create(); begin Image:=TImage.Create(FParent); Image.Width:=FWidth; Image.Height:=FHeight; Image.Top:=FTop; Image.Left:=FLeft; Image.Parent:=FParent; Koordinatensystem(); end; procedure TKoordinatensystem.Koordinatensystem(); begin // Achsen zeichnen Image.Canvas.MoveTo(FWidth div 2, FRand); Image.Canvas.LineTo(FWidth div 2, FHeight - FRand); end; destructor TKoordinatensystem.Destroy(); begin Image.Free(); end; end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var k : TKoordinatensystem; begin k:=TKoordinatensystem.Create(); k.Width:=300; k.Height:=300; k.Top:=100; k.Left:=100; k.Rand:=10; k.Parent:=Form1; end; |
Re: Abschlussprojekt Informatik Leistungskurs
Hallo
erst ich nehme mal an du willst das auf dem bildschirm darstallen, also solltest du von TComponent oder besser noch von TPaintBox ableiten, so habe ich es gemacht als ich sowas gemacht habe Desweiteren solltest du die ersten 3 Proceduren im Puplic teil rein packen, ist sauberer. |
Re: Abschlussprojekt Informatik Leistungskurs
Wenn du deinen Code Schritt für Schritt durchgehst, müsste dir schon mal folgendes aufallen:
- Du setzt im Create() das Parent des Images auf FParent. Zu diesem Zeitpunkt ist FParent aber nil - Du rufst einmal im Create() die Prozedur Koordinatensystem() auf, welche das Koordinatensystem zeichnet - Beim Aufruf wird also die Klasse erzeugt und auf dem Image gezeichnet, aber erst DANACH setzt du die Werte wie Breite, Höhe, etc. und auch erst danach setzt du das Parent Entweder übergibst du all diese Informationen beim Aufruf der Create-Prozedur, was nicht elegant wäre, oder besser du rufst die Prozedure Koordinatensystem() selbst auf. D.h. den Aufruf im Constructor löscht du raus. Des Weiteren würde ich dann FParent der Create()-Prozedur übergeben, oder aber du schreibst eine Setter-Methode, die Image.Parent := FParent setzt. Nachdem du dann also die Klasse erzeugst und allen Eigenschaften die Werte zugewiesen hast, würdest du dann Koordinatensystem() selbst aufrufen. Ich würde daher dann auch die Prozedur umbennen, z.B. in ZeichneKoordinatensystem() oder nur Zeichne(). |
Re: Abschlussprojekt Informatik Leistungskurs
Hi,
ja ich will das zeichnen, warum zeigt mir Delphi das was ich gezeichnet habe nicht an? |
Re: Abschlussprojekt Informatik Leistungskurs
Hallo,
wenn ich einen Button dyn. erzeuge, dann muss ich aber nur Breit, Höhe, Top und Left setzen und die Eigenschaft Parent und dann wird er mir angezeigt. Da habe ich auch keine Weitere procedure, die ich aufrufen muss, damit alle werte gesetzt werden. Wie ist denn das Problem dort gelöst??? |
Re: Abschlussprojekt Informatik Leistungskurs
Zitat:
das hat Sacha Dir doch gerade erklärt. Der Parent ist die grafische Komponente, die dein Image anzeigen soll. Dem Image wird nur einmal ein solcher Parent zugewiesen und der ist nil (nicht vorhanden), das Image wird also auf keiner Komponente dargestellt. Änderst Du den Wert von FParent, so interessiert sich das Image nicht für den neuen Wert (bekommt das gar nicht mit). Du musst also nur dafür sorgen, dass die Änderung von FParent auch zu einer Änderung von Image.Parent führt (wie das geht hat Sacha erklärt). An sich solltest Du aber vielleicht auch gleich darüber nachdenken das Image von außen in die Komponente zu reichen, so kann der Designer des Formulars über die Position und Größe des Image entscheiden und es dann an deine Methode übergeben. Für das Formular-Design ist also zur Designzeit bereits das Bild sichtbar, für deine Klasse ist nur wichtig, dass sie eine Zeichenfläche hat, nicht wo sie herkommt. Gruß Der Unwissende |
Re: Abschlussprojekt Informatik Leistungskurs
Du kannst einfach mal den Parent per Parameter im Construktor mitgeben, dass könnte das probleme schön lösen
aber auch dann ist die breite und die höhe usw nicht festgelegt. Das Image einfach später erstellen, also nicht im Construktor von TKoordinatenSystem |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz