Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sumando valores de un listview (https://www.clubdelphi.com/foros/showthread.php?t=87077)

danielmj 12-11-2014 10:22:38

sumando valores de un listview
 
Hola, buenos dias a todos

Estoy intentando sumar el contenido de una columna dada de un listview, pero me tira el siguiente error:

Cita:

[dcc64 Error] datos.pas(147): E2250 There is no overloaded version of 'FloatToStr' that can be called with these arguments
Mi código es este:
Código Delphi [-]
...
for i:= 0 to lista.Items.Count -1 do
        total:= total + (FloatToStr(lista.Items[9].Caption));
...

Luego de probar varias cosas, aquí en el foro encontre este hilo supongo que no es algo muy complicado, pero no sé por qué a mi me da error.
¿alguna sugerencia? Por cierto, la variable total está definida como "extended"

Gracias y saludos.

ecfisa 12-11-2014 13:47:24

Hola danielmj.
Cita:

Empezado por danielmj (Mensaje 484506)
...
Estoy intentando sumar el contenido de una columna dada de un listview, pero me tira el siguiente error:
Cita:

[dcc64 Error] datos.pas(147): E2250 There is no overloaded version of 'FloatToStr' that can be called with these arguments
...

Ese error se produce por que estas intentando convertir una cadena a número flotante con la función FloatToStr cuyo trabajo es precisamente el inverso. La función indicada para ese caso es StrToFloat.

Saludos :)

danielmj 12-11-2014 14:13:40

Hola ecfisa, es cierto, después de enviar el post me di cuenta y lo cambié pero ahora después de cambiarlo me encuentro con esto:



El código lo cambié a esto (y la variable total la cambie de extended a real):

Código Delphi [-]
...
      for i:= 0 to lista.Items.Count -1 do
        begin
          total:= total + (StrToFloat(lista.Items[9].Caption));
          rForm.Label35.Caption:= FloatToStr(total);
        end;
...

Y si en cambio la variable la sigo definiendo como "extended", me tira este otro error:



Si en ese dialogo pulso sobre "break" me marca la siguiente linea:


Así que he pasado de un error por descuido a otro sobre el que no tengo ni idea ni control (siendo honesto) y obviamente no sé muy bien como solucionarlo.
Un saludo y gracias por tu tiempo.

ecfisa 12-11-2014 14:27:20

Hola danielmj.

Revisa que exista el índice 9 (lista.Items[9].Caption).

Saludos :)

danielmj 12-11-2014 16:46:09

Hola de nuevo ecfisa,

Mira la captura del listview con su distribución de columnas sería esta:


El codigo es este:
Código Delphi [-]
for i:= 0 to lista.Items.Count -1 do
begin
     total:= total + (StrToFloat(lista.Items.Item[10].Caption ));
     Label35.Caption:= FloatToStr(total);
end;

Me estaba liando con el indice, no contaba con la columna 0 que no se ve por eso de tener el width a 0. En lugar de poner 10, usaba el indice 9.
A parte de eso, lo unico que he cambiado es que esta parte del codigo ahora se inicia en el oncreate del formulario. He hecho estos cambios y ya no tira ningun error, eso si, sigue sin sumarme nada. Ahora me pondre con eso para que sume todas las cantidades.

Gracias y un saludo.

Casimiro Notevi 12-11-2014 16:53:13

Código Delphi [-]
for i:= 0 to lista.Items.Count -1 do
begin
     total:= total + (StrToFloat(lista.Items.Item[ i ].Caption ));
     Label35.Caption:= FloatToStr(total);
end;

danielmj 12-11-2014 19:15:59

Hola casimiro, gracias pero me temo que no funciona. Practicamente he copiado y pegado tu código y no suma nada, lo unico que hace es meter en "label35.caption" el precio del ultimo articulo introducido, pero no suma este con los anteriores.



La columna de al lado de "precio" está vacia por que aún ando liado con ella para agregar elementos desde otro formulario.

Como puedes ver en la captura, hace eso, mostrar el ultimo precio introducido pero no los suma.

Saludos

Casimiro Notevi 12-11-2014 19:23:28

No entiendo el contexto, ¿puedes explicarlo y también poner el código que usas, y qué valores tiene esa lista y cómo y dónde lo asignas?

