Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi datetimepicker wochentag? (https://www.delphipraxis.net/83303-datetimepicker-wochentag.html)

tom_po 30. Dez 2006 18:43


datetimepicker wochentag?
 
Ist beim Datetimepicker der Wochentag hinterlegt? Ich habe eine SQL-Abftrage, die ueber einen Timer gesteuert ist und moechte den Datetimepicker automatisch immer auf den naechsten Montag weiterschalten, wenn die Form aufgerufen wird.
Also z.B. bei Samstag, 30.12.06 auf Montag, 01.01.07 weiterschalten, so was wie datetimepicker1.date+2 als Ergebnis, aber wie komme ich auf die 2 automatisch?

TwoFace 30. Dez 2006 19:31

Re: datetimepicker wochentag?
 
Servus

So etwa?

Delphi-Quellcode:
var
tage : array [1..7] of String = ('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');

begin
  edit1.text := tage[dayofweek(DateTimePicker1.datetime)];
end;

Greetz

raiguen 31. Dez 2006 00:11

Re: datetimepicker wochentag?
 
Moin :-)
Vielleicht eher so?:
Delphi-Quellcode:
...
case DayOfWeek(DateTimePicker1.Date) of
  1: DateTimePicker1.Date := DateTimePicker1.Date +1; //Sonntag
  7: DateTimePicker1.Date := DateTimePicker1.Date +2; //Samstag
end;
...

TwoFace 31. Dez 2006 07:31

Re: datetimepicker wochentag?
 
Grüß Gott

dann eher so:

Delphi-Quellcode:
..
while dayofweek(Datetimepicker1.Date) <> 2 do
  Datetimepicker1.Date := datetimepicker1.Date + 1;
..
Greetz

tom_po 31. Dez 2006 10:36

Re: datetimepicker wochentag?
 
zunächst mal vielen Dank für Eure Vorschläge, aber welcher ist nun der Beste?
hatte noch vergessen, dass es vor allem für Windows in englisch (Sprach-und Ländereinstellungen) gehen muss, d.h. bei Vorschlag 1 müssten die Variablen dann Sunday, monday usw. sein? Wäre dann aber auf Windows-englisch beschränkt oder?

Was bedeutet beim 2. Vorschlag (case of) die Zahl 1: und dann 7: ?
Wieso 7: in der 2. Zeile, wieso nicht 2: ?
wäre der Code für die komplette Woche so?

Delphi-Quellcode:
case DayOfWeek(DateTimePicker1.Date) of
  1: DateTimePicker1.Date := DateTimePicker1.Date +1; //Sonntag
  2: DateTimePicker1.Date := DateTimePicker1.Date +2; //Samstag
  3: DateTimePicker1.Date := DateTimePicker1.Date +3; //Freitag
  4: DateTimePicker1.Date := DateTimePicker1.Date +4; //Donnerstag
  5: DateTimePicker1.Date := DateTimePicker1.Date +5; //Mittwoch
  6: DateTimePicker1.Date := DateTimePicker1.Date +6; //Dienstag
end;
Bei der while-Version, wieso <> 2?
wie wäre der Code für die ganze Woche?

tom_po 31. Dez 2006 10:51

Re: datetimepicker wochentag?
 
Ich habe den case-Vorschlag mal probiert, es hat funktioniert mit dem heutigen Tag (Sonntag), habe dann aber das Datum meines PC's auf morgen gestellt, dann zeigte mit der Datetimepicker den 3.1. an, warum?

der Code sieht jetzt so aus:

Delphi-Quellcode:
datetimepicker1.Date := now;
case DayOfWeek(DateTimePicker1.Date) of
  1: DateTimePicker1.Date := DateTimePicker1.Date +1; //Sonntag
  2: DateTimePicker1.Date := DateTimePicker1.Date +2; //Samstag
  3: DateTimePicker1.Date := DateTimePicker1.Date +3; //Freitag
  4: DateTimePicker1.Date := DateTimePicker1.Date +4; //Donnerstag
  5: DateTimePicker1.Date := DateTimePicker1.Date +5; //Mittwoch
  6: DateTimePicker1.Date := DateTimePicker1.Date +6; //Dienstag
  7: DateTimePicker1.Date := DateTimePicker1.Date; //Montag
