Ver Mensaje Individual
  #1  
Antiguo 28-08-2013
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Reputación: 17
ingabraham Va por buen camino
Wink Obtener zona horaria en window 8

tengo el siguiente codigo y me funciona bien hasta win 7

pero en el 8 no me funciona.

me carga en el combobox las zonas, como por ejemplo:

(GMT -05:: BOGOTA , LIMA, QUITO)

obtengo la zona horaria Con el sgt codigo:
Código Delphi [-]

//Lena el combobox que se pase como parametro con las diferentes zonas de tiempo
//que se encuentren en el registro de windows
// PRE  :   El query puede llegar nil si se llama del setup en ese caso asigna settings
//          de la aplicacion por defecto

function TZ_FillTimeZonesComboBox(Query: TADOQuery; cmbTimeZones: TComboBox): boolean;
var LVTimeZones         : TListView;
    LVCreated, TZResult : boolean;
    TZDSTSettings       : TTZDSTSettings;
    ActiveTimeZone      : TimeZone;
    errMsg :string;
begin
   //Inicializacion de variables para evitar warnings
   LVTimeZones := nil;
   LVCreated := false;
   try

      //Inicializa el arreglo TZs con las zonas de tiempo que se encuentran
      //en el registro de windows
      TZ_Initialize();

      LVTimeZones := TListView.Create(cmbTimeZones.Owner);
      LVCreated := true;

      LVTimeZones.Parent := cmbTimeZones.Parent;

      //Poblar la lista de zonas de tiempo.
      TZ_FillListView(LVTimeZones);

      //Ordenar la lista
      LVTimeZones.SortType := stText;
      LVTimeZones.SortType := stNone; 
      TZ_OrderTimeZone(lvTimeZones,0,0);  

      //Ahora que está ordenada copiar dicha lista al combo. La columna que se copia
      //es la de 'NAME', dado que las primeras dos son solo para efecto de ordenamiento.
      TZ_FillComboFromList(LVTimeZones, cmbTimeZones);

      // Obtienen los settings de DST de la aplicacion.
      if not (Query = nil ) then
         TZDSTSettings :=  TZ_GetTZDSTSEttings(Query,tzresult,errMsg);
      //Si la zona de tiempo que leyo de la BD NO esta dentro de las que se encuentran en el combo
      //cmbTimeZones (esto ocurre cuando se escribe en la BD en un idioma diferente al de la estación de trabajo)
      //la variable cmbTimeZones.ItemIndex queda con el valor de -1
      cmbTimeZones.ItemIndex := cmbTimeZones.Items.IndexOf(TZDSTSettings.TIMEZONE);

      //Si NO encontró una zona de tiempo busca la del computador
      if cmbTimeZones.ItemIndex=-1 then begin

         // En este punto hay que saber cual es la TZ activa del sistema.
          ActiveTimeZone := TZ_GetActiveTimeZone();

          TZDSTSettings.TIMEZONE := ActiveTimeZone.ID;

         //Ubica el combo en la zona de tiempo que indica la variable TZDSTSettings.TIMEZONE
         //que deberia ser la zona de tiempo del PC
         cmbTimeZones.ItemIndex := cmbTimeZones.Items.IndexOf(TZDSTSettings.TIMEZONE);

      end;

      LVTimeZones.Free;

      result := true;
   except
      on e:exception do begin
         result := false;

         //Si creo el TListView lo libera.
         if LVCreated then
            LVTimeZones.Free;
      end;
   end;
end;
__________________
Enseñar es la virtud de un sabio.

Última edición por ingabraham fecha: 28-08-2013 a las 17:59:12.
Responder Con Cita