Hallo! Ich habe in Borland Delphi 6 vor ein Programm zu schreiben. Aber bereits am Anfang kann er nicht compilieren...: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var zahl:Integer; zahl:=0; procedure TForm1.Button2Click(Sender: TObject); begin zahl:=1; end; end. Die Fehlermeldung: [Error] Unit1.pas(30): Identifier redeclared: 'zahl' [Error] Unit1.pas(34): Constant expression violates subrange bounds [Error] Unit1.pas(14): Unsatisfied forward or external declaration: 'TForm1.Button1Click' [Fatal Error] Project3.dpr(5): Could not compile used unit 'Unit1.pas' Was ist daran falsch? Kann man Befehle nicht außerhalb von Prozeduren schreiben? Mfg Xenon
Hallo, soweit ich mich erinnere kannst Du Variablen so nicht ausserhalb von Funktionen einen wert zuweisen. "var zahl:Integer; zahl:=0;" Du müsstest also "zahl" innerhalb deines Constructors oder einer anderen Funktion zuweisen. Möglicherweise funktioniert auch.. "var zahl:Integer = 0;" Bin mir aber nicht sicher. zu "[Error] Unit1.pas(14): Unsatisfied forward or external declaration: 'TForm1.Button1Click'" Du hast eine Memberfunktion "Button1Click" in deiner Klasse definiert, diese jedoch niemals deklariert. "procedure TForm1.Button1Click(Sender: TObject); begin end;" in den Code einfügen oder "procedure Button1Click(Sender: TObject);" aus der Klasse entfernen. LG
hab nochmal nachgeschaut: "var zahl:Integer = 0;" sollte funktionieren! Oh man, wie kann man nur so hartnäckig Deklaration und Definition vertauschen :( grmpf LG
Stimmt, Werte darf man Variablen nur innerhalb von Funktionen und Prozeduren zuweisen (und natürlich innerhalb des Hauptprogramms). Die von Enrico erwähnte Methode ist eine Initialisierung und muß unmittelbar bei der Deklaration erfolgen.
Schon mal danke für die Antworten. Es funktioniert jetzt auch so weit. Aber wenn ich eine if Anweisung einbaue: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var zahl:Integer=0; procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin zahl:=1; end; if zahl=1 then close; //diese zeile hat das problem end. Fehler: Declaration expected but 'if' found. Muss ich noch eine unit einbinden um if zu benutzen oder irgendwie eine hauptprozedur erstellen? Oder genauer gesagt: Wo schreibt man das Hauptprogramm hin? Mfg Xenon
Du mußt keine Unit einbinden, sondern die If-Anweisung in eine Prozedur packen. So wie du es jetzt hast, steht die außerhalb. Also besser ist: ... procedure TForm1.Button2Click(Sender: TObject); begin zahl := 1; if zahl = 1 then Close; end; ...
Wie kann ich denn eine Hauptprozedur erstellen? Ich habe eigentlich vor, dass dort 6 if blöcke sind und diese immer wieder abgefragt werden. Wenn man dann den Button drückt bleibt er stehen und zb eine 4 wird angezeigt. Also ein Würfel. Daher muss das if irgendwo anders stehen nur wo? Also das Hauptprogramm.
Die "Hauptprozedur" erstellt Delphi automatisch. Um sie anzusehen mußt du "Projekt" -> "Quelltext ansehen" oder so ähnlich auswählen (Menu). Ich würde ein Würfel aber mit der Random-Funktion realisieren.
Ok Dankeschön schonmal! Wie kann ich die Random-Funktion denn benutzen? Mfg Xenon
Danke! Dann werd ich mich mal darüber informieren. Tolles Forum einfach! Für jedes Problem ne Lösung ^^
Mit folgendem Trick kommst du einfach ans Ziel: 1. In der Delphi Hilfe schauen, da ist normal ein Beispiel drin 2. www.delphipraxis.net durchsuchen (durchsuchen != thread eröffnen) 3. Google befragen 4. erst jetzt ein Thread aufmachen Ah und einmal einen minimal kleinen Blick in ein Delphi-Tutorial werfen.
Was hast du für ein Problem, wenn ich ein Thread eröffne? Davon abgesehen habe ich schon viele tutorials durchgesehen aber keine Antworten gefunden, weil ich an die C Programmierung gewöhnt bin und daher nie das Hauptprogramm suchen musste.
Hallo, Ich hab noch eine Frage... procedure eins; begin label1.caption := 'X'; end; Die Prozedur habe ich oben deklariert. Wenn ich label1.caption := 'X'; in die Prozedur eines Buttons eingebe meldet der Compiler kein Problem aber in dieser Prozedur sagt er: Undeclared Identifier: 'label1' .# Was ist das Problem?
Das kann nicht gehen, da Prozedur "eins" nicht Bestandteil deiner Form1-Klasse ist. Also deshalb: procedure TForm1.eins; begin label1.caption := 'X'; end; Aber nicht vergessen, diese Prozedur auch "oben" bei der Klassendeklaration anzugeben: type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure eins; private { Private declarations } public { Public declarations } end; ...
Hübscher Würfel ! Villeicht noch zur Schönheit : Setz doch mal die BorderStyle Eigenschaft deiner Form auf bssingle. Dann kann man das Fenster auch nicht nach eigenem belieben vergrößern, verkleinern oder maximieren. Mit Poisition = poScreenCenter kannst du erreichen, dass dein Programm beim Starten stets im Mittelpunkt steht ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.