danielmj 12-11-2014 20:08:40

Hola,

mira el siguiente es el codigo del evento oncreate:
Código Delphi [-]
procedure TrForm.FormCreate(Sender: TObject);
var
  i: integer;
  total: extended;
//  total2: extended;

begin
  total:= 0;
  for i:= 0 to lista.Items.Count -1 do
    begin
//      total:= total + (StrToFloat(lista.Items.Item[i].Caption )); //total + (StrToFloat(lista.Items.Item[10].SubItems[i]));// .Caption ));
//      total2:= StrToFloat(label35.Caption) + total;
//      Label35.Caption:= FloatToStr(total);// label35.Caption  FloatToStr(total);

        total:= total + (StrToFloat(lista.Items.Item[ i ].Caption ));
        Label35.Caption:= FloatToStr(total);
    end;
end;

**Lo que está como comentario, son pruebas que he ido haciendo sin mayor importancia **

Por otra parte, el código que le manda el valor precio a la lista (TlistView) es este:
Código Delphi [-]
procedure TpDatos.Button2Click(Sender: TObject);
var
  valores : array[1..100 , 1..100] of longint;
  i,j, valor: longint;

begin
  
  ...


    with rForm.lista.Items.Add do
    begin

    ...
     if Form1.ch3.Checked then
        subItems.Add('Si')
      else
        subItems.Add('No');

      if Form1.ch4.Checked then
        subItems.Add('Si')
      else
        subItems.Add('No');
      SubItems.Add(form1.Label17.Caption);
    ...
    end;

...
end;

A su vez, Label17 parte del formulario 1 y almacena la suma de los precios segun los articulos seleccionados por el cliente. Al hacer clic sobre el boton2 se envia el valor de label17 del formulario 1 directamente a la columna de precios de la lista. Así cada vez que se agregan nuevos articulos, al final, en el oncreate del rForm (ver más arriba), debería sumar esa columna de precios, pero como has visto solo muestra el valor del ultimo elemento introducido en la lista.

Espero haberme explicado mejor ahora. Otra cosa, lo del label17 del formulario 1 que va directamente a la lista del formulario rForm... etc sé que no es lo mas elegante ni lo mas eficiente, pero no conozco otra forma de hacerlo, quiero decir, sin saltar de un form a otro.

Un saludo.

danielmj 13-11-2014 11:57:05

Sigo sin poder sumar nada, y probando cosas, he situado un boton en el formulario y en su evento clic, el siguiente codigo:
Código Delphi [-]
label36.Caption:= lista.Items.Item[3].SubItems[5]

Mi pregunta es ¿tal como está esa linea debería mostrar en el label36, el valor 5 de la columna 3 del listview? por que no entiendo muy bien, y esa linea da error cuando pulso el boton.

La idea es saber si almacena o no valores en la etiqueta y de este modo ver si se suman valores de la lista o no.

Gracias y un saludo.

danielmj 13-11-2014 12:46:15

Hola de nuevo,

he cambiado el codigo a esto:
Código Delphi [-]
procedure TrForm.FormActivate(Sender: TObject);
var
  i: integer;
  total: extended;
  total2: TStringList; //variable de pruebas

begin
  total2.Create;
  for i:= 0 to lista.Items.Count -1 do
    begin
      total2.Add(lista.Items[i].SubItems[9]); //Esta linea da error "access violation"
      total:= total + strToFloat(total2.Text) ; //(StrToFloat(lista.Items.Item[i].SubItems[11]));
      Label35.Caption:= FloatToStr(total);
      label36.Caption:= total2.Text;
    end;
end;

He intentado basarme en este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
   StrList : TStringList;
begin
   StrList := TStringList.Create;
   StrList.Duplicates := dupIgnore;
   StrList.Sorted := True;
   for i := ListView1.Items.Count-1 downto 0 do
   begin
      if LowerCase(ListView1.Items[i].SubItems[0]) = LowerCase(Edit1.Text) then
         StrList.Add(ListView1.Items[i].SubItems[0])
      else
         ListView1.Items.Delete(i);
   end;
   ShowMessage(StrList.Text);
   StrList.Free;
end;

