Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit lesen aus einer INI (https://www.delphipraxis.net/41853-problem-mit-lesen-aus-einer-ini.html)

ehem. Benutzer 9. Mär 2005 17:40


Problem mit lesen aus einer INI
 
Hallo,
ich habe folgenden Source :

Delphi-Quellcode:
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;
Und erhalte beim compilieren folgende Fehler:
Zitat:

Erzeugen
[Fehler] main.pas(176): 'END' erwartet, aber 'ELSE' gefunden
[Fehler] main.pas(177): Operator oder Semikolon fehlt
[Fehler] main.pas(190): 'END' erwartet, aber 'FINALLY' gefunden
[Fehler] main.pas(193): EXCEPT oder FINALLY erwartet
[Fehler] main.pas(195): ';' erwartet, aber '.' gefunden
[Fehler] main.pas(197): Deklaration erwartet, aber Dateiende gefunden
[Fataler Fehler] Project2.dpr(6): Verwendete Unit 'main.pas' kann nicht compiliert werden
Nur kann ich die Fehler nicht nachvollziehen.
Ich finde einfach den Fehler nicht :gruebel:

Hoffe ihr seht was ich falsch gemacht habe.

Danke schon mal,


MfG

Rastaman 9. Mär 2005 17:45

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

Binärbaum 9. Mär 2005 17:49

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:
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.
MfG
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]

ehem. Benutzer 9. Mär 2005 17:52

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

jfheins 9. Mär 2005 17:53

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

Khabarakh 9. Mär 2005 17:53

Re: Problem mit lesen aus einer INI
 
Delphi-Quellcode:
try
[...]
finally/except
[...]
end;
So sieht ein Ressourcenschutzblock aus.
Du hast aber:
Delphi-Quellcode:
if [...] then
begin
  [...]
  try
    [...]
  finally
    [...]
end;
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.

[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-Referenz durchsuchenWriteBool? Dann verkürzt sich der Code etwas:
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;

mirage228 9. Mär 2005 17:56

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:
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;
Vielleicht hilft Dir das ganze ja weiter ;)

mfG
mirage228

Binärbaum 9. Mär 2005 17:58

Re: Problem mit lesen aus einer INI
 
Zitat:

@ Binärbaum : es steht trotzdem nicht 'nein' im label...
Das habe ich ja auch ncht behauptet. Ich meinte nur, dass dadurch die Compilermeldungen verschwinden sollten. Außerdem kann ich dem Quelltext keine Zeile sehen, wo
Delphi-Quellcode:
Label3.Caption:= 'nein';
steht. Das heißt, dass es wohl auch nie erscheinen wird, wenn diese Eigenschaft nicht schon vorher gesetzt wurde.

MfG
Binärbaum

fisherman_b 9. Mär 2005 17:59

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

Aenogym 9. Mär 2005 18:02

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 10:12 Uhr.
Seite 1 von 2  1 2      

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