Autor |
Beitrag |
Martello
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mi 25.03.09 00:05
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
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
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
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mi 25.03.09 09:45
Hi mich hätte mal interessiert was dein Compiler überhaupt sagt?
mfg nic
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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.
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: www.hsg-kl.de/faeche...mponenten/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
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 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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!
Einloggen, um Attachments anzusehen!
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 25.03.09 15:40
Ein Fehler ist das ja eigentlich nicht (auch wenn's dransteht  ). Wenn du die Deklaration, wie von ub60 vorgeschlagen, unter private verschiebst, sollte der Hinweis verschwinden.
_________________ >λ=
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Mi 25.03.09 16:22
Wir kommen ja Schritt für Schritt weiter
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 25.03.09 23:03
Martello hat folgendes geschrieben : | Die UNIT gibts da: www.hsg-kl.de/faeche...mponenten/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 |
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): 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.
Eigentlich hätte das dem Autor zu denken geben sollen...
Naja, oder das ist als didaktisches Ratespiel ausgelegt. 
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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  ? Für jemanden, der Turtle Graphics schon kennt, wäre eine LeftTurn-Prozedur wahrscheinlich so ungewohnt wie für uns ein *laugh out loud*  .
_________________ >λ=
|
|
Zorro
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: Do 26.03.09 18:05
_________________ Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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...
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:
www.delphi-library.d...ewtopic.php?p=539975
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Do 26.03.09 23:41
jaenicke hat folgendes geschrieben : |
Da müssen die schon ranschreiben was welche Prozedur macht.
Eigentlich hätte das dem Autor zu denken geben sollen...
Naja, oder das ist als didaktisches Ratespiel ausgelegt.  |
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  ) "registriert", macht wirklich Spaß.
Aber ich bin schon darauf gespannt, sie entsprechend Deiner Anleitung auch in Turbo Delphi einzupflanzen...
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 26.03.09 23:48
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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  ) 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 
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Do 26.03.09 23:58
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: 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 
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
|