Que peternece a este post http://www.clubdelphi.com/foros/showthread.php?t=82673, ahí se usa un messagebox para mostrar el valor y yo uso una etiqueta, creo que es la unica diferencia, aun asi, no me funciona. Ni puedosumar los valores de una columna ni me muestra en el label el contenido de una celda de la lista.
Ya estoy desesperao, incluso he cerrado delphi varias veces cabreao y al rato vuelvo a insistir en vano.

En fin, saludos.

ecfisa 13-11-2014 13:54:18

1 Archivos Adjunto(s)
Hola Daniel.
Cita:

Empezado por danielmj (Mensaje 484611)
...
Ya estoy desesperao, incluso he cerrado delphi varias veces cabreao y al rato vuelvo a insistir en vano.

No desesperes que algo va a salir... :)

Revisa el demo que te adjunto a ver si es lo que estás buscando.

Saludos :)

Casimiro Notevi 13-11-2014 13:56:25

Pero, te estás liando tú solo. Divide y vencerás.
Antes pregunté y no has contestado: ¿dónde está el código que da los valores a la lista?, ¿qué valore son?

danielmj 13-11-2014 15:36:56

Hola, Casimiro y ecfisa,

Al primero (casimiro), el código que envia los datos a la lista es este:

Form1. button2.click.... //envia datos al tercer formulario (rForm), que contiene la lista.

Código Delphi [-]
Public
    { Public declarations }

    precios : array[0..8] of Real;
....

procedure TForm1.Button2Click(Sender: TObject);
begin
  case cmbHebillas.ItemIndex of
    0: precios[0]:= 0.30;
    1: precios[1]:= 0.35;
    2: precios[2]:= 0.60;
    3: precios[3]:= 1.00;
    4: precios[4]:= 1.20;
    5: precios[5]:= 1.30;
    6: precios[6]:= 1.70;
    7: precios[7]:= 1.50;
    8: precios[8]:= 1.50;
  end;

  i:= (StrToFloat(label9.Caption)+StrToFloat(label10.Caption)+StrToFloat(label11.Caption)+
  StrToFloat(label12.Caption)+StrToFloat(label13.Caption)+StrToFloat(label14.Caption)+
  StrToFloat(label15.Caption)+StrToFloat(label16.Caption));

  label17.Caption:= FormatFloat('0.00',i); //-----------------------------> Uso una etiqueta para almacenar el valor de i (no sé si será lo mas correcto)
  rForm.Label35.Caption:= FormatFloat('0.00',i*StrToInt(edit1.Text)); //---> Esta etiqueta "label35", es la que tiene que mostrar la suma de todas las cantidades en el rForm (último formulario que contiene la lista)
  pDatos.showModal; //.......................> Siguiente formulario donde se piden los datos de contacto y direcciones. (pDatos)
End;

Segundo formulario (pDatos)
Código Delphi [-]
procedure TpDatos.Button2Click(Sender: TObject);
var
  valores : array[1..100 , 1..100] of longint; //----------> Array para obtener un valor aleatorio que concatenado al telef. del cliente me daría la referencia del pedido.
  i,j, valor: longint;                                  //----------> variables locales para dos "For". Usadas para recorrer el array

begin
  if (cmbProvincia.Text = '') then
    button2.Enabled:= false
  else
    button2.Enabled:= true;

  for i:= 0 to 99 do                                 //-----------> Desde aquí...
    for j:= 0 to 99 do
      begin
        valor:= random(valores[i,j]);
        label8.Caption:= 'R'+IntToStr(valor);
      end;
  with rForm.plista.Items.Add do
    begin
      subItems.Add(mask1.Text+'_'+label8.Caption); //------> ...hasta aquí para generar la referencia del pedido. Y desde aquí empieza a enviar datos a la segunda lista (plista) del siguiente formulario (rForm). 
                                                                                  //Con esta lista no tengo problemas, así que no la comento.
      SubItems.Add(edit1.Text);
      SubItems.add(edit2.Text);
      SubItems.add(edit3.Text);
      SubItems.add(cmbProvincia.Text);
      SubItems.add(mask2.Text);
      SubItems.add(mask1.Text);
    end;

    with rForm.lista.Items.Add do //........................> Desde aquí 
    begin
      subItems.Add(mask1.Text+'_'+label8.Caption);
      SubItems.Add(Form1.cmbHebillas.Text);
      SubItems.add(Form1.Label7.Caption+', '+form1.Label8.Caption);

      if Form1.opc1.Checked then
        subItems.Add(form1.opc1.Caption);

      if Form1.opc2.Checked then
        subItems.Add(form1.opc2.Caption);

      if Form1.opc3.Checked then
        subItems.Add(Form1.opc3.Caption);


      if Form1.ch1.Checked then
        subItems.Add('Si')
      else
        subItems.Add('No');

      if Form1.ch2.Checked then
        subItems.Add('Si')
      else
        subItems.Add('No');

      if Form1.ch3.Checked then
        subItems.Add('Si')
      else
        subItems.Add('No');

      if Form1.ch4.Checked then
        subItems.Add('Si')
      else
        subItems.Add('No');

      SubItems.Add(form1.Label17.Caption);
      SubItems.Append(form1.edit1.Text); //....................> El edit1, envia las cantidades de un mismo articulo a la lista.

    end; //.................................................................> hasta aquí, envía datos a la lista 1 (llamada "lista" en formulario)

  with rForm do
    begin
      Label4.Caption:= edit1.Text;
      Label2.Caption:= mask1.Text+'_'+pDatos.label8.Caption;
      Label6.Caption:= edit2.Text;
      Label8.Caption:= edit3.Text;
      label10.Caption:= cmbProvincia.Text;
      label12.Caption:= mask2.Text;
      label14.Caption:= mask1.Text;
    end;
  rForm.showModal;
End.

Por ultimo el rForm que contiene la lista:
Código Delphi [-]
procedure TrForm.FormActivate(Sender: TObject);
var
  i: integer;
  total: extended;
  total2: TStringList; //variable de pruebas

begin
  total2.Create;
  for i:= 0 to lista.Items.Count -1 do
    begin
      total2.Add(lista.Items[i].SubItems[9]);
      total:= total + strToFloat(total2.Text) ; //(StrToFloat(lista.Items.Item[i].SubItems[11]));
      Label35.Caption:= FloatToStr(total);
      label36.Caption:= total2.Text;
    end;
end;

De este último trozo, label35 no muestra la suma de nada, tan solo el precio del ultimo articulo introducido en la lista. Y la linea que hace mencion a "total2",da error de "access violation"
Ya he probado con todos los indices por si meto alguno que no exista, pero no hay forma.

Espero no haberme liado explicando todo.

Hola ecfisa, ahora me pongo con tu demo, a ver si consigo algo, estuve escribiendo este post antes de mirarlo, en cuanto sepa algo te digo.

Gracias a los dos, con lo que vaya surgiendo os comento, y si empiezo a rallar la pesadez decirmelo eh.
Un saludo.

danielmj 13-11-2014 16:26:29

Hola ecfisa,

He mirado tu demo, la he puesto a andar y tira bien, va sin problemas. Ahora copio y pego tu codigo (el del boton) + la constante maxitem de la seccion implementation, lo acomodo a mi programa, le cambio los nombres de los controles para que no de error y esas cosas y lo que pasa es esto https://www.youtube.com/watch?v=IFnz...ature=youtu.be

Si, he llegado a un punto, que ya no sé que hacer para que funcione el asunto, y he optado por hacer una captura de video y que veais los pasos que sigo hasta que salta la liebre (el error).

Saludos y gracias.

Tu código modificado:

...
implementation
Código Delphi [-]
const
MAXITEMS = 10;
...

procedure TrForm.Button5Click(Sender: TObject);
var
  i: Integer;
  total: Double;
  li: TListItem;

begin
  total:= 0;
  for i:= 0 to MAXITEM -1 do
  begin
    li:= Lista.Items.Item[i];
    total:= total + StrToFloat(li.SubItems[Lista.Columns.Count-1]);
  end;
  label36.Caption:= FormatFloat('0.00', total)
  //ShowMessage(FormatFloat('0.00', total));
end;

ecfisa 13-11-2014 16:45:38

Hola Daniel.

Es que el índice debería ser
Código Delphi [-]
...
  total:= total + StrToFloat(li.SubItems[Lista.Columns.Count-2]);
