Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi "Ungültige Zeigeroperation" beim Ändern des CheckBox-Status (https://www.delphipraxis.net/31379-ungueltige-zeigeroperation-beim-aendern-des-checkbox-status.html)

Tyler 8. Okt 2004 10:52


"Ungültige Zeigeroperation" beim Ändern des CheckB
 
Hallo,

mich beschäftigt gerade folgende Routine, die den Status einer Checkbox aus einer INI-Datei lesen soll:

Delphi-Quellcode:
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\init.ini');
  ed_Pfad.Text := ini.ReadString('SAVE', 'Quelle', 'Pfad zur Quelldatenbank');
  ed_Ziel.Text := ini.ReadString('SAVE', 'Ziel', 'Name der Zieldatenbank auf dem MySQL-Server');

  s := ini.ReadInteger ('SAVE', 'Autostart', 0);
  if s = 0 then cb_autostart.State := cbUnChecked
    else cb_autostart.State := cbChecked;
  s := ini.ReadInteger ('SAVE', 'DeleteZiel', 0);
  if s = 0 then cb_DelZiel.State := cbUnChecked
    else cb_DelZiel.State := cbChecked;

  ini.Free;
Das führt zu der Fehlermeldung der Klasse EInvalidPointer:
"Ungültige Zeigeroperation"
Breakpoint steht nach "Application.Run", also nicht direkt auf der obigen Routine, die im OnCreate einer Form läuft.

Was ich bereits versucht habe:

- die Routine ins OnPaint oder OnShow-Ereignis verlegt
- ursprünglich wurde direkt ein String aus der Ini gelesen, und in einen Boolean umgewandelt und so an die Eigenschaft "cb_Autostart.Checked" übergeben

Weiss jemand Rat? Ich bin ehrlich gesagt n bissel verzweifelt :(

danke
tyler

Sharky 8. Okt 2004 11:02

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
Hai Tyler,

es wundert mich das Du den Code überhaupt Comilier kannst. TCheckBox.State := cbUnCheked meldet mir sofort der Compiler als Fehler.
Auf jeden fall geht es bei mir so ohne Probleme:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  ini : TIniFile;
  s : Integer;
begin
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'init.ini');
  try
    ed_Pfad.Text := ini.ReadString('SAVE', 'Quelle', 'Pfad zur Quelldatenbank');
    ed_Ziel.Text := ini.ReadString('SAVE', 'Ziel', 'Name der Zieldatenbank auf dem MySQL-Server');
    s := ini.ReadInteger ('SAVE', 'Autostart', 0);
    cb_autostart.Checked := s = 1;
    s := ini.ReadInteger ('SAVE', 'DeleteZiel', 0);
    cb_DelZiel.Checked := s = 1;
  finally
   ini.Free;
  end;
end;

ibp 8. Okt 2004 11:03

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
und warum lässt du es nicht bei checkbox1.checked:=false?

Tyler 8. Okt 2004 11:10

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
Zitat:

Zitat von Sharky
es wundert mich das Du den Code überhaupt Comilier kannst. TCheckBox.State := cbUnCheked meldet mir sofort der Compiler als Fehler.

Das war ja auch mein 2. Versuch.

Beim 1. Versuch hab ich es folgendermassen probiert:

Delphi-Quellcode:
cb_Autostart.Checked := StrToBool ( ini.ReadString('SAVE', 'Autostart', 'False');
das führte aber wie gesagt genau zu dem gleichen Fehler.

Vielen Dank auch für deinen Code, aber damit wird die Checkbox ja grundsätzlich auf TRUE gesetzt, oder nicht:
Delphi-Quellcode:
  cb_autostart.Checked := s = 1;

ibp 8. Okt 2004 11:15

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
Zitat:

Zitat von Tyler
Vielen Dank auch für deinen Code, aber damit wird die Checkbox ja grundsätzlich auf TRUE gesetzt, oder nicht:
Delphi-Quellcode:
  cb_autostart.Checked := s = 1;

nein, die bedingung s=1 ist true wenn s:=1 und false wenn s:=0 ist !

Tyler 8. Okt 2004 11:31

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
achso.. also ein verkürztes IF?

IF S = 1 THEN CHECKED := TRUE;

ergibt

CHECKED := S = 1

Wenn ja, dann wieder was interessantes dazugelernt :D

ibp 8. Okt 2004 11:38

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
jaaaaaa :dp: :hello: :cheers: :dancer:

Tyler 8. Okt 2004 11:43

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
löl :cyclops:

/me *hocherfreut-ist*

(Die Mod´s übersehen jetzt hoffentlich das bissel gespamme ;) :prosit:)

Sharky 8. Okt 2004 13:25

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
Zitat:

Zitat von Tyler
achso.. also ein verkürztes IF?

IF S = 1 THEN CHECKED := TRUE;

ergibt

CHECKED := S = 1..

Noch mal kurz eine erklärung zu dem Code.
Das ganze läuft darauf hinaus das eine boolesche Operation durchgeführt wird. Diese liefert logischerweise immer ein True oder ein False.
Code:
1 = 1 := True
1 = 2 := False
1 <> 2 := True;
1 < 2 := True
1 > 2 := False
'Hallo' = 'blubb' := False;
usw.
Mit diesem "wissen" kann man oftmals eine unnötige IF-THEN-ELSE konstruktion umgehen.

_Sebastian_ 8. Okt 2004 13:30

Re: "Ungültige Zeigeroperation" beim Ändern des Ch
 
ich würd das so machen:
Delphi-Quellcode:
 checkbox1.checked := ini.ReadBool('Save','Autostart',True);


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 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