Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kompliziertes Problem mit Wochentagberechnung (https://www.delphipraxis.net/193679-kompliziertes-problem-mit-wochentagberechnung.html)

Glados 29. Aug 2017 13:52

AW: Kompliziertes Problem mit Wochentagberechnung
 
Ok das wusste ich nicht. Ich dachte das Casten beim Auslesen + das "in" würden reichen.
Mh das funktioniert auch nicht, obwohl Byte(exclude) nun "8" entspricht.

Uwe Raabe 29. Aug 2017 13:52

AW: Kompliziertes Problem mit Wochentagberechnung
 
Oder ganz komfortabel mit einem Record Helper:
Delphi-Quellcode:
  TDayOfWeekSetHelper = record helper for TDayOfWeekSet
    function GetAsInteger: Integer;
    procedure SetAsInteger(const Value: Integer);
    property AsInteger: Integer read GetAsInteger write SetAsInteger;
  end;

function TDayOfWeekSetHelper.GetAsInteger: Integer;
begin
  Result := Byte(Self);
end;

procedure TDayOfWeekSetHelper.SetAsInteger(const Value: Integer);
begin
  Byte(Self) := Value;
end;

...
  IniS.WriteInteger(section, ident, aDayOfWeekSet.AsInteger);
...
  exclude.AsInteger := IniS.ReadInteger(section, ident, 0);

Glados 29. Aug 2017 13:57

AW: Kompliziertes Problem mit Wochentagberechnung
 
Werde ich definitiv noch umsetzen.
Aber wieso schlägt denn ein Vergleich
Delphi-Quellcode:
cbDay2.Checked := 8 in exclude;
fehl? Die 8 ist ganz sicher da drin vorhanden.

Wie ich aktuell prüfe
Delphi-Quellcode:
cbDay2.Checked := 8 in exclude;
cbDay1.Checked := 4 in exclude;
cbDay0.Checked := 2 in exclude;

Uwe Raabe 29. Aug 2017 14:17

AW: Kompliziertes Problem mit Wochentagberechnung
 
Zitat:

Zitat von Glados (Beitrag 1379838)
Werde ich definitiv noch umsetzen.
Aber wieso schlägt denn ein Vergleich
Delphi-Quellcode:
cbDay2.Checked := 8 in exclude;
fehl? Die 8 ist ganz sicher da drin vorhanden.

Wie ich aktuell prüfe
Delphi-Quellcode:
cbDay2.Checked := 8 in exclude;
cbDay1.Checked := 4 in exclude;
cbDay0.Checked := 2 in exclude;


So funktionieren Sets aber nicht. Die 8 kann gar nicht im Set vorkommen, da die Wochentage nur von 0..6 definiert sind.

Delphi-Quellcode:
cbDay2.Checked := 2 in exclude; // Mittwoch
cbDay1.Checked := 1 in exclude; // Dienstag
cbDay0.Checked := 0 in exclude; // Montag
Oder besser gleich so deklarieren:

Delphi-Quellcode:
type
  TDayOfWeek = (dowMontag, dowDienstag, dowMittwoch, dowDonnerstag, dowFreitag, dowSamstag, dowSonntag);
  TDayOfWeekSet = set of TDayOfWeek;

Glados 29. Aug 2017 14:23

AW: Kompliziertes Problem mit Wochentagberechnung
 
Ok hier noch einmal alles was ich bisher habe

Speichern
Delphi-Quellcode:
var
 aDayOfWeekSet: TDayOfWeekSet ;
begin
for i := 0 to 6 do
 begin
  aCheckBox := (FindComponent('cbDay' + IntToStr(i)) as TCheckBox);

  if Assigned(aCheckBox) and aCheckBox.Checked then
   aDayOfWeekSet := aDayOfWeekSet + [aCheckBox.Tag]; // Das Tag jeder CheckBox enthält Zahlen von 0-6 (Montag-Sonntag)
 end;

 IniS.WriteInteger(section, ident, Byte(aDayOfWeekSet));
end;
Lesen
Delphi-Quellcode:
 Byte(exclude):= IniS.ReadInteger(section, ident, 0);

 ShowMessage(IntToStr(Byte(exclude))); // z.B.: 28 = Dienstag, Mittwoch, Donnerstag waren "checked"

 cbDay2.Checked := 2 in exclude;
 cbDay1.Checked := 1 in exclude;
 cbDay0.Checked := 0 in exclude;
Speichern funktioniert, lesen leider nicht :(

generic 29. Aug 2017 14:30

AW: Kompliziertes Problem mit Wochentagberechnung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kennst du Cromis cron-scheduler? Du erfindest das Rad gerade erneut.


Ich hatte da 2014 mal drüber geschrieben:
https://entwickler.de/online/develop...al-114967.html

Die Cromis homepage geht gerade bei mir nicht:
http://web.archive.org/web/201603150...ron-scheduler/

Uwe Raabe 29. Aug 2017 14:31

AW: Kompliziertes Problem mit Wochentagberechnung
 
Zitat:

Zitat von Glados (Beitrag 1379846)
Delphi-Quellcode:
 ShowMessage(IntToStr(Byte(exclude))); // z.B.: 28 = Dienstag, Mittwoch, Donnerstag waren "checked"

Das stimmt schon mal nicht! 28 = 4 + 8 + 16 entspricht Mittwoch, Donnerstag, Freitag. Schau mal nach, was in deinen Checkbox.Tags wirklich steht.

Übrigens:
Delphi-Quellcode:
  aDayOfWeekSet := aDayOfWeekSet + [aCheckBox.Tag];

geht auch so:
Delphi-Quellcode:
  Include(aDayOfWeekSet, aCheckBox.Tag);

Glados 29. Aug 2017 14:38

AW: Kompliziertes Problem mit Wochentagberechnung
 
Zitat:

Schau mal nach, was in deinen Checkbox.Tags wirklich steht.
Du hattest recht. Ich hatte eine 1-basierte Zählung in den Tags, nicht 0-basiert :pale:

Zitat:

Kennst du Cromis cron-scheduler? Du erfindest das Rad gerade erneut.
Vor Cron habe ich mich schon mein ganzes Leben lang erfolgreich versteckt was wohl daran liegt, dass ich es nicht leiden kann genau so wenig wie Linux.

Klar, das ist extrem flexibel, keine Frage! Aber das jetzt alles umbauen... nee.

Es funktioniert nun alles
Danke an alle die geholfen haben dieses/mein Mysterium zu lösen.

himitsu 29. Aug 2017 16:27

AW: Kompliziertes Problem mit Wochentagberechnung
 
Wenn man das als SET mit "Namen" deklariert hat, könnte man auch über die TypeInfo oder RTTI das SET von/in einen String umwandeln.

Glados 29. Aug 2017 16:29

AW: Kompliziertes Problem mit Wochentagberechnung
 
Du meinst damit die Controls dahinter die richtigen Captions bekommen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr.
Seite 2 von 3     12 3      

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