O dicho de otro modo: Count - 1 - columna 0 (que no usas) , es decir que no sería 9 sino 8.

Saludos :)

danielmj 13-11-2014 17:00:08

Hola ecfisa, he probado a poner ".columns.count -2" pero entonces pasa esto:



Asi que, sigo igual, sin poder sumar nada.

Un saludo y gracias por tu tiempo.

ecfisa 13-11-2014 17:33:04

Hola Daniel.

Acabo de mirar el video, fijate que la constante MAXITEM es un valor arbitrario que usé solo para el ejemplo.

En el video que mostras intenta recorrer diez items cuando sólo hay dos ingresados, deberías usar:
Código Delphi [-]
var
  i: Integer;
  total: Double;
  li: TListItem;
begin
  total:= 0;
  for i:= 0 to ListView1.Items.Count-1 do // (MAXITEM no)
  begin
    li:= ListView1.Items.Item[i];
    total:= total + StrToFloat(li.SubItems[ListView1.Columns.Count-2]);
  end;
  ShowMessage(FormatFloat('0.00', total));
end;

Saludos :)

TiammatMX 13-11-2014 18:02:43

No veo dónde está la complicación..., si en lugar de sumar EL CONTENIDO del TListView en ése momento, sumaras LOS DATOS QUE COMPONEN el TListView mientras lo llenas antes de mostrarlo...

Cuestión de pensar lateralmente para resolver un problema...

danielmj 13-11-2014 18:29:59

Hola ecfisa

muchas gracias!!!! por que no está aquí el icono ese de la cabeza dandose golpes con el pc, sino lo pondría. Por fin ha funcionado, solo he tenido que poner "-3" en el .columns.count para hacer referencia a la columna que guarda las cantidades.
Debo reconocer, que estaba enfrascado en el "lista.items.count" y no le hacia caso al "columns.count" ese tambien ha sido un error por mi parte.

Ahora tengo una pelea nueva con el boton "volver atras" que cuando me lleva de regreso al formulario anterior, limpia la lista y cuando regreso, solo tengo el ultimo elemento añadido, pero bueno eso no me preocupa, en comparacion es un mal menor, que espero resolver pronto.

Muchas gracias otra vez, tanto a ti como a casimiro y a todos los que han prestado su ayuda.
Un saludo.

danielmj 13-11-2014 20:01:23

Hola tiammat,

Por cierto, te va lo sumerio y esas cosas? lo digo por tu nick

Bueno, tienes razon, pero mi nivel en delphi es bajito bajito, y hay soluciones que no se me ocurren como a otros con mas experiencia. Por ejemplo, ya me estoy peleando otra vez con la lista, por que ahora si elimino un elemento listado, lo normal es que se reste tambien del total a pagar, pues bien, ya me esta jorobando otra vez, con access violation y "list items out of bouns" o algo así

Código Delphi [-]
procedure TrForm.Eliminarseleccionado1Click(Sender: TObject);
var
  i: integer;

begin
  for i:= 0 to lista.Items.Count -1 do
    if lista.Items.Item[i].Selected then
      begin
        lista.Items.Item[i].Delete;
        plista.Items.Item[i].Delete;
        label35.Caption:= FloatToStr(StrToFloat(label35.Caption)-(StrToFloat(lista.Items.Item[i].SubItems[Lista.Columns.Count-3]))); //---> sé que el error está aquí ¿pero donde?
      end;
end;

Y bueno, en eso estoy ahora.
Un saludo.

ecfisa 14-11-2014 02:22:48

1 Archivos Adjunto(s)
Hola Daniel.

Seguramente este par de funciones te simplificarán la tarea:
Código Delphi [-]
// Devuelve la suma de la columna en cuestión
function AmountTotal(LV: TListView): Double;
var
  i: Integer;
  li: TListItem;
begin
  Result:= 0;
  for i:= LV.Items.Count-1 downto 0 do
  begin
    li:= LV.Items.Item[i];
    Result:= Result + StrToFloat(li.SubItems[LV.Columns.Count-2]);
  end;
end;

// Borra items seleccionados ( MultiSelect = True )
procedure DelSelectedItems(LV: TListView);
var
  i: Integer;
begin
  for i:= LV.Items.Count-1 downto 0 do
    if LV.Items[i].Selected then
      LV.Selected.Delete
