Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FastReport Datum formatieren (https://www.delphipraxis.net/107090-fastreport-datum-formatieren.html)

Salomon 22. Jan 2008 10:42


FastReport Datum formatieren
 
Hi,
ich hätte gerne ein DateTime Feld in FastReport wie folgt dagestellt:

Mon 01.01.2008
Tue 02.01.2008
Wed 03.01.2008

Mit der Formatierung "ddd dd.mm.yyyy" im Report war ich schon einigermaßen erfolgreich. Allerdings sind die Wochentagsabkürzungen auf Deutsch. Die hätte ich gerne auf englisch. Hat jemand eine Idee?

Gruß
Marcus

Union 22. Jan 2008 11:21

Re: FastReport Datum formatieren
 
Delphi-Quellcode:
   ShortDayNames[1] := 'Sun';
ShortDayNames[2] := 'Mon';
ShortDayNames[3] := 'Tue';
ShortDayNames[4] := 'Wed';
ShortDayNames[5] := 'Thu';
ShortDayNames[6] := 'Fri';
ShortDayNames[7] := 'Sat';
Vorher solltest Du den Inhalt des Arrays sichern und nach dem Ausdruck des Reports wiederherstellen, denn die Einstellungen gelten systemweit.

marabu 22. Jan 2008 11:30

Re: FastReport Datum formatieren
 
Hallo Marcus,

wie wäre es hiermit:

Delphi-Quellcode:
var
  fs: TFormatSettings;
begin
  GetLocaleFormatSettings($0409, fs);
  ShowMessage(FormatDateTime('ddd dd.mm.yyyy', now, fs));
end;
Grüße vom marabu

Union 22. Jan 2008 11:33

Re: FastReport Datum formatieren
 
Das ist natürlich sehr schön und auch Thread-Safe, aber er will es ja im Reportgenerator verwenden. Eine weitere Möglichkeit bestünde in der Definition einer UDF für Datumswerte in Fastreport, dann kann man die Funktion im Delphi Programm lassen und sauber mit TFormatSettings arbeiten.

marabu 22. Jan 2008 11:40

Re: FastReport Datum formatieren
 
Hallo Union,

wenn DateTime-Feld sich auf ein TDateTimeField bezieht, so würde ich einfach ein calculated field deklarieren und diesem den bereits formatierten String zuweisen. FastReport ist dann aller Pflichten enthoben.

Freundliche Grüße

Salomon 22. Jan 2008 11:47

Re: FastReport Datum formatieren
 
Ihr seit die besten! Das funktioniert super :) Habe mir schon gedacht, das das mit den Ländereinstellung etc. zu tun hat, aber auf so ein Array wäre ich wohl nicht gekommen.

Im FastReport geht nur Unions Methode, da das PascalScript die FormatSettings nicht kennt. Anonsten funktioniert marabus Mehode unter Delphi auch gut.

Union 22. Jan 2008 11:58

Re: FastReport Datum formatieren
 
Und hier die Mischung aus beidem:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   // Fastreport die Funktion mitteilen
   frxReport1.AddFunction('function MyDateTimeToStr(ADateTime : TDateTime) : string');
end;

function TForm1.frxReport1UserFunction(const MethodName: String;
  var Params: Variant): Variant;
var
   fs : TFormatSettings;
begin
   if Methodname = 'MYDATETIMETOSTR' then
   begin
      GetLocaleFormatSettings($0409, fs);
      result := FormatDateTime('ddd dd.mm.yyyy', Params[0], fs);
   end;
end;
Im Fastreport trägst Du dann folgendes in das Memo ein, um die Funktion aufzurufen (Achtung, Datumsformatierung löschen, da String zurückgegeben wird!):
Zitat:

Zitat von FastReport 4.0
[MyDateTimeToStr(<Date>)]



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