Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - unnützes "Project1"


Martello - Do 12.03.09 19:03
Titel: unnützes "Project1"
Hallo,

meine kleinen Lern-Programme kamen bisher alle ohne "Project1" aus.
Stattdessen stand der gesamte Code jeweils in "Unit1". Auch habe ich immer nur ein Formular verwendet.

Durch irgend einen "Fehler", den ich wohl gemacht habe, existiert auf einmal neben meiner Unit1 ein
Objekt namens "Project1" und ich krieg alles nicht mehr compiliert, obwohl es zuvor sehr gut klappte.
Alles Unheil nahm seinen Anfang damit, daß ich "Form1" in "Rundern" umbenannt habe.

Leider habe ich die Arbeit nicht gesichert; es ist ja eigentlich auch nichts kaputt. Aber ich habe den Überblick verloren, bzw. bisher noch nicht so richtig gewonnen :(

Wie krieg ich denn das unnütze Project1 wieder aus meinem Programm?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
program Project1;

uses
  Forms,
  Unit1 in 'UNIT1.PAS' {Rudern};

{$R *.RES}

begin
  Application.CreateForm(TForm, Form);
  Application.Run;
end.

Bei

Delphi-Quelltext
1:
Application.CreateForm(TForm, Form);                    

meldet der Compiler "Unbekannter Bezeichner"


Gruß
Martello

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Do 12.03.09 19:09

schreib mal statt form bei dem: Application.CreateForm(TForm, Form);
ein Rudern

so also: Application.CreateForm(TForm, Rudern);

lg elundril

btw: das Projekt1 wird immer angelegt, bei jedem Programm das ein Formular hat. ;-) das gibt an wieviele Formulare es im projekt gibt, usw.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Martello - Do 12.03.09 19:22

hatte ich inzwischen auch schon probiert....