end;

El uso:
Código Delphi [-]
// Mostrar total
procedure TForm1.btnTotalClick(Sender: TObject);
begin
  Label1.Caption:= FormatFloat('0.00', AmountTotal(ListView1));
end;

// Eliminar items seleccionados y seguido mostrar total
procedure TForm1.btnDeleteClick(Sender: TObject);
begin
  DelSelectedItems(ListView1);
  Label1.Caption:=  FormatFloat('0.00', AmountTotal(ListView1));
end;
Por si tenes dificultad para implementarlas te adjunto un ejemplo funcional.

Saludos :)

danielmj 14-11-2014 17:18:00

hola ecfisa, acabo de mirarlo y de implementarlo, todo lo que ya tenia lo sigo conservando entre {} funciona pero creo que lo de la funcion es mas eficiente.
Solo tengo una duda, pero creo que se por donde van los tiros, me refiero a la variable "result" no la declaras en ningun sitio y no da error, por lo que supongo que delphi la crea automaticamente al iniciar la funcion y en este caso es double ¿es correcto?

Gracias y un saludo.

ecfisa 14-11-2014 19:32:26

Hola danielmj.
Cita:

Empezado por danielmj (Mensaje 484779)
Solo tengo una duda, pero creo que se por donde van los tiros, me refiero a la variable "result" no la declaras en ningun sitio y no da error, por lo que supongo que delphi la crea automaticamente al iniciar la funcion y en este caso es double ¿es correcto?

Si, así es. Aquí tenes una referencia: Result.

Aunque Delphi continua soportando la sintáxis Pascal de asignar el valor de devolución al nombre de funcion, por ejemplo:
Código Delphi [-]
function FuncionSuma(a,b: Integer): Integer;
begin
  FuncionSuma:= a + b;
end;

Saludos :)

danielmj 14-11-2014 20:23:07

Hola ecfisa, gracias ya se una cosa mas :) y sobre pascal, la verdad es que lo poco que se de pascal es lo que me ayuda para escribir algo de codigo en delphi aunque basicamente son la misma cosa con la diferencia del entorno visual y otras diferencias, pero la base es la misma. La verdad es que delphi como tal, nunca lo vi cuando estudiaba, pasamos de cobol a pascal y de pascal a vb6, solo que a mi siempre me gusto mas delphi y digamos que lo descubri por mi mismo. Ya ha llovido desde entonces, por que el primer delphi que conoci fue la version 3.

Un saludo.

nlsgarcia 14-11-2014 21:14:26

danielmj,

Cita:

Empezado por danielmj
...la verdad es que lo poco que se de Pascal es lo que me ayuda para escribir algo de código en Delphi...

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

ecfisa 14-11-2014 21:42:05

Cita:

Empezado por danielmj (Mensaje 484797)
...pasamos de cobol a pascal y de pascal a vb6,...

Me haces recordar mis tiempos de universitario... :rolleyes: fué una vivencia muy parecida. Pero lo primero que nos tiraron fue GW-Basic :mad: puf!.
Por esa época tuve mis primeros contactos con Turbo Pascal 4.0 y Turbo C, lenguajes con los que siempre mantuve afinidad. El verborrágico aunque poderosísimo Cobol nunca me atrapó. ¡ Ah ! La belle epoque...

Saludos :)

danielmj 14-11-2014 21:46:26

Hola nelson, gracias por la informacion, ya me he bajado un par de archivos de las descargas del foro y he metido en favoritos un par de manuales.
Un saludo.

danielmj 14-11-2014 21:52:30

hola ecfisa, si si tienes toda la razon, el...

Código:

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.

de cobol, tenía su aquel, a mi se me gustaba pero de un momento a otro pasamos a pascal y dejamos cobol. En cuando a C+ recuerdo un dia que tras el examen me dijo el profesor (de nombre D. Javier Maestre) "¿Que, ya sabes programar en C no? el tio con el tono mas ironico del mundo. Y le respondi "pues no, no tengo ni idea, solo me he preparado este examen" jajajaja hasta el tuvo que reirse.

En fin como suele decirse "aquellos maravillosos años"...
Un saludo.


La franja horaria es GMT +2. Ahora son las 15:15:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi