Einzelnen Beitrag anzeigen

lore

Registriert seit: 2. Jun 2008
Ort: Norderstedt
29 Beiträge
 
#8

Re: Checkbox-wert aus INI lesen und form schliessen geht nic

  Alt 2. Jun 2008, 22:54
Moin Nick,

das ist irgendwie der Wurm drin glaube ich..jetzt bin ich wieder bei EAccessViolation (bestimmt ein doppelter aufruf) angekommen..man kann nix closen was nicht da ist usw. Magst Du nochmal drauf gucken? Ist wohl nicht mein Jahr..

Wenn ich das richtig sehe, dann ist

0 = false = cbUnchecked = form zeigen
1 = true = cbChecked = form nicht anzeigen.

Wenn du den Quellcode mal ausprobieren willst, ändere einfach erstmal die Werte der config.ini von 1 auf Null. Wenn nichts gezeigt wird ist alles gut, wenn das zweite Fenster gezeigt wird, dann muss ich noch ein ExceptionHandling machen. Letzteres entsteht aber nur aufgrund des logischen Fehlers von mir.







Projekt-> Quelltext anzeigen:

Delphi-Quellcode:
program intro2;

uses
  Forms,
  main in 'main.pas{frmMain},
  frmIntro in 'frmIntro.pas{frmMeldung},
  sysutils,
  StdCtrls,
  inifiles;

{$R *.res}
var ini: TiniFile;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmMeldung, frmMeldung);
  try
   ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
   if ini.readbool('Intro','State',false) then
   begin
   frmMeldung.show; //Wird übersprungen und nicht ausgeführt
   end;
  finally
   ini.free
  end;

  Application.Run;
end.


frmMain:
Delphi-Quellcode:
unit main;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TfrmMain = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;
implementation
uses frmIntro, inifiles;

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
var ini : TiniFile;
begin
    try
     ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
 // ini.Writebool('Intro','State',frmMeldung.cb1.Checked); //kann nicht gehen, weil frmMeldung noch nicht existiert
     if ini.readbool('Intro','State',false) then frmMeldung.show; //erzeugt EAccessViolation
    finally
      ini.Free;
    end;
end;
end.

frmIntro

Delphi-Quellcode:
unit frmIntro;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmMeldung = class(TForm)
    cb1: TCheckBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure cb1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMeldung: TfrmMeldung;

implementation
uses main, inifiles ;

{$R *.dfm}

procedure TfrmMeldung.Button1Click(Sender: TObject);
begin

end;

// Wenn das Häckchen gesetzt wird, tu was..
procedure TfrmMeldung.cb1Click(Sender: TObject);
var ini : Tinifile;
begin
    try
     ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
     ini.WriteBool('Intro', 'state', false);
    finally
     ini.free;
     frmMeldung.Close;
    end;
end;

procedure TfrmMeldung.FormClose(Sender: TObject; var Action: TCloseAction);
var ini : TiniFile;
begin
   try //stellt sicher, dass beim schliessen auch der richtig Wert in der INI steht
   ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
   ini.Writebool('Intro','State',cb1.Checked);
   finally
     ini.Free;
   end;
end;

end. // END OF ALL

So, ich hoffe ich belaste ihr von keinem zu doll die nerven und gelobe mal Besserung.
Danke vorab für deine Hilfe!!

Karsten
Angehängte Dateien
Dateityp: zip intro2_163.zip (233,0 KB, 2x aufgerufen)
Karsten
  Mit Zitat antworten Zitat