![]() |
Delphi 5: Problem mit Create bei Ini-Datei...
Hi, dickes Problem:
Ich bin noch Schüler und habe deshalb nur Delphi5... Ich wollte für ein Objekt eine Ini-Datei anlegen, damit ich Integer Werte beim Schließen speichern und beim Laden einlesen kann, das Programm soll transportabel sein, daher Ini... jetzt bekomme ich aber immer direckt nen Fehler wenn ich folgende Zeile rein setze:
Delphi-Quellcode:
die Zeile ist original aus der Delphi Hilfe... Hab auch schon String durch Integer ersetzt aber selbes Problem, es geht ihm gar nicht um String/Integer er sagt: Undefinierter Bezeichner Create...
constructor Create(const FileName String);
Bei der Gelegenheit: Ist es entscheident wo der constructor steht?
Delphi-Quellcode:
constructor Create(const FileName String);
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Image1: TImage; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation var ax,ay :Integer; var a : Integer; {$R *.DFM}
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Button1.visible:=FALSE; Button2.visible:=FALSE; Button3.visible:=FALSE; Button4.visible:=TRUE; Button5.visible:=FALSE; Button6.visible:=FALSE; Timer1.Enabled:=True; ax:=543; ay:=303; end; procedure TForm1.Button2Click(Sender: TObject); begin Button1.visible:=FALSE; Button2.visible:=FALSE; Button3.visible:=FALSE; Button4.visible:=FALSE; Button5.visible:=TRUE; Button6.visible:=FALSE; Timer1.Enabled:=True; ax:=591; ay:=351; end; procedure TForm1.Button3Click(Sender: TObject); begin Button1.visible:=FALSE; Button2.visible:=FALSE; Button3.visible:=FALSE; Button4.visible:=FALSE; Button5.visible:=FALSE; Button6.visible:=TRUE; Timer1.Enabled:=True; ax:=623; ay:=383; end; procedure TForm1.Timer1Timer(Sender: TObject); var x , y :Integer; begin Randomize; x:=Random(ax); y:=Random(ay); if Button4.visible=True then begin Button4.Left:=x; Button4.Top:=y; end else if Button5.visible=True then begin Button5.Left:=x; Button5.Top:=y; end else begin Button6.Left:=x; Button6.Top:=y; end; end; procedure TForm1.Button4Click(Sender: TObject); begin Timer1.Enabled:=False; ShowMessage('You Won!'); Button1.visible:=TRUE; Button2.visible:=TRUE; Button3.visible:=TRUE; Button4.visible:=FALSE; Button5.visible:=FALSE; Button6.visible:=FALSE; end; procedure TForm1.Button5Click(Sender: TObject); begin Timer1.Enabled:=False; ShowMessage('You Won!'); Button1.visible:=TRUE; Button2.visible:=TRUE; Button3.visible:=TRUE; Button4.visible:=FALSE; Button5.visible:=FALSE; Button6.visible:=FALSE; end; procedure TForm1.Button6Click(Sender: TObject); begin Timer1.Enabled:=False; ShowMessage('You Won!'); Button1.visible:=TRUE; Button2.visible:=TRUE; Button3.visible:=TRUE; Button4.visible:=FALSE; Button5.visible:=FALSE; Button6.visible:=FALSE; end; procedure TForm1.FormCreate(Sender: TObject); begin a := ReadInteger('Abschnitt1','Anzahl',0); a := a+1; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ini.WriteInteger('Abschnitt1','Anzahl',a); end; end. |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Der Konstruktor muss schon in der Klassendeklaration deklariert werden. Aber Du könntest doch das FormCreate-Ereignis benutzen, um die Ini zu erzeugen und diese im OnDestroy-Ereignis wieder freigeben.
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Könntest du mir das bitte genauer erklären, kenne mich da gar nicht aus...
soll ich das einfach nur vor implementation setzen oder das hinter type??? bzw. meinst du gar nicht diese unit? aber wenn nicht wie springe ich in Delphi 5? |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Um den Konstruktor nutzen bzw. zu verändern zu können musst du das in der Implementation der Klasse ändern. Quasi dir eine eigene Klasse erzeugen.
TForm stellt jedoch genug Optionen zur Verfügung, welche du nutzen kannst. Die Ini-Datei kannst du zum Beispiel im OnCreate-Ereignis deiner Form nutzen und diese im OnDestroy-Ereignis wieder freigeben. |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Delphi-Quellcode:
Ein Konstruktor ist eine spezielle Methode einer Klasse, daher muss er auch zu dieser Klasse gehören und kann nicht einfach irgendwo in den Quelltext geschrieben werden.
type
TMyClass = class private //... protected //... public constructor Create(Parameter: Typ); //hier wird der Konstruktor deklariert end; implementation //und hier implementiert constructor TMyClass.Create(Parameter: Typ); begin inherited Create; //weiterer Code end; |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Schießt Ihr nicht alle etwas weit über das Ziel hinaus?
Der Thread-Starter will doch nur auf eine INI-Datei zugreifen, oder?
Delphi-Quellcode:
€: OK, Helmi sieht es zum Glück auch so... wieso hatte ich keine rote Box?
uses
...INIFiles... [...Form...] private { Private-Deklarationen } INI : TINIFile; public { Public-Deklarationen } end; var Form1: TForm1; implementation TForm1.FormCreate(Sender: TObject); begin INI := TIniFile.Create('myInifile.ini'); // nur mal so als Beispiel [...] €2: DeddyH erst auch, ist aber dann auf den anderen Zug aufgesprungen |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Ihm fehlt ja aber jegliches grundlegendes Verständnis für den Aufbau einer Klasse und der Deklaration von Methoden und Funktionen.
Zitat:
Das meinte ich ja auch oben als ich DeddyH's Beitrag verdeutlichte. |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Ich wollte ihm doch nur klarmachen, was ein Konstruktor ist. Dass er gar keinen braucht, steht doch schon in meiner ersten Antwort.
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
War ja auch auf keinen Fall böse gemeint, aber in Post #3 siehst Du, was Du angerichtet hast :stupid:
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Zitat:
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
ok ok ok.... alles klar,
ich weiß was eine Klasse ist,
Delphi-Quellcode:
aber ich habe keinen Plan vom speichern.
type
TRaum = class Beschreibung : String; Raumname : String; Gegenstand : String; Gegenstand2 : String; Gegenstand3 : String; Vor,Links,Rechts,Zurueck : TRaum; procedure setAusgaenge(vor,links,rechts,zurueck :TRaum); end; Ich habe noch nie einen Speicher gebraucht, heute habe ich angefangen mich langsam da reinzulesen, über ein Buch und die Delphi Hilfe... Die Delphi Hilfe meint ich brauche einen constructor( Ja ich weiß nicht was ein constructor ist... denn auch den habe ich noch NIE benutzt) , ihr meint ich brauche keinen ... Meine erste Frage: Wo ist die Klasse TIniFile oder TMemIniFile deklariert??? Und Zweitens: Wie kann ich ohne einen constructor arbeiten? Der constructor scheint ja so zu sagen der Zementmischer zu sein und Create(.....) ist das Wasser und das Zementpulver, was herrauskommt kann ich verbauen oder??? Ich meine ich muss erstmal Zement herstellen bevor ich ihn benutzen kann... |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
hast du dir mal meinen Link angeschaut?
dort ist alles klar beschrieben, wie man eine Ini-Datei erzeugt und Daten/Werte speichert und liest. |
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Datenbanken" nach "Object-Pascal / Delphi-Language" verschoben.
Eien Ini ist keine datenbank. Zudem hat der Thread nun auch nur noch am Rand mit Inifiles zu tun |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Ja dein Link ist wirklich sehr hilfreich danke dafür, aber was bedeutet:
Delphi-Quellcode:
finally
ini.Free; und was:
Delphi-Quellcode:
mtInformation
Wo ist dort die Klasse deklariert und wo ist dort ein constructor, bzw. warum wird er nicht benötigt... muss ich IniFile bei uses selbst einragen? Und vorallem muss ich die Ini jedes mal neu erstellen wenn ich sie lesen will:
Delphi-Quellcode:
überschreibt das nicht die Ini und somit die darin gespeicherten Daten?
procedure TForm1.Button4Click(Sender: TObject);
var ini: TIniFile; begin ini: = TIniFile.Create('WIN.INI'); try ini.ReadSection('Desktop', ListBox1.Items); finally ini.Free; end; end; |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Zitat:
Nur beim Setzen von Komponenten werden i.d.R. die benötigten Units automatisch eingetragen. mtInformation ist einer der möglichen MessageDlg-Typen. hat im Prinzip mit den INI-Files nichts zu tun, war nur zur Anzeige der Daten. btw. Welche Delphi Version verwendest Du? Schon mal daran gedacht, die unbekannten Bezeichner in der Hilfe deines Delphi einzutippen? Die dort gegebenen Beschreibungen sind oft (nicht immer) umfangreich und genau. |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Du solltest dir wirklich ertmal duie Grundlagen anschauen. Zudem gibt es ein F1-Taste, welche dir unbekannte Methoden erklärt.
Mit etwas Englishkenntnissen lässt sich die Funktion der Methode .Free() aber auch so erahnen. |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Sorry aber ich kann mir echt nicht denken was da Befreit werden soll? Oder soll es eine art Clear sein?
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Nein, ist eine Methode der Basisklasse TObject, welche die Instanz aufräumt und dann durch Aufruf des Destruktors freigibt.( Man ruft diesen nie direkt sondern diese Methode auf)
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
ah ok und warum ist bei dem Beispiel kein constructor nötig?
das wäre dann auch meine letzte Frage :oops: |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Weil es auch über die Spezielle Eventmethode geht.
Zitat:
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
constructor ist (banal ausgedrückt) eine procedure mit spezieller Funktion und typischerweise dem Namen create. Der Ausdruck constructor ist in der Klasse definiert und kann Dir bei der Anwendung der (fremden) Klasse soweit mal egal sein.
Delphi-Quellcode:
Die Methode constructor wurde hier mit Create aufgerufen.
ini := TIniFile.Create('c:\MyIni.ini');
|
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Viellen Dank an alle die mir geholfen haben, stelle mein fertiges Spiel demnächst mal ins Netz, ist nur ein Fang den Button, aber das Speichern brauche ich für eine Art Tamagotschi also viellen Dank.
:thumb: |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Zitat:
Die in deinem Beispiel deklarierte Klasse ist (da du keinen Vorgänger hinter "class" angegeben hast) ein Nachkomme von TObject und erbt damit den dort deklarierten constructor. Diesen constructor könntest du in deiner Klasse überschreiben (wenn es notwendig ist) oder auch nicht. Auch der destructor "destroy" und die Methode "Free" hast du damit übrigens von TObject geerbt. Im constructor wird z.B. Speicher angefordert oder Variablen vorbelegt, wenn du eine Instanz des Objektes erzeugst. Deshalb solltest du auch eine Instanz, die du erzeugt hast, an geeigneter Stelle wieder freigeben "Free", um auch evtl. reservierten Speicher wieder freizugeben. Das Theme ist für Delphi enorm wichtig und das solltest du unbedingt verstanden haben. |
Re: Delphi 5: Problem mit Create bei Ini-Datei...
Moin Zusammen,
was gerade im Zusammenhang mit INI-Dateien noch sehr wichtig ist: Wird kein Pfad angegeben, so wird versucht die INI-Datei im Windows-Verzeichnis anzulegen, bzw. es wird versucht, sie dort zu finden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz