//*********************************************************************
//*                      FormatDate  2020-07-09                       *
//*                     >> OnArticleListPaint <<                      *
//*                                                                   *
//* Mit diesem Script wird das Aussehen der Thread-Pane beinflusst.   *
//* So wird hier bspw. das Datum individuell eingestellt.             *
//*                                                                   *
//* Funktionalitaet: [x] neutral                                      *
//*                  [ ] nur Basis_Modul                              *
//*                  [ ] nur Pathfinder                               *
//*                                                                   *
//* Datum         : 15.06.2009                                        *
//* Autor         : Dietmar Vollmeier                                 *
//* Ueberarbeitet : Thomas Barghahn 09.07.2020                        *
//*                                                                   *
//* DateiName     : _i_OALP_FormatDate.ds                             *
//* Einbindung    : {$I _i_OALP_FormatDate.ds}                        *
//* Aufruf        : Result := FormatDate (PaintString);               *
//*********************************************************************
Procedure Init_FormatDate( Var BackD, ChoiceBackD            : Integer;
                           Var DTFmt, TFmt, BackDPrefix, 
                               BackDSuffix, DStrH, DStrG, DStrV, DStrZ,
                               DStrMo, DStrDi, DStrMi, DStrDo, DStrFr,
                               DStrSa, DStrSo : String);

Begin
//{-------------------------------------------------------------------}
//{                 Anwenderspezifische Einstellungen                 }
//{-------------------------------------------------------------------}

   // Für das Format der Datums- und Zeitanzeigen verwende die Delphi-Syntax,
   // wie in der 4d-Hilfe unter "Date-Time Format Strings" oder
   // z.B. auf folgender Seite angegeben
   // -> http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime

   // Wie soll Datum/Uhrzeit formatiert werden?
   // DTFmt := 'd.m.yyyy (hh:nn)';
      DTFmt := 'dd.mm.yyyy hh:nn:ss';

   // Wie soll die Uhrzeit formatiert werden, wenn sie alleine oder zusammen mit
   // den Speziellen- bzw. Wochentagen angezeigt wird?
   // TFmt := '(hh:nn)';
   // TFmt := '(hh:nn:ss)';
      TFmt := 'hh:nn:ss';

   // Spezielle Tage definieren
   // Heute
   // Bei DStrH := '' wird nur die Uhrzeit angezeigt
   // DStrH := 'Heute ';
      DStrH := '';
  // Gestern
   // Bei DStrG := '' wird auf folgende Einstellungen zurückgegriffen
      DStrG := 'Gestern ';
   // Vorgestern
   // Bei DStrV := '' wird auf folgende Einstellungen zurückgegriffen
      DStrV := 'Vorgestern ';
   // Zukunft
   // Bei DStrZ := '' wird Datum/Uhrzeit angezeigt, wie unter DTFmt angegeben
      DStrZ := 'Zukunft ';

   // Wochentage definieren
      DStrMo := 'Montag ';
      DStrDi := 'Dienstag ';
      DStrMi := 'Mittwoch ';
      DStrDo := 'Donnerstag ';
      DStrFr := 'Freitag ';
      DStrSa := 'Samstag ';
      DStrSo := 'Sonntag ';

   // Wieviele vergangene Tage sollen speziell formatiert dargestellt werden?
   // Darüber hinaus wird Datum/Uhrzeit angezeigt, wie unter DTFmt angegeben.
   // BackD := 3;
      BackD := 3;

   // Wie sollen diese Tage dargestellt werden?
   // 1 ... BackDPrefix und -suffix (siehe weiter unten) werden genutzt
   //       Das Ergebnis wäre dann z.B. 'vor x Tagen'
   // 2 ... Wochentage werden angezeigt
   //       Wenn bei BackD mehr als 7 Tage eingegeben wurde, dann werden die
   //       darüber hinausgehenden Tage wie unter '1' angezeigt!
   // ChoiceBackD := 1;
      ChoiceBackD := 1;

   // Einstellungen für BackDPrefix und -suffix
      BackDPrefix := 'vor ';
      BackDSuffix := ' Tagen ';

end;
//{-------------------------------------------------------------------}
//{                       Ende der Einstellungen                      }
//{-------------------------------------------------------------------}

//{===================================================================}
//{           !!!  Ab hier bitte nichts mehr ändern  !!!              }
//{===================================================================}

//--[ Function FormatDate ]--------------------------------------------

Function FormatDate(PS : WideString) : WideString;

Var
   DaysAgo, BackD, ChoiceBackD                 : Integer;
   DStr, DTFmt, TFmt, BackDPrefix, BackDSuffix : String;
   DateTime                                    : TDateTime;
   DStrA                                       : Array[0..3] of String;
   WDStrA                                      : Array[1..7] of String;
   y, m, d, dow                                : Word;

Begin
   Init_FormatDate(BackD, ChoiceBackD, DTFmt, TFmt, BackDPrefix, BackDSuffix,
                   DStrA[0], DStrA[1], DStrA[2], DStrA[3], WDStrA[2], WDStrA[3],
                   WDStrA[4], WDStrA[5], WDStrA[6], WDStrA[7], WDStrA[1]);

   DateTime := StrToDateTime(PS);
   DaysAgo  := Trunc(Now()) - Trunc(DateTime);

   If DaysAgo < 0 Then
      DStr := DStrA[3]
   Else If DaysAgo <= BackD Then
   Begin
      Case DaysAgo of
       0,1,2: DStr := DStrA[DaysAgo];
      End;
      If (DaysAgo > 0) And (DStr = '') Then
      Begin
         If (ChoiceBackD = 1) Or (DaysAgo > 7) Then
            DStr := BackDPrefix + IntToStr(DaysAgo) + BackDSuffix
         Else
         Begin
            DecodeDateFully(DateTime, y, m, d, dow);
            DStr := WDStrA[dow];
         End;
      End;
   End;

   If (DaysAgo = 0) Or (DStr > '') Then
      result := DStr + FormatDateTime(TFmt, StrToDateTime(PS))
   Else
      result := FormatDateTime(DTFmt, StrToDateTime(PS));
End;

//--[ Ende Function FormatDate ]---------------------------------------