Dann compiliert er zwar fehlerfrei, aber beim Start erscheint lediglich ein leeres graues Rechtecke in der linken oberen Schirmecke:-(

Ich hätte ja kein Problem, alles nochmal neu zu konstruieren, zum Glück ist ja der Code erhalten. Das
wäre aber nur eine andere Lehrübung. Vielleicht gelingt mir ja die Korrektur auf andere Weise; wäre auch, aber auf andere Weise lehrreich.

Martello


elundril - Do 12.03.09 19:24

öffne mal das File Unit1.dfm und sag mal was da drin steht.

lg


Martello - Do 12.03.09 19:48

Das Öffnen geschieht mit der Medlung: Fehler in Modul Unit1: Modul Header fehlt oder ist fehlerhaft.

Und das steht alles drin:

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:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
  Left = 485
  Top = 129
  Width = 435
  Height = 300
  Caption = 'Rudern'
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'System'
  Font.Style = []
  Menu = MainMenu1
  PixelsPerInch = 96
  TextHeight = 16
  object TLabel
    Left = 56
    Top = 112
    Width = 4
    Height = 16
  end
  object ListBox1: TListBox
    Left = 184
    Top = 8
    Width = 209
    Height = 137
    ItemHeight = 16
    TabOrder = 0
  end
  object Edit1: TEdit
    Left = 16
    Top = 176
    Width = 377
    Height = 24
    TabOrder = 1
    Text = 'Pfadname'
  end
  object Button1: TButton
    Left = 40
    Top = 8
    Width = 105
    Height = 33
    Caption = 'Zeige_Liste'
    TabOrder = 2
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 40
    Top = 48
    Width = 105
    Height = 33
    Caption = 'Zeige_Matrix'
    TabOrder = 3
    OnClick = Button2Click
  end
  object OpenDialog1: TOpenDialog
    Filter = '*.txt|*.txt'
    Left = 40
    Top = 224
  end
  object MainMenu1: TMainMenu
    Left = 8
    Top = 224
    object Datei1: TMenuItem
      Caption = 'Datei'
      object Open1: TMenuItem
        Caption = 'Open'
        OnClick = Open1Click
      end
      object Save1: TMenuItem
        Caption = 'Save'
        OnClick = Save1Click
      end
    end
  end
  object SaveDialog1: TSaveDialog
    Left = 72
    Top = 224
  end
end

Gruß
Martello

Moderiert von user profile iconNarses: Code-Tags hinzugefügt


Narses - Do 12.03.09 20:10

Moin und :welcome: im Forum!

Wie´s aussieht, ist deine Formulardefinition beschädigt, denn das sollte etwa so anfangen:

Quelltext
1:
object Form1: TForm1                    

Wenn das fehlt, ist das mit der ungültigen-Header-Meldung klar. :nixweiss:

Scheint, als hätte Delphi beim Umbenennen des Formulars Probleme gehabt, den Quelltext anzupassen :shock: sowas passiert aber eigentlich nur, wenn man manuell Änderungen in den automatisch gepflegten Code einfügt (und selbst das kriegt die IDE normalerweise gebacken)... :gruebel:

Füg mal einen entsprechenden Header ein. Was passiert?

cu
Narses


Martello - Do 12.03.09 20:33

Der Header scheint doch in Ordnung zu sein...
denn in der ersten Zeile steht

"object Rudern: TRudern"

Einmal kam die Fehlermeldung mit dem defekten Header noch, aber meistens bleibt sie beim Öffnen jetzt aus.
Das erscheint mir alles recht komisch...

Vielleicht bau' ich die Anwendung am besten nochmal ganz von vorne...




Gruß
Martello


Narses - Do 12.03.09 20:51

Moin!

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Einmal kam die Fehlermeldung mit dem defekten Header noch, aber meistens bleibt sie beim Öffnen jetzt aus.
Das erscheint mir alles recht komisch...
Meistens? :? Entweder das Projekt ist kaputt oder nicht, aber manchmal? :gruebel:

Hast du zufällig das Projekt in einen andern Ordner kopiert/verschoben und die Dateireferenzen im Projekt nicht angepasst? :nixweiss:

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht bau' ich die Anwendung am besten nochmal ganz von vorne...
Ja, das scheint mir auch eine gute Idee zu sein. :(

cu
Narses


Yogu - Do 12.03.09 21:10

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
program Project1;

uses
  Forms,
  Unit1 in 'UNIT1.PAS' {Rudern};

{$R *.RES}

begin
  Application.CreateForm(TForm, Form);
  Application.Run;
end.

Diese Datei scheint ziemlich durcheinandergekommen zu sein :(


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
program Project1;

uses
  Forms,
  Unit1 in 'UNIT1.PAS' {Rudern};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Die Initialize-Zeile fehlt auf jeden Fall (oder wurde die in einer neueren Delphi-Version in den initialization-Teil der Unit Forms gelegt?).

Was die 1er angeht: Du hast dein Formular nicht zufällig Form genannt, oder? Das wäre nämlich nicht besonders gut (und sollte eigentlich auch nicht funktionieren), da es die Klasse TForm schon gibt. Sonst setzt dort einfach den Namen deines Formulars ein - und schick beim ersten noch ein T vorraus.

Aber vielleicht wäre es wirklich am Besten, wenn du das Projekt nochmal neu zusammenbastelst.


Martello - Do 12.03.09 21:13

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Einmal kam die Fehlermeldung mit dem defekten Header noch, aber meistens bleibt sie beim Öffnen jetzt aus.
Das erscheint mir alles recht komisch...
Meistens? :? Entweder das Projekt ist kaputt oder nicht, aber [i]manchmal? :gruebel:

Hast du zufällig das Projekt in einen andern Ordner kopiert/verschoben und die Dateireferenzen im Projekt nicht angepasst? :nixweiss:

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht bau' ich die Anwendung am besten nochmal ganz von vorne...
Ja, das scheint mir auch eine gute Idee zu sein. :(

cu
Narses


Ich hatte ein ganzes Projekt in ein neues Verzeichnis kopiert und dort weitergearbeitet.
Aber das "einfach neu machen" ist doch nicht so einfach; denn im Hintergrund passiert so viel und das wirkt auf die Eingabe in die Unit auf geistervolle Weise ein; ich blick es nicht. Meine Laune für Delphi sinkt und ich sehne mich nach TP, wo der Autor Herr dessen bleibt, was im Editor passiert.... :(

Gruß
Martello


Narses - Do 12.03.09 21:20

Moin!

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte ein ganzes Projekt in ein neues Verzeichnis kopiert und dort weitergearbeitet.
Ha :D dachte ich´s mir doch. 8)

Wenn du sowas machst, dann musst du alle Code-Fenster in der IDE schließen, die Projektverwaltung öffnen und mit einem Doppelklick auf den Projektelementen diese neu öffnen. Grund: Irgendwie merkt sich die IDE, welche Fenster für ein Projekt offen waren und öffnet diese beim Öffnen des Projekts. Allerdings: wenn du das Projekt kopiert hast, werden die Fenster mit dem Inhalt der Dateien an der Originalposition im Dateisystem geöffnet (erkennt man am Pfad oben in der Titelleiste des IDE-Code-Fensters). :idea: Du arbeitest dann versehentlich noch mit den alten Dateien, und das führt dann zu Chaos!

cu
Narses


Xentar - Do 12.03.09 21:23

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte ein ganzes Projekt in ein neues Verzeichnis kopiert und dort weitergearbeitet.
Ha :D dachte ich´s mir doch. 8)

Wenn du sowas machst, dann musst du alle Code-Fenster in der IDE schließen, die Projektverwaltung öffnen und mit einem Doppelklick auf den Projektelementen diese neu öffnen. Grund: Irgendwie merkt sich die IDE, welche Fenster für ein Projekt offen waren und öffnet diese beim Öffnen des Projekts. Allerdings: wenn du das Projekt kopiert hast, werden die Fenster mit dem Inhalt der Dateien an der Originalposition im Dateisystem geöffnet (erkennt man am Pfad oben in der Titelleiste des IDE-Code-Fensters). :idea: Du arbeitest dann versehentlich noch mit den alten Dateien, und das führt dann zu Chaos!

Dieses "irgendwie" nennt sich Projekt-Desktop, und ist meiner Meinung nach eine sehr gute Erfindung, wenn man weiß was man tut ;)

Falls du wirklich mal mal ein Projekt in ein neues Verzeichnis umziehen möchtest:
Delphi Schließen -> Projekt mit allen Dateien verschieben -> Wichtig: *.dsk Datei löschen! Hier wird gespeichert, welche Fenster offen waren, und diese zeigen somit u.U. auf den alten Pfad -> Projekt wieder öffnen. Fertig.


Narses - Do 12.03.09 21:27

Moin!

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Dieses "irgendwie" nennt sich Projekt-Desktop
Stimmt, das meinte ich. :P

cu
Narses


Martello - Do 12.03.09 21:40

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte ein ganzes Projekt in ein neues Verzeichnis kopiert und dort weitergearbeitet.
Ha :D dachte ich´s mir doch. 8)

Wenn du sowas machst, dann musst du alle Code-Fenster in der IDE schließen, die Projektverwaltung öffnen und mit einem Doppelklick auf den Projektelementen diese neu öffnen. Grund: Irgendwie merkt sich die IDE, welche Fenster für ein Projekt offen waren und öffnet diese beim Öffnen des Projekts. Allerdings: wenn du das Projekt kopiert hast, werden die Fenster mit dem Inhalt der Dateien an der Originalposition im Dateisystem geöffnet (erkennt man am Pfad oben in der Titelleiste des IDE-Code-Fensters). :idea: Du arbeitest dann versehentlich noch mit den alten Dateien, und das führt dann zu Chaos!

Dieses "irgendwie" nennt sich Projekt-Desktop, und ist meiner Meinung nach eine sehr gute Erfindung, wenn man weiß was man tut ;)

