![]() |
Problem mit lesen aus einer INI
Hallo,
ich habe folgenden Source :
Delphi-Quellcode:
Und erhalte beim compilieren folgende Fehler:
procedure TForm1.start1Click(Sender: TObject);
var ini: TIniFile; a: string; Reg: TRegistry; begin start1.checked := not start1.checked; if start1.checked = true then begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'config.ini'); ini.WriteString('Drive O+C','Start mit Windows','true'); end else begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'config.ini'); ini.WriteString('Drive O+C','Start mit Windows','false'); end; ini.free; ini:=TIniFile.Create('config.ini'); try begin a := ini.ReadString('Drive O+C','Start mit Windows', ''); Reg := TRegistry.Create; begin if a = 'true' then begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True); Reg.WriteString('Drive O+C', ParamStr(0)); Reg.CloseKey; label3.caption := 'ja'; // das hab ich nur um zu testen ob das wirklich abgearbeitet wird - und ja es wird abgearbeitet finally Reg.Free; end else begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True); Reg.DeleteValue('Drive O+C'); Reg.CloseKey; label3.caption := 'ja' // das hab ich nur um zu testen ob das wirklich abgearbeitet wird - nein, es wird nicht abearbeitet - es wird nicht im label angezeigt... finally Reg.Free; end; end; end; finally ini.free; end; Zitat:
Ich finde einfach den Fehler nicht :gruebel: Hoffe ihr seht was ich falsch gemacht habe. Danke schon mal, MfG |
Re: Problem mit lesen aus einer INI
Ich würde mal die begins und ends im Code zählen.
Ausserdem brauchst du kein begin bei try |
Re: Problem mit lesen aus einer INI
Ich hab den ersten Teil deines Quelltextes mal ein wenig umformatiert (ist übersichtlicher mehr nach meinem Geschmack).
Dabei habe ich fragwürdige Stellen mit Kommentar gekennzeichnet. Wenn du dir diese Stellen nochmal anschaust und korrigeirst, sollte es laufen (oder zumindest ein paar Fehlermeldungen weniger vom Compiler geben :wink: ).
Delphi-Quellcode:
MfG
procedure TForm1.start1Click(Sender: TObject);
var ini: TIniFile; a: string; Reg: TRegistry; begin start1.checked := not start1.checked; if start1.checked = true then begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'config.ini'); ini.WriteString('Drive O+C','Start mit Windows','true'); end//if else begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'config.ini'); ini.WriteString('Drive O+C','Start mit Windows','false'); end;//else ini.free; ini:=TIniFile.Create('config.ini'); try begin///<--wozu steht hier ein BEGIN?? bei try braucht man keins a := ini.ReadString('Drive O+C','Start mit Windows', ''); Reg := TRegistry.Create; begin///und das hier? was beginnt den hier? (daran wirds wohl liegen if a = 'true' then begin Reg := TRegistry.Create; ....//usw. usw. Binärbaum [edit] Ich würde dir auch vorschlagen, deinen Quelltext anders bzw. so einzurücken, dass man die Struktur besser erkennen kann. Das ist dann nicht nur für dich leichter, sondern auch für alle anderen, die hier im Forum deinen Quelltext lesen. [/edit] |
Re: Problem mit lesen aus einer INI
Ok soweit war ich auch schon, also an den jeweiligen stellen ein 'end;' eingefügt, nur
steht nie nein im Label ?! Also wenn ich auf die Option im PopUpMenu klicke und der Haken weggeht, also das checked, müsste eigentlich ein 'Nein' im Label 3 erscheinen, das geschieht aber nicht. Das bedeutet auch das er den Eintrag nicht wieder aus der Registry entfernt ---> ich habe nachgesehen und es ist da, obwolh es weg sein müsste.. @ Binärbaum : es steht trotzdem nicht 'nein' im label... MfG |
Re: Problem mit lesen aus einer INI
Und hier:
Delphi-Quellcode:
if a = 'true' then
begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True); Reg.WriteString('Drive O+C', ParamStr(0)); Reg.CloseKey; label3.caption := 'ja'; // das hab ich nur um zu testen ob das wirklich abgearbeitet wird - und ja es wird abgearbeitet finally Reg.Free; end // ende von try-finally ... oder vom if ??? else begin Reg := TRegistry.Create; try |
Re: Problem mit lesen aus einer INI
Delphi-Quellcode:
So sieht ein Ressourcenschutzblock aus.
try
[...] finally/except [...] end; Du hast aber:
Delphi-Quellcode:
Das end am Schluss schließt bei dir nicht finally sondern den if-Block ab. Aber irgendwoher muss der Compiler ja wissen, wo finally endet.
if [...] then
begin [...] try [...] finally [...] end; [edit]Ähm! Wenn a true ist, steht im Label 'ja', wenn a false ist auch 'ja'. Wann soll dann 'nein' stehen :lol: ? Und warum verwendest du nicht ![]()
Delphi-Quellcode:
start1.checked := not start1.checked;
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'config.ini'); ini.WriteBool('Drive O+C','Start mit Windows',start1.Checked); ini.free; |
Re: Problem mit lesen aus einer INI
Hi,
ich hab dir das ganze mal optimiert. So solltest Du es immer schreiben, dann behälst Du auch den Überblick ;)
Delphi-Quellcode:
Vielleicht hilft Dir das ganze ja weiter ;)
var
ini: TIniFile; a: Boolean; Reg: TRegistry; begin start1.checked := not start1.checked; Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'config.ini'); try Ini.WriteBool('Drive O+C', 'Start mit Windows', Start1.Checked); finally Ini.Free; end; ini := TIniFile.Create('config.ini'); // ExtractFilePath(ParamStr(0)) ? Reg := TRegistry.Create; try A := Ini.ReadBool('Drive O+C','Start mit Windows', false); Reg.RootKey := HKEY_CURRENT_USER; if (not Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True)) then Exit; if A then R.WriteString('Drive O+C', ParamStr(0)) else R.DeleteValue('Drive O+C'); Reg.CloseKey; finally Ini.Free; Reg.Free; end; end; mfG mirage228 |
Re: Problem mit lesen aus einer INI
Zitat:
Delphi-Quellcode:
steht. Das heißt, dass es wohl auch nie erscheinen wird, wenn diese Eigenschaft nicht schon vorher gesetzt wurde.
Label3.Caption:= 'nein';
MfG Binärbaum |
Re: Problem mit lesen aus einer INI
Ich finde die ursprünglich verwendetet Einrückung völlig in Ordnung. Wenn man sie durchgängig benutzt, sieht man so schon auf den ersten Blick - also ohne logische Überprüfung - die fehlenden 'end's, im Gegensatz zum Beispiel mit gleicher Einrückung bei unterschiedlichen begin-Ebenen.
Gruss, Bernhard |
Re: Problem mit lesen aus einer INI
ich schreibe auch immer so wie david. nur zu empfehlen - hatte noch nie probleme mit blöcken.
Aenogym |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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