Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dialog "Zeitzone ändern" nachbauen (https://www.delphipraxis.net/185823-dialog-zeitzone-aendern-nachbauen.html)

TUX_der_Pinguin 13. Jul 2015 12:10

AW: Dialog "Zeitzone ändern" nachbauen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1308548)
Was hast du denn sonst erwartet?

Willst du den String "(UTC+01:00) Amsterdam, Berlin, Bern, Rom, Stockholm, Wien" haben?

Ähm ja, wie soll man den sonst wissen welche Zeitzone aus der Liste aktuell im System eingestellt ist!?

Der schöne Günther 13. Jul 2015 12:50

AW: Dialog "Zeitzone ändern" nachbauen
 
Ich hatte anhand von
Delphi-Quellcode:
StandardName
verglichen und war glücklich damit.

Das hatte es nicht mehr in den Upload geschafft.
Delphi-Quellcode:
function TTimeZoneHelper.Equals(Obj: TObject): Boolean;
var
   asTimeZone: TTimeZone;
begin
   if (not (Obj is TTimeZone)) then Exit(False);
   asTimeZone := Obj as TTimeZone;

   Result := ID.Equals(asTimeZone.ID);
end;

TUX_der_Pinguin 13. Jul 2015 13:52

AW: Dialog "Zeitzone ändern" nachbauen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1308562)
Ich hatte anhand von
Delphi-Quellcode:
StandardName
verglichen und war glücklich damit.

Das hatte es nicht mehr in den Upload geschafft.
Delphi-Quellcode:
function TTimeZoneHelper.Equals(Obj: TObject): Boolean;
var
   asTimeZone: TTimeZone;
begin
   if (not (Obj is TTimeZone)) then Exit(False);
   asTimeZone := Obj as TTimeZone;

   Result := ID.Equals(asTimeZone.ID);
end;

Ich habe mal versucht die Funktion in die Datei "Helper.System.DateUtils.TimeZone.pas" einzubauen ...
Delphi-Quellcode:
   TTimeZoneHelper = class helper for System.DateUtils.TTimeZone
      protected const
         registryBasePath   = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones';
         expectedResFile      = 'tzres.dll';
      protected
         class function CreateFromRegistry(
            const   registry:   TRegistry;
            const   fetcher:   TResourceStringFetcher;
            const   keyName:   String
         ): TPair<TDynamicTimeZoneInformation, String>;
         /// <summary>
         ///     Sortiert absteigend nach UTC-Bias. Von Greenwhich ausgehend
         ///    also von West nach Ost.
         /// </summary>
         class procedure MakeSorted(var items: TArray<TTimeZone>);
         class function GetNamedSystemZones(): TDictionary<TDynamicTimeZoneInformation, String>; virtual;
      public
         class function GetZones(): TArray<TTimeZone>;
         class procedure SetLocalTimeZone(const value: TTimeZone); static;
      class function Equals(Obj: TObject): Boolean;
   end;
... der compiler meckert aber das er mit "ID.Equals()" nichts anfangen kann.
Delphi-Quellcode:
class function TTimeZoneHelper.Equals(Obj: TObject): Boolean;
var
   asTimeZone: TTimeZone;
begin
   if (not (Obj is TTimeZone)) then Exit(False);
   asTimeZone := Obj as TTimeZone;

   Result := ID.Equals(asTimeZone.ID);
end;
Aber naja was solls, es scheint ja irgendwie doch nicht so zu funktionieren wie ich mir das gedacht habe. Ich werde das dann wohl auf unbestimmte Zeit verschieben oder gleich ganz lassen.

Vielen vielen dank Günther für deine mühen und deine Geduld ;-)

Der schöne Günther 13. Jul 2015 16:25

AW: Dialog "Zeitzone ändern" nachbauen
 
Delphi-Quellcode:
ID
ist ein String. Wenn der kein
Delphi-Quellcode:
Equals(..)
kennt hast du
Delphi-Quellcode:
System.SysUtils
nicht in der
Delphi-Quellcode:
uses
-Liste ;-)

Ich muss aber auch sowieso noch eine grafische Oberfläche dazu bauen, habe es damit aber nicht sonderlich eilig. Wenn ich das mal gemacht habe kann ich dir ja auch nochmal Bescheid geben. Denn ich finde, es geht doch an sich alles bestens: Zeitzone feststellen, Zeitzone einstellen. Was vergessen?

hathor 13. Jul 2015 19:33

AW: Dialog "Zeitzone ändern" nachbauen
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1308556)
Zitat:

Zitat von Der schöne Günther (Beitrag 1308548)
Was hast du denn sonst erwartet?

Willst du den String "(UTC+01:00) Amsterdam, Berlin, Bern, Rom, Stockholm, Wien" haben?

Ähm ja, wie soll man den sonst wissen welche Zeitzone aus der Liste aktuell im System eingestellt ist!?

Es gibt in WINDOWS seit WIN7 ein Tool: TZUTIL.exe

Windows-Zeitzonen-Hilfsprogramm

Syntax:
TZUTIL </? | /g | /s TimeZoneID[_dstoff] | /l>

Parameter:
/? Zeigt Informationen zur Syntax an.
/g Zeigt die aktuelle Zeitzonen-ID an.
/s TimeZoneID[_dstoff]
Legt die aktuelle Zeitzone unter Verwendung der angege-
benen Zeitzonen-ID fest. Mit dem Suffix "_dstoff" werden
Sommerzeitanpassungen fr die Zeitzone deaktiviert
(sofern zutreffend).
/l Führt alle gültigen Zeitzonen-IDs und Anzeigenamen auf.
Ausgabe:
<Anzeigename>
<Zeitzonen-ID>

Beispiele:
TZUTIL /g
TZUTIL /s "Pacific Standard Time"
TZUTIL /s "Pacific Standard Time_dstoff"

Anmerkungen:
Durch den Beendigungscode "0" wird angegeben, dass der
Befehl erfolgreich ausgeführt wurde.

Beispiel:
tzutil /l >F:/timezones.txt
schreibt alle gültigen Zeitzonen-IDs und Anzeigenamen in ein File.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Seite 3 von 3     123   

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