Autor Beitrag
Martello
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: 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.


ausblenden 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;

var
  Form1: TForm1;
implementation
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Mi 25.03.09 01:02 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
... Aber wie krieg ich dieses Objekt namens Turtle in mein Projekt.

Ich vermute mal, indem Du es unter private schreibst.

ub60
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mi 25.03.09 09:45 
Hi mich hätte mal interessiert was dein Compiler überhaupt sagt?

mfg nic
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Mi 25.03.09 15:08 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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: 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 :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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Mi 25.03.09 15:16 
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Hi mich hätte mal interessiert was dein Compiler überhaupt sagt?

mfg nic


Ich zeigt Dir die Meldung.

Mo.

Moderiert von user profile iconNarses: BMP->GIF, bitte nur komprimierte Bildformate verwenden!
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
Turtle1:= TTurtle.Create(Form1);					
... oder so

ub60
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 25.03.09 23:03 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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 :cry:
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):
ausblenden volle Höhe 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
    { Private declarations }
    MyTurtle: TTurtle;
  public
    { Public declarations }
  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...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    procedure CS;    { clear screen }
    procedure ST;    { show Turtle }
    procedure HT;    { hide Turtle }
    procedure PD;    { pen down }
    procedure PU;    { pen up }
    procedure FD( Value: real);         { step forward }
    procedure BK( Value: real);         { step backward }
    procedure LT( Value: real);         { left turn }
    procedure RT( Value: real);         { right turn }
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 26.03.09 15:32 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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* :mrgreen: .

_________________
>λ=
Zorro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win 2000, Win XP Pro
Delphi 7 Architect
BeitragVerfasst: Do 26.03.09 18:05 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
www.delphi-library.d...ewtopic.php?p=539975
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Do 26.03.09 23:41 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 26.03.09 23:48 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Do 26.03.09 23:52 
user profile iconZorro hat folgendes geschrieben Zum zitierten Posting springen:

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:
Martello Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Do 26.03.09 23:58 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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:


Irgendwann werde ich es wohl kapieren; aber bisher mußte ich doch immer Komponenten zuvor per Klick generieren, um die "Verbindung zur Unit im Hintergrund" herzustellen. Zumindest habe ich das so wahrgenommen. Klar macht es keinen Sinn, alles selbst tippen zu wollen. Und wenn es so ist, daß man tatsächlich alles selbst schreiben könnte - umso besser. Das heißt ja nichts anderes, als daß man doch nicht so abhängig ist von der Maschine. Aber Achtung: Ich weiß von OOP so gut wie nichts. Und Delphi macht zunächst mal v.a. deshalb soviel Spaß, weil ich Pascal in langen Jahren ganz gut gelernt habe.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Fr 27.03.09 00:17 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
(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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.