Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Turtle Grafik
Martello - Mi 25.03.09 00:05
Titel: Turtle Grafik
Hallo,
ich hab mal wieder ein Problem mit einer Kollision zw. Automatentext und Autorentext:
Ich fürchte die Zeile "Turtle1: TTurtle" darf ich nicht von Hand eintragen. Jedenfalls meckert der Compiler. Aber wie krieg ich dieses Objekt namens Turtle in mein Projekt. Die Unit Turtle im USES-Teil wird jedenfalls akzeptiert. Und ich gehe davon aus, daß die ok ist, wird schließlich viel in Schulen verwendet und ist frei verfügbar.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, ExtCtrls, Turtle; type TForm1 = class(TForm) Turtle1: TTurtle; Panel1: TPanel; ..... procedure Button3Click(Sender: TObject); private public
end;
var Form1: TForm1; implementation |
ub60 - Mi 25.03.09 01:02
Martello hat folgendes geschrieben : |
... Aber wie krieg ich dieses Objekt namens Turtle in mein Projekt. |
Ich vermute mal, indem Du es unter
private schreibst.
ub60
jaenicke - Mi 25.03.09 03:01
Wie kommst du eigentlich auf die Zeile? Was ich so im Internet sehe ist, dass du das nirgends deklarieren musst, sondern direkt nutzen kannst. :gruebel:
Wo gibts denn die Unit, die du da benutzt? Ich hatte jetzt keine Lust zu suchen und dann vielleicht eine ganz andere zu erwischen.
Private oder nicht macht dabei ja keinen Unterschied, ich kann theoretisch auch da etwas deklarieren, deshalb gibts keinen Fehler beim Kompilieren.
thepaine91 - Mi 25.03.09 09:45
Hi mich hätte mal interessiert was dein Compiler überhaupt sagt?
mfg nic
Martello - Mi 25.03.09 15:08
jaenicke hat folgendes geschrieben : |
Wie kommst du eigentlich auf die Zeile? Was ich so im Internet sehe ist, dass du das nirgends deklarieren musst, sondern direkt nutzen kannst. :gruebel:
Wo gibts denn die Unit, die du da benutzt? Ich hatte jetzt keine Lust zu suchen und dann vielleicht eine ganz andere zu erwischen.
Private oder nicht macht dabei ja keinen Unterschied, ich kann theoretisch auch da etwas deklarieren, deshalb gibts keinen Fehler beim Kompilieren. |
Die UNIT gibts da:
http://www.hsg-kl.de/faecher/inf/material/delphi/freiekomponenten/turtle.php
Es ist auch eine Beschreibung mitgeliefert, wie ich das als Komponente registrieren lassen kann - oder vielelicht muß :?: . Aber das klappt nicht unter 1.0, und mit TP6 krieg ich das auch nicht hin; geht dort wohl prinzipiell nicht :cry:
Es müsste doch aber möglich sein, eine UNIT, die gleichzeitig ein gültiges Objekt definiert, auch ohne Komponenten-Registrierung nutzen zu können. Bisher kenne ich nur die Verwendung von Komponenten (vis. Objekte) durch Erzeugung per Mausklick (aus der Komponentenpalette bezogen)
Den Code meines Thread-Starts habe ich aus einem Delphi-Kurs kopiert, der diese Turtle für Rekursionen benutzt. Die UNIT Turtle dürfte fehlerfrei sein. Aber wie kann ich sie nutzen?
Martello - Mi 25.03.09 15:16
thepaine91 hat folgendes geschrieben : |
Hi mich hätte mal interessiert was dein Compiler überhaupt sagt?
mfg nic |
Ich zeigt Dir die Meldung.
Mo.
Moderiert von
Narses: BMP->GIF, bitte nur komprimierte Bildformate verwenden!
Kha - Mi 25.03.09 15:40
Ein Fehler ist das ja eigentlich nicht (auch wenn's dransteht :mrgreen:). Wenn du die Deklaration, wie von ub60 vorgeschlagen, unter private verschiebst, sollte der Hinweis verschwinden.
ub60 - Mi 25.03.09 16:22
Wir kommen ja Schritt für Schritt weiter :lol:
Wenn es eine Komponente ist, sollte man sie dann auch noch im OnCreate-Ereignis des Formulars erstellen.
Delphi-Quelltext
1:
| Turtle1:= TTurtle.Create(Form1); |
... oder so
ub60
jaenicke - Mi 25.03.09 23:03
In Turbo Delphi kann man keine Komponenten installieren, das ist genau die Einschränkung. So funktionierts jedenfalls problemlos mit Turbo Delphi, hier mal die komplette Unit (die Unit Turtle musst du dem Projekt am besten einfach hinzufügen):
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:
| unit Unit164;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Turtle, StdCtrls, ExtCtrls;
type TForm164 = class(TForm) Button1: TButton; Panel1: TPanel; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private MyTurtle: TTurtle; public end;
var Form164: TForm164;
implementation
{$R *.dfm}
procedure TForm164.Button1Click(Sender: TObject); begin MyTurtle.FD(20); end;
procedure TForm164.FormCreate(Sender: TObject); begin MyTurtle := TTurtle.Create(Panel1); MyTurtle.Align := alClient; MyTurtle.Parent := Panel1; end;
procedure TForm164.FormDestroy(Sender: TObject); begin MyTurtle.Free; end;
end. |
Wenn du "MyTurtle: TTurtle;" oberhalb von private schreibst, dann musst du bei der Fehlermeldung aber auch nur auf Nein klicken, dann kompiliert das trotzdem (unter Turbo Delphi jedenfalls).
Aber an der Stelle fällt mir mal auf, dass die Ersteller dieser "didaktischen Komponenten" keinerlei Ahnung vom Programmieren haben...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure CS; procedure ST; procedure HT; procedure PD; procedure PU; procedure FD( Value: real); procedure BK( Value: real); procedure LT( Value: real); procedure RT( Value: real); |
So stehts in der Komponente...
Da müssen die schon ranschreiben was welche Prozedur macht. :autsch: :autsch: :autsch:
Eigentlich hätte das dem Autor zu denken geben sollen...
Naja, oder das ist als didaktisches Ratespiel ausgelegt. :autsch:
thepaine91 - Do 26.03.09 10:38
Naja man kann die Kommentare einfach als procedure Namen nehmen und dann hat sich das Problem soweit erledigt. =)
Aber der Sinn der Benamung bleibt aus. ( Würde ich sogar empfehlen die Namen zu ändern ist ja nur verwirrend)
Kha - Do 26.03.09 15:32
jaenicke hat folgendes geschrieben : |
Aber an der Stelle fällt mir mal auf, dass die Ersteller dieser "didaktischen Komponenten" keinerlei Ahnung vom Programmieren haben... |
Vielleicht ist es auch einfach
historisch gewachsen [
http://en.wikipedia.org/wiki/Logo_(programming_language)#Syntax] ;) ? Für jemanden, der Turtle Graphics schon kennt, wäre eine LeftTurn-Prozedur wahrscheinlich so ungewohnt wie für uns ein *laugh out loud* :mrgreen: .
Zorro - Do 26.03.09 18:05
jaenicke hat folgendes geschrieben : |
Martello hat folgendes geschrieben : | Aber das klappt nicht unter 1.0, und mit TP6 krieg ich das auch nicht hin; geht dort wohl prinzipiell nicht :cry: | In Turbo Delphi kann man keine Komponenten installieren, das ist genau die Einschränkung. |
Ahhhhhhhh....ich dachte "TP6" sei die Abkürzung für "Turbo-Pascal 6.0" (die vorletzte Version, die für DOS entwickelt wurde).
Greetz Zorro
jaenicke - Do 26.03.09 18:22
Ist es eigentlich auch, aber es gab soweit ich weiß auch Turbo Pascal 6.0 für Windows. Trotzdem habe ich auf einer Seite für Lehrer auch schon TP6 als Abkürzung für Turbo Delphi 2006 gesehen... vielleicht weil P fast wie D aussieht oder weils der Nachfolger ist... :autsch:
Turbo Pascal ist heutzutage aber genauso Quatsch wie Delphi 1.0 noch zu verwenden. Denn Delphi 1.0 kann nicht einmal 32-Bit Programme erstellen...
Deshalb ist es trotz der Einschränkung besser sich Turbo Delphi kostenlos herunterzuladen. Eigentlich auch an Schulen...
Eine Anleitung dafür hab ich hier gepostet, was die Aktivierung angeht passts nicht mehr 100%ig:
http://www.delphi-library.de/viewtopic.php?p=539975
Martello - Do 26.03.09 23:41
jaenicke hat folgendes geschrieben : |
Da müssen die schon ranschreiben was welche Prozedur macht. :autsch: :autsch: :autsch:
Eigentlich hätte das dem Autor zu denken geben sollen...
Naja, oder das ist als didaktisches Ratespiel ausgelegt. :autsch: |
In Kursen, die mit den Komponeten arbeiten, ist es dann schon beschrieben. Und die Inhalte der UNITS, die als Klickkomponenten "registriert" werden, also ab da verborgen bleiben, sind ja nicht für uns Anfänger gedacht. Danke sehr für Deine Erklärung. Ich werde sie heute nicht mehr 100%ig nachvollziehen können. Das macht aber nichts. Vielmehr bin ich froh, zu erfahren, daß man Delphi auch durch TEXT "beherrschen" kann, jedenfalls irgendwann, später.
Als Umsteiger von TP ist mir das alles ein wenig unheimlich. Zwar darf ich alles lesen, und irgendwann sollte ich wohl auch kapieren, was der Automat da für mich dichtet, und ich bin ja eigentlich ganz froh, daß einfache KLicks soviel Schreibarbeit erledigen. Was mich aber bisher immer noch ärgert, ist die Tatsache, daß sich Delphi das Alleinschreibe-Vorrecht nimmt, und mich als Autor da raushält...und die lustige didaktische Turtle-Unit-Komponente, (ich habe sie mittlerweile in Delphi 7 :wink: ) "registriert", macht wirklich Spaß.
Aber ich bin schon darauf gespannt, sie entsprechend Deiner Anleitung auch in Turbo Delphi einzupflanzen...
jaenicke - Do 26.03.09 23:48
Martello hat folgendes geschrieben : |
Was mich aber bisher immer noch ärgert, ist die Tatsache, daß sich Delphi das Alleinschreibe-Vorrecht nimmt, und mich als Autor da raushält... |
Wie meinst du das? Theoretisch kannst du alles auch selbst schreiben, es macht nur wenig Sinn. :mrgreen:
Martello - Do 26.03.09 23:52
Zorro hat folgendes geschrieben : |
Ahhhhhhhh....ich dachte "TP6" sei die Abkürzung für "Turbo-Pascal 6.0" (die vorletzte Version, die für DOS entwickelt wurde).
Greetz Zorro |
Sorry Zorro,
ich hab wohl viel zu lange mit TP6 programmiert - im Ernst, vielleicht länger als mach einer von euch Jüngeren alt ist!
Ich habe mich immer gegen OOP gesträubt, dieser ganze Firlefanz mit Mäusen und Rechteckfenstern, der mit TP5.5 vor vielen Jahrne losging... Aber Delphi macht Spaß, hätte nicht gedacht, daß Rechteckfensterbau sei einfach ginge...
Mit Delpi 1.0 habe ich nur wenige Wochen gelernt, nach Turbo Delphi 2006 (dieses war eigentlich mit "TP6" gemeint :oops: ) habe ich seit 2 Tagen Delphi 7; ich find's ok. Selbst das Buch "für Kids" ist als sehr knappe Einleitung nicht ganz unnütz :wink:
jaenicke - Fr 27.03.09 00:07
Wenn die Komponente visuell aufs Formular gezogen wird, dann passiert im Grunde nix anderes als was ich oben in dem Beispiel geschrieben habe. Nur dass das eben automatisch passiert, weil die Komponente auf dem Formular liegt und die Eigenschaften dazu in der Formulardefinitionsdatei (.dfm) stehen.
Das ist (ab Delphi 5 standardmäßig) auch nur eine Textdatei. Alles kannst du manuell schreiben, wenn du weißt was du tust. ;-) Delphi erzeugt nur automatisch diese Textdateien und verändert entsprechend deren Inhalt.
Martello - Fr 27.03.09 00:17
jaenicke hat folgendes geschrieben : |
(die Unit Turtle musst du dem Projekt am besten einfach hinzufügen): |
Als *.pas oder als *.dcu?
Und wo passiert das "einfache Hinzufügen"? In der Projektverwaltung? In der Version 1.0 war das alles noch selbsterklärend :wink:
jaenicke - Fr 27.03.09 00:18
Projekt --> Zum Projekt hinzufügen...
Und es ist die .pas Datei, die du hinzufügen solltest.
Du kannst auch den Pfad zu der Datei unter Tools --> Optionen --> Bibliothek Win32 oder so dem Suchpfad hinzufügen.
In beiden Fällen kannst du danach Turtle in die uses schreiben und benutzen. Du kannst die Datei auch ins Projektverzeichnis legen.
Martello - Fr 27.03.09 00:31
jaenicke hat folgendes geschrieben : |
Projekt --> Zum Projekt hinzufügen...
Und es ist die .pas Datei, die du hinzufügen solltest. |
Ich habe Deine "unit164" als unit164.pas gespeichert und hinzugefügt.
Muß nur noch folgender Fehler behoben werden...
Delphi-Quelltext
1:
| [Pascal Fehler] E1026 Datei nicht gefunden: 'Unit164.dfm' |
Mo.
jaenicke - Fr 27.03.09 00:36
Die Unit brauchst du ja nicht, du musst nur den Quelltext daraus in deine eigene Unit kopieren. Ich wollte damit nur zeigen wie die Unit komplett aussieht, damit du es verstehst.
Das Hinzufügen usw. bezog sich auf die Unit Turtle, damit du diese einfach unter uses nutzen kannst.
Martello - Fr 27.03.09 00:52
jaenicke hat folgendes geschrieben : |
Die Unit brauchst du ja nicht, du musst nur den Quelltext daraus in deine eigene Unit kopieren. Ich wollte damit nur zeigen wie die Unit komplett aussieht, damit du es verstehst.
Das Hinzufügen usw. bezog sich auf die Unit Turtle, damit du diese einfach unter uses nutzen kannst. |
Die beiden
Turtle1: TTurtle;
Panel1: TPanel;
besitzen nun noch "keine entsprechende Komponenten".
Ich habe jetzt zwei UNITS im Projekt (U1 und Turtle).
Form1 ist leer. In Delphi 7 würde ich jetzt mit der Maus ein Turtle-Objekt aus der Komponentenliste auf Form1 ziehen. Dabei entstünde ein scrollbares Zeichenfeld mit einer Turtle genau in der Mitte.
Kann ich das in Turbo Delphi auch ohne Maus erreichen?
Mo.
jaenicke - Fr 27.03.09 01:27
Pack dir ein Panel auf das Formular, dazu noch einen Button. Jetzt gehst du in den Objektinspektor und klickst doppelt auf die Ereignisse OnCreate und OnDestroy deines Formulars und doppelt auf den Button.
Jetzt musst du nur noch den Quelltext wie in der von mir geposteten Unit kopieren ergänzen :mrgreen:.
Martello - Fr 27.03.09 13:10
jaenicke hat folgendes geschrieben : |
Pack dir ein Panel auf das Formular, dazu noch einen Button. Jetzt gehst du in den Objektinspektor und klickst doppelt auf die Ereignisse OnCreate und OnDestroy deines Formulars und doppelt auf den Button.
Jetzt musst du nur noch den Quelltext wie in der von mir geposteten Unit kopieren ergänzen :mrgreen:. |
Das ist ja fast schon wie in den Delphi-Kinderlehrbüchern, die man nicht zu Unrecht auch "Klickanleitungen" oder "Mausklickrezepturen" nennen darf. Ein genialer Musiker hatte einmal seine "Haus- und Lebensregeln" mit dem Satz abgeschlossen: "Es ist des Lernens kein Ende." Bei Delphi lernt man tatsächlich erst einmal an der "richtigen Stelle zu klicken" und nach und nach dann auch - wenn man dabei bleibt -, was dabei eigentlich passiert.. :?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!