Falls du wirklich mal mal ein Projekt in ein neues Verzeichnis umziehen möchtest:
Delphi Schließen -> Projekt mit allen Dateien verschieben -> Wichtig: *.dsk Datei löschen! Hier wird gespeichert, welche Fenster offen waren, und diese zeigen somit u.U. auf den alten Pfad -> Projekt wieder öffnen. Fertig.


Kann ich das Projekt auf die folgende Weise neu bauen:

Alle Formularelemente werden erzeugt, und per Klick werden dabei die entsprechenden "leeren" Einträge in der Unit1 automatisch generiert.

Diese neuen automatischen Einträge sind nun "rein zufällig" identisch mit den alten, in der Original-Unit erhaltenen.
Dann könnte ich doch in der neuen Unit die neuen Texte durch die alten ersetzen (mit dem spezifischen Code). Oder bestehen zwischen dem Inhalt der Unit (die ich editiere) und dem System unsichtbare Beziehungen, die dem entgegenlaufen?

Gruß
Martello


Yogu - Do 12.03.09 21:59

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Kann ich das Projekt auf die folgende Weise neu bauen:

Probier's doch einfach aus ;)

Wenn ich eines nicht verstehe, dann ist es die mangelnde Experimentierfreudigkeit von EE-Usern. Kaputtgehen kann doch nichts - vorrausgesetzt natürlich, dass du dein Projekt vorher sicherst (was sowieso ungefähr täglich passieren sollte).

Aber ich denke auch, dass die von dir genannte Vorgehensweise erfolgreich sein könnte. :D


Martello - Do 12.03.09 22:57

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Kann ich das Projekt auf die folgende Weise neu bauen:

Probier's doch einfach aus ;)

Wenn ich eines nicht verstehe, dann ist es die mangelnde Experimentierfreudigkeit von EE-Usern. Kaputtgehen kann doch nichts - vorrausgesetzt natürlich, dass du dein Projekt vorher sicherst (was sowieso ungefähr täglich passieren sollte).

Aber ich denke auch, dass die von dir genannte Vorgehensweise erfolgreich sein könnte. :D


Einfacher war es, nur den eigenen Code (wie nennt man das eigentlich, was zwischen "begin" und "end" noch fehlt?)
einzutragen, nachdem die Elemente mausklickig sich_erzeugt wurden.

Aber ich kann das gesamte Projekt doch jetzt z.B. zippen und auf einem anderen Rechner (z.B. morgen vormittag) weiterbearbeiten. Oder muß ich dort auch die PATH-Umgebung meines Home-PC reproduzieren, um unangenehme Erlebnisse zu vermeiden?

Gruß
Martello


Narses - Do 12.03.09 23:11

Moin!

user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich kann das gesamte Projekt doch jetzt z.B. zippen und auf einem anderen Rechner (z.B. morgen vormittag) weiterbearbeiten. Oder muß ich dort auch die PATH-Umgebung meines Home-PC reproduzieren, um unangenehme Erlebnisse zu vermeiden?
Klar kannst du das Projekt kopieren (mache ich ja auch häufiger). :nixweiss: Aber: vor dem Öffnen des kopierten Projekts entweder die .dsk löschen oder alle Code-Fenster schließen und aus der Projektverwaltung neu öffnen. :idea: ;)

cu
Narses