end;

tom_po 31. Dez 2006 10:59

Re: datetimepicker wochentag?
 
mein Gott, ich bin jetzt wirklich buff...
Greetz, dein einfacher Code (while dayofweek...) geht immer, habe alle Tage getestet, wunderbar, danke.

Weiss aber ehrlich nicht gesagt, warum dieser so einfach Code das macht....

Greets, noch ne weitere Frage:
ich habe ja mein Windows auf Deutsch konfiguriert, geht dies auch, wenn es auf chinesisch eingestellt ist? ich mache die Software für eine chindesische Firma...

TwoFace 31. Dez 2006 11:03

Re: datetimepicker wochentag?
 
Servus

die Wochtage sind meines Wissens nach nicht irgendwo gespeichert, d.h. du mußt sie irgendwie vorgeben. (siehe Beispiel im #2 Beitrag, dementsprechend Monday, Tuesday, usw...)

Zu
Delphi-Quellcode:
case ... of
, funktioniert genauso, ruhig dem Prozessor das rechnen überlassen :-)

Dein Fehler im case Beispiel:
Zitat:

...habe dann aber das Datum meines PC's auf morgen gestellt, dann zeigte mit der Datetimepicker den 3.1. an, warum?
Morgen (01.01.2007) ist Montag, also Dayofweek 2. Wenn Dayofweek 2 ist, zählt deine case Anweisung noch zwei Tage dazu, also der 03.01.2007.

Die richtige case-Anweisung müßte so lauten:
Delphi-Quellcode:
 datetimepicker1.Date := now;
case DayOfWeek(DateTimePicker1.Date) of
  1: DateTimePicker1.Date := DateTimePicker1.Date +1; //Sonntag
  2: DateTimePicker1.Date := DateTimePicker1.Date ; //Montag
  3: DateTimePicker1.Date := DateTimePicker1.Date +6; //Dienstag
  4: DateTimePicker1.Date := DateTimePicker1.Date +5; //Mittwoch
  5: DateTimePicker1.Date := DateTimePicker1.Date +4; //Donnerstag
  6: DateTimePicker1.Date := DateTimePicker1.Date +3; //Freitag
  7: DateTimePicker1.Date := DateTimePicker1.Date +2; //Samstag
end;
Zitat:

Bei der while-Version, wieso <> 2? wie wäre der Code für die ganze Woche?
heißt: Solange der Wochentag im Datetimepicker nicht Montag (dayofweek=2) ist, zähle einen Tag dazu. Der Code für die ganze Woche ist:
Delphi-Quellcode:
while dayofweek(Datetimepicker1.Date) <> 2 do
  Datetimepicker1.Date := datetimepicker1.Date + 1;
Guten Rutsch

[Edit] Mein Gott bin ich langsam, 2 Antworten, während ich eine geschrieben hab. Naja egal, die Erklärung warum die while Schleife immer funktioniert steht ja da ;-) Und die richtige case Anweisung auch :-)[/Edit]

tom_po 31. Dez 2006 11:10

Re: datetimepicker wochentag?
 
danke, TwoFace, eigentlich einleuchtend dein Erklärung.
ich denke, der while Code ist der Richtige für mich, ist doch unabhängig von der eingestellten Sprache in der Windows-Konfig, oder?

aber ganz klar ist mir es doch nicht, du sagst (bei while..)
"Solange der Wochentag im Datetimepicker nicht Montag (dayofweek=2) ist, zähle einen Tag dazu."
wenn es Dienstag (z.B. 2.1.07) ist, wie weiss das System dann, dass es 6 Tage hinzuzählen muss und nicht nur 1 Tag, wie du sagst???

auch dir guten Rutsch...danke!

Ratte 31. Dez 2006 11:14

Re: datetimepicker wochentag?
 
Es ist doch eine Schleife, d.h. der Code heißt:"Solange Wochentag <> Montag addiere 1" D.h. er addiert sooft 1 bis er den Montag erreicht hat.


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