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 Checkbox-wert aus INI lesen und form schliessen geht nicht (https://www.delphipraxis.net/114900-checkbox-wert-aus-ini-lesen-und-form-schliessen-geht-nicht.html)

lore 2. Jun 2008 16:19


Checkbox-wert aus INI lesen und form schliessen geht nicht
 
Folgendes Problem:
2 Formulare: frmMain und frmMeldung

Eigentlich will ich nur so einen Standard Dialog beim ersten Start der Applikation haben wie "Klausel gelesen etc.."


frmMeldung hat eine checkbox. Wenn
Delphi-Quellcode:
checkbox1.state = cbChecked
dann

Delphi-Quellcode:
ini := TiniFile.Create(meinVerzeichnis + '\config.ini');
ini.WriteString('Intro','State','wert');
Also: schreibe checked in INI und mache dann ein

Delphi-Quellcode:
frmMeldung.close;


Beim Starten von frmMain, soll der der Wert der Checkbox aus einer INI gelesen werden.
Wenn also in der INI 'checked' steht, dann darf nur noch Main starten aber das frmMeldung eben nicht mehr...

Hat jemand ein Beispiel was ich machen muss? Es funktioniert so richtig gar nicht, weil das close ja eigentlich vor'm create gemacht wird und somit hat die Checkbox wieder denn voreingstellten Wert "cbGrayed" und startet wieder artig...

irgendwie habe ich einen Knoten gerad' im Kopf :gruebel:

Wann also starte ich wie die frmMeldung beim ersten Mal?
Wann schreibe ich den Wert in die INI? Ist writeString richtig? WriteBool ging gar nicht...
Wie kann ich sicherstellen, dass die frmMeldung nicht wieder startet?


Danke schonmal vorab,

Karsten

smallsmoker 2. Jun 2008 16:25

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
Wilkommen in der DP :) :dp:

wenn ich dich richtig verstanden habe willst du das man im programm einstellen kann ob beim start eine info (oder so) gezeigt werden soll ?
wenn ja dann speichere doch einfach deinen checkbox wert so:

Delphi-Quellcode:
try
ini := TiniFile.Create(meinVerzeichnis + '\config.ini');
ini.Writebool('Intro','State',checkbox.checked);
finally
ini.free
frmMeldung.close;
end;
und beim starten des programm im projekt quellcode (projekt -> quellcode anzeigen)

Delphi-Quellcode:
try
ini := TiniFile.Create(meinVerzeichnis + '\config.ini');
if ini.readbool('Intro','State',false) then frmMeldung.show; //oder so
finally
ini.free
end;
is jetzt ausm kopf also könnten fehler drinnen sein

mfg smallsmoker

€: btw.: ließ das doch mal lieber noch mal durch ini-dateien

lore 2. Jun 2008 17:05

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
Hi smallSmoker
schonmal Danke vorab (auch für den Link), und ja, du hattest mich richtig verstanden. Den ersten Teil habe ich so auch erfolgreich übernehmen können:
Delphi-Quellcode:
procedure TfrmMeldung.cb1Click(Sender: TObject);
var ini : Tinifile;
begin
    try
    ini := TiniFile.Create(ini_stdVerz + '\config.ini');
    ini.WriteBool('Intro', 'status', cb1.checked);
     finally
    ini.free;
    frmMeldung.Close;
    end;
end;
Allerdings weiß ich nicht, ob das Event so stimmt, also wenn einer das anhakt.. dann bedeutet auf Delphi "cblClick" ich denke mal,dass passt schon.


projekt quellcode (projekt -> quellcode anzeigen); Meinst du ich soll den Code hier reinschreiben:

Delphi-Quellcode:
program intro2;

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

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmMeldung, frmMeldung);

try
ini := TiniFile.Create(meinVerzeichnis + '\config.ini');
if ini.readbool('Intro','State',false) then frmMeldung.show;
finally
ini.free
end;

Application.Run;
end.
äähm, wo deklariere ich hier denn uses inifiles; var ini...
Sowas hatte ich mir allerdings auch schon vorab überlegt, weiß aber leider nicht weiter *bettel*
Magst du mir nochmal auf die Sprünge helfen?
Danke,
Karsten

smallsmoker 2. Jun 2008 17:07

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
Delphi-Quellcode:
program intro2;

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

{$R *.res}

var ini:tinifile;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmMeldung, frmMeldung);

try
ini := TiniFile.Create(meinVerzeichnis + '\config.ini');
if ini.readbool('Intro','State',false) then frmMeldung.show;
//bzw if (not ini.readbool('Intro','State',false)) then frmMeldung.show;
finally
ini.free
end;

Application.Run;
end.

lore 2. Jun 2008 17:27

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

ganz kurz, wie kann ich in den ProjektQuelltext var's erstellen? Hast Du 'nen Link für mich zur Hand?

danke,

karsten

smallsmoker 2. Jun 2008 19:30

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
guck doch mal #4 an da hab ich doch schon ne variable drinne :roll:

lore 2. Jun 2008 19:43

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
äähm, da schlug mich wohl kurz die Blindheit.. ich werd' mal morgen weitermachen und schonmal vielen Dank! Wenn ich's hinhab' oder auch nicht, meld ich mich :-D

lore 2. Jun 2008 22:54

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
Liste der Anhänge anzeigen (Anzahl: 1)
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. :gruebel:

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. :wall:







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

DeddyH 3. Jun 2008 07:18

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
Du willst während des Erzeugens des Hauptformular bereits das andere Formular anzeigen. Dieses ist aber noch gar nicht angelegt, deshalb knallt es.
Delphi-Quellcode:
  Application.CreateForm(TfrmMain, frmMain); //hier wird der Code von frmMain.FormCreate ausgeführt
Application.CreateForm(TfrmMeldung, frmMeldung); //hier wird das 2. Formular erzeugt

lore 3. Jun 2008 09:04

Re: Checkbox-wert aus INI lesen und form schliessen geht nic
 
Hi deddyH,
Zitat:

Du willst während des Erzeugens des Hauptformular bereits das andere Formular anzeigen. Dieses ist aber noch gar nicht angelegt, deshalb knallt es
deswegen schrieb ich ja auch schon
Zitat:

"..man kann nix closen was nicht da ist"
Die Frage ist aber, wie löst man das? Ich hatte keine Idee dazu aber Tatsache ist, dass es Millionfach benutzt wird, sonst würde man ja jedesmal die Lizenzbestimmungen beim Starten der Applikation lesen müssen. Ich wollte nämlich auch nicht in die Registry schreiben :angel2:

Hast Du ein Idee dazu?

Danke,
Karsten


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