AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TDateTimePicker: selektierten Bereich ermitteln/setzen
Thema durchsuchen
Ansicht
Themen-Optionen

TDateTimePicker: selektierten Bereich ermitteln/setzen

Ein Thema von Daniel L. · begonnen am 1. Jun 2019 · letzter Beitrag vom 1. Jun 2019
Antwort Antwort
Daniel L.

Registriert seit: 25. Sep 2008
17 Beiträge
 
Delphi 10.3 Rio
 
#1

TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 12:30
Hallo Forum!

Im TDateTimePicker können Bereiche des Datums bzw. der Zeit einzeln selektiert werden.

Beispiel:
dateTimePicker1.format := 'dd.mm.yyyy'; Es kann nun der Tag, der Monat oder das Jahr einzeln selektiert werden.


Für eine geplante erweiterte Nutzung des TDateTimePickers stellen sich mir folgende Fragen:
  1. Wie könnte man per Code den selektierten Bereich ermittlen?
  2. Wie könnte man per Code einen Bereich selektieren?

Daniel
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#2

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 14:38
Hallo Forum!

Im TDateTimePicker können Bereiche des Datums bzw. der Zeit einzeln selektiert werden.

Beispiel:
dateTimePicker1.format := 'dd.mm.yyyy'; Es kann nun der Tag, der Monat oder das Jahr einzeln selektiert werden.


Für eine geplante erweiterte Nutzung des TDateTimePickers stellen sich mir folgende Fragen:
  1. Wie könnte man per Code den selektierten Bereich ermittlen?
  2. Wie könnte man per Code einen Bereich selektieren?

Daniel
Wenn MultiSelect = true ist und ein Bereich selektiert ist solle Date den Anfang und EndDate das Ende des Bereichs liefern. Beides kann man auch in Code setzen.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 14:57
Wenn MultiSelect = true ist und ein Bereich selektiert ist solle Date den Anfang und EndDate das Ende des Bereichs liefern. Beides kann man auch in Code setzen.
Oh, ich hatte das so verstanden, daß er innerhalb des Datum-Strings den Tages-, Monats- oder Jahresanteil selektieren möchte bzw. feststellen welcher davon gerade selektiert ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Daniel L.

Registriert seit: 25. Sep 2008
17 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 16:31
Zitat:
Oh, ich hatte das so verstanden, daß er innerhalb des Datum-Strings den Tages-, Monats- oder Jahresanteil selektieren möchte bzw. feststellen welcher davon gerade selektiert ist.
Ja genau!

Das ganze soll ein DateTimePicker werden, wo man sowohl ein Datum als auch eine Zeit eingeben können soll.(in einem Editfeld)

Als Format kann man das jetzt schon machen:

dateTimePicker1.format := 'dd.MM.yyyy HH:mm'; Man kann jetzt zwar Tag, Monat, Jahr, Stunde und Minute als User je einzeln selektieren
und auch ändern, aber es wird immer abhängig von kind (dtkDate oder dtkTime)
nur das Datum nach date, bzw. nur die Zeit nach time übernommen.

Ich will das jetzt automatisieren, in dem je nach dem selektiertem Bereich entweder auf dtkDate oder auf dtkTime geschaltet wird.

Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 17:23
Ich will das jetzt automatisieren, in dem je nach dem selektiertem Bereich entweder auf dtkDate oder auf dtkTime geschaltet wird.
Das wird vermutlich nicht funktionieren. Das Ändern von Kind erzeugt das Window-Handle neu und wird dadurch den Editiervorgang stören.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Daniel L.

Registriert seit: 25. Sep 2008
17 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 19:42
Das Ändern von kind hab ich mal mit einem Timer getestet (um den Fokus auf den Picker nicht zu verlieren):
Die Date - und Time Werte bleiben erhalten, aber nach der Änderung wird immer der erste Bereich im Edit selektiert, man müsste dann eben den vorherigen Bereich per Code wieder erneut selektieren.

Also mit entsprechenden OnChange/Click/Keydown...Reaktionen sollte das zu machen sein -
wenn ich an die Selektierungen rankäme...

Ich gebe zu, daß TDateTimePicker dafür nicht wirklich konzipiert ist und es ein ziemliches Gefrickel wäre - aber mich nervt es immer wieder, dass man für die Aufnahme eines vollständigen TDateTime Wertes immer 2 Picker brauch, deren Werte man dann addiern muss.

Und eine brauchbare Fremdkomponente (am besten dann auch als datensenitive Variante) hab ich noch nicht gefunden.

Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 20:00
Du könntest es vielleicht mit einer Interceptor Class erreichen, die das CN_NOTIFY abfängt:
Delphi-Quellcode:
type
  TDateTimePicker = class(Vcl.ComCtrls.TDateTimePicker)
  private
    procedure CNNotify(var Message: TWMNotifyDT); message CN_NOTIFY;
  end;

procedure TDateTimePicker.CNNotify(var Message: TWMNotifyDT);
var
  DT: TDateTime;
begin
  DT := DateTime;
  if (Message.NMHdr^.code = DTN_DATETIMECHANGE) and (Message.NMDateTimeChange^.dwFlags = GDT_VALID) then begin
    DT := SystemTimeToDateTime(Message.NMDateTimeChange^.st);
  end;
  inherited;
  DateTime := DT;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Daniel L.

Registriert seit: 25. Sep 2008
17 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 21:28
Ok, da ist einiges Neues für mich dabei, in das ich mich erst einarbeiten muß.

Wenn ich nicht weiterkomme, werd ich hier nochmal weiterposten.

Erstmal vielen Dank!

Daniel

Geändert von Daniel L. ( 1. Jun 2019 um 21:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: TDateTimePicker: selektierten Bereich ermitteln/setzen

  Alt 1. Jun 2019, 23:24
Zum Thema Interceptor Class hier ein guter Artikel von Žarko Gajić: Delphi Interceptor (/Interposer) Classes -> TButton = class(TButton)

Sicher hilft auch ein Blick in die originale TDateTimePicker.CNNotify in Vcl.ComCtrls um zu verstehen, wie der Code funktioniert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.
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