![]() |
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:
dann
checkbox1.state = cbChecked
Delphi-Quellcode:
Also: schreibe checked in INI und mache dann ein
ini := TiniFile.Create(meinVerzeichnis + '\config.ini');
ini.WriteString('Intro','State','wert');
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 |
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:
und beim starten des programm im projekt quellcode (projekt -> quellcode anzeigen)
try
ini := TiniFile.Create(meinVerzeichnis + '\config.ini'); ini.Writebool('Intro','State',checkbox.checked); finally ini.free frmMeldung.close; end;
Delphi-Quellcode:
is jetzt ausm kopf also könnten fehler drinnen sein
try
ini := TiniFile.Create(meinVerzeichnis + '\config.ini'); if ini.readbool('Intro','State',false) then frmMeldung.show; //oder so finally ini.free end; mfg smallsmoker €: btw.: ließ das doch mal lieber noch mal durch ![]() |
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:
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.
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; projekt quellcode (projekt -> quellcode anzeigen); Meinst du ich soll den Code hier reinschreiben:
Delphi-Quellcode:
äähm, wo deklariere ich hier denn uses inifiles; var ini...
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. 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 |
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. |
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 |
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:
|
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
|
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 |
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 |
Re: Checkbox-wert aus INI lesen und form schliessen geht nic
Hi deddyH,
Zitat:
Zitat:
Hast Du ein Idee dazu? Danke, Karsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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