AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CreateNew??

Ein Thema von Privateer3000 · begonnen am 17. Jun 2002 · letzter Beitrag vom 25. Jun 2002
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#1

CreateNew??

  Alt 17. Jun 2002, 07:59
Moin Leuts,

ich hab "mal wider" ein Problemchen...
Mit einem Button möchte ich das Hauptform "zurücksetzten",
sozusagen ein "Neu"-Button.
Das Problem ist, dass im Quellcode ein Ini-File geöffnet wird.
(Auch wenn nur auf Knopfdruck...)
Jetzt weigert sich der Compiler und meint das die ini "wahrscheinlich nicht initialisiert" wurde.

Hhhhmmmm....und nun?
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2
  Alt 17. Jun 2002, 08:17
Hi,

Etwas Code wäre da nicht schlecht.

tom
Thomas
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3
  Alt 17. Jun 2002, 08:20
Eine Weigerung ist das doch eigentlich nicht, eher eine Warnung. Das Programm müsste sich trotzdem starten lassen.

Öffnest du die INI nicht auch schon irgendwie beim Start des Programms? Dann benutze doch den selben Code. Oder du postest mal einen Auszug davon, damit man sehen kann, was nicht initialisiert wurde.

Ich denke mal, so wirst du doch bestimmt vorgegangen sein:
Code:
cIni := TIniFile.Create('datei.ini');
try
  ... // bla bla
finally
  cIni.Free;
end;
@toms: Genau!
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#4
  Alt 17. Jun 2002, 08:30
ok...hier:

Code:
procedure TForm1.Speichern1Click(Sender: TObject);
var
  Ini: TIniFile;
  datei: string;
begin
datei := Label16.Caption+'.ini';
  try
    Ini:=TIniFile.Create('dat\'+datei);
    Ini.WriteString(Label16.Caption,'Gerechtigkeitsstreben',Label1.Caption);
wie zu sehen ist, wird erst bei einem Click die Ini geöffnet.
Oda etwa nisch ???

In einem Form wo das hier gespeicherte wieder geladen wird, halt nur mit Readstring, meckert der Compiler ebenfalls herum.

Ja klar startet er, aber ich will klären ob es auch anders geht!
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5
  Alt 17. Jun 2002, 09:21
Hallo Privateer3000,

das Problem ist folgendes. Du weist der Variable Ini gleich am Anfang der try ... Blocks einen Wert zu, das ist normalerweise OK. Da es aber ein try ... Block ist, nimmt der Compiler an, dass die Anweisung schiefgehen könnte. Das ist nicht schlimm, solange kein weiterer Zugriff auf Ini stattfindet. Griefst du aber auch im finally oder except Teil des Blockes auf Ini zu, könnte es einen nicht initialisierten Wert haben. Davor versucht der Compiler zu warnen. Wenn du hier sauber arbeiten willst, schreibst du vor dem try Block:
Code:
  Ini := Nil;
und im finally Block dann eventuell:

Code:
   If Ini <> Nil then
      ...
wobei z.B. Ini.Free auch dann bei Nil funktioniert und die Abfrage auf <> Nil dort nicht notwendig ist.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6
  Alt 17. Jun 2002, 10:02
Oder du ziehst die "TIniFile.Create"-Anweisung vor das "try", so wie in meinem Codebeispiel. Das funktioniert IMHO ebenso sauber.

Nix für ungut, Spockie!
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7
  Alt 17. Jun 2002, 12:21
Hallo Mathias,

wenn aber die Ini-Datei nicht existiert ...?

Ich meine, dann wird eine Exception ausgelöst und wehe dem der kann keinen try ... except ... Block hat.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8
  Alt 17. Jun 2002, 13:40
Wenn die Ini nicht existiert... Das interessiert Windows gar nicht. Wenn sie nicht vorhanden ist, wird einfach eine neue erzeugt. Nicht um sonst hat man bei TIniFile Lese- und Schreibrechte gleichzeitig. Und sollte es doch zu einer Exception kommen, dann wird die Instanz erst gar nicht erzeugt, und was willst du dann per Ini.Free freigeben?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9
  Alt 17. Jun 2002, 14:13
Hallo jbg,

da hasse wohl recht!

Falls der Dateiname aber z.B. ungültig ist, z.B. "X:\\\\\///---" müsste doch eine Exception ausgelöst werden.

Ich wollte darüberhinaus ja nur erklären, warum der Compiler eine Warnung auswirft. Und Free sollte man grundsätzlich aufrufen, wenn man vorher Create aufgerufen hat.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#10
  Alt 17. Jun 2002, 19:44
Vielen Dank für Eure Antworten...
Mir ging es,wie Spocki richtig bemerkte, um das Saubere daran...
Es soll auf jeden Fall vermieden werden das eine erzeugt wenn es keine gibt.
Die ini in den Nil zu schicken ist schon eine gute Idee.
Eine falsche kann garnicht geladen werden IMHO
Apropos....
wie heisen die Syntaxe wenn es keine ini sondern z.B. eine " normale" Datei sein soll?Darüber findet man so wenig...
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz