![]() |
ToogleSwitch und ini
Guten Morgen,
Leider stehe ich etwas auf dem Schlauch mit dem ToogleSwitch. Das Schreiben in eine Ini funktioniert super,
Code:
nur das lesen, des wertes, verstehe ich nicht ganz.
WriteBool(Einstellung1,Toggle1SwitchAktiviert,True);
Code:
Wo liegt der Fehler?
ToggleSwitchAktivieren.IsOn:= ReadBool(Einstellung1,Toggle1SwitchAktiviert,True);
Gruß S |
AW: ToogleSwitch und ini
Ich nehme an, der Switch ist immer aktiviert. Das dürfte daher kommen, dass immer True in die Ini geschrieben wird, egal, ob der Switch aktiv ist oder nicht.
|
AW: ToogleSwitch und ini
Hi,
So sieht der Code aus, wenn er off ist wird ein False in die INI geschrieben.
Code:
procedure TForm2.ToggleSwitchAktivierenClick(Sender: TObject);
begin if ToggleSwitchAktivieren.IsOn = True then begin with TMemIniFile.Create(ConfigIniPfad) do try begin WriteBool(Einstellung1,Toggle1SwitchAktiviert,True); UpdateFile; end; finally Free; end; end else // ab hier wenn Toogle1 Aus dann: begin with TMemIniFile.Create(ConfigIniPfad) do try begin WriteBool(Einstellung1,Toggle1SwitchAktiviert,False); UpdateFile; end; finally Free; end; end; end; |
AW: ToogleSwitch und ini
Hmm..
Habe hier kein ToggleSwitch, aber aus den Codschnipsel müsste es nicht besser so gehen? (ich gehe davon aus, das Einstellung1 und Toggle1SwitchAktiviert strings sind, in denen die Section und der Parametername stehen)
Code:
Wobei ich nicht bei jedem Clieck auf dem Switch direkt in die INI schreiben würde...
procedure TForm2.ToggleSwitchAktivierenClick(Sender: TObject);
begin with TMemIniFile.Create(ConfigIniPfad) do try WriteBool(Einstellung1,Toggle1SwitchAktiviert,ToggleSwitchAktivieren.IsOn); UpdateFile; finally Free; end; end; |
AW: ToogleSwitch und ini
Das kann man aber deutlich abkürzen:
Delphi-Quellcode:
Das Lesen wird vermutlich gar nicht compilieren, da IsOn eine Function und kein writable Property ist.
with TMemIniFile.Create(ConfigIniPfad) do
try WriteBool(Einstellung1,Toggle1SwitchAktiviert,ToggleSwitchAktivieren.IsOn); UpdateFile; finally Free; end;
Delphi-Quellcode:
ToggleSwitchAktivieren.State := IfThen<TToggleSwitchState>(ReadBool(Einstellung1,Toggle1SwitchAktiviert,True), tssOn, tssOff);
|
AW: ToogleSwitch und ini
Delphi-Quellcode:
Da IsOn eine Funktion ist, kann man ihr auch nichts zuweisen, da müsstest Du wohl auf die State-Eigenschaft zurückgreifen.
procedure TForm2.ToggleSwitchAktivierenClick(Sender: TObject);
var Ini: TMemIniFile; begin Ini := TMemIniFile.Create(ConfigIniPfad); try Ini.WriteBool(Einstellung1,Toggle1SwitchAktiviert, ToggleSwitchAktivieren.IsOn); Ini.UpdateFile; finally Ini.Free; end; end; |
AW: ToogleSwitch und ini
Delphi-Quellcode:
Das obige bewirkt, das in Datei Settings.ini eine Sparte [Setup] angelegt wird, als einstellungsname wird Einstellung1 genommen und als Wert True oder False geschrieben, der Wert ist Hier_Kommt_Ein_Boolean-Wert_rein
Wie lautet Ini Anweisung? Ist bei Dir nich ersichtlich.
Beispiel: ini := TIniFile.create(IncludeTrailingBackslash(ExtractFilePath(ParamStr(0))) + 'settings.ini'); try ini.WriteBool('Setup', 'Einstellung1', Hier_Kommt_Ein_Boolean-Wert_rein); Hier_Kommt_Ein_Boolean-Wert_rein := ini.ReadBool('Setup', 'Einstellung1', False); finally ini.free; end; |
AW: ToogleSwitch und ini
Ich glaube das einfachste wird sein ich nehm eine Checkbox ;)
Danke trotzdem. |
AW: ToogleSwitch und ini
Auf die Gefahr hin, dass ich jetzt ganz blöd dastehe: Was ist denn Toggle1SwitchAktiviert? Welchen Typ hat das, wo ist das definiert?
|
AW: ToogleSwitch und ini
Zitat:
Allerdings würde das bei einer Checkbox im gleichen Problem enden. Zitat:
Einfach mal eine Blick in den Objektinspektor werfen, und dort mal ermitteln mit welcher Eigenschaft das Toogle umgeschaltet wird. Weiterhin hilf F1 auch dort. |
AW: ToogleSwitch und ini
Zitat:
|
AW: ToogleSwitch und ini
Zitat:
Mit der Checkbox habe ich es gerade schon umgesetzt und es funktioniert nun alles so wie ich es benötige. |
AW: ToogleSwitch und ini
Zitat:
|
AW: ToogleSwitch und ini
Ich bin zwar absoluter Anfänger und dürfte hier eigentlich gar nicht reinschreiben, aber eines habe ich ganz am Anfang trotzdem gelernt
nicht auf True oder False vergleichen Es gibt sicher Ausnahmefälle, die sind mir aber nur in Scriptsprachen bekannt. Zitat:
|
AW: ToogleSwitch und ini
Einfacher Grund: Es gibt beim Delphi-Boolean 255 Werte die True bedeuten und einen False.
Beim Zuweisen ist es OK, aber beim Vergleichen kann das eben zu Problemen fühlen, denn True ist <>0 und False ist =0, aber diese Konstante True ist =1. In C++ ist BOOL oft ein Integer und kein Byte, somit 4 Milliarden True und ein False. Und die Konstante ist manchmal +1 ($0000001) und meisten -1 ($ffffffff). |
AW: ToogleSwitch und ini
Es ist auch schlicht überflüssig und erschwert unter Umständen die Lesbarkeit des Codes.
Sherlock |
AW: ToogleSwitch und ini
Zitat:
|
AW: ToogleSwitch und ini
delete
|
AW: ToogleSwitch und ini
Zitat:
![]()
Delphi-Quellcode:
Demnach ist es ein Aufzählungstyp und hat genau zwei Werte nämlich False und True.
type Boolean = (False, True);
Intern wird ein Byte verwendet was auch dokumentiert ist. Aber das steht auf einem anderen Blatt und solange man sauber programmiert hat man damit nichts zu tun. Als Grund warum man Vergleiche mit True oder False nicht machen sollte sehe ich wie Sherlock bei der Leserlichkeit. |
AW: ToogleSwitch und ini
Es wird immer nur mit ganzen Bytes gearbeitet.
Das Selbe gilt auch für Aufzählungstypen. Ein ENUM oder SET mit zwei Werten ist eben nicht nur 1 bzw. 2 Bits groß und kann somit auch weitere Werte enthalten.
Delphi-Quellcode:
Bei Enums kommt es dabei auch auf
type TMyEnum = (meNull, meEins);
var E: TMyEnum; E := TMyEnum(3);
Delphi-Quellcode:
drauf an, wieviele Bytes es nun letztendlich sind.
{$MINENUMSIZE}
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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