Ver Mensaje Individual
  #10  
Antiguo 13-02-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Cita:
te cuento que para la hora tengo una tabla con intervalos de tiempo con valores enteros
mmm, Usas Bases de datos para el resto del programa ?

Si Usas Bases de datos, es más facil crear un campo HoraInicio (de tipo Date) asociado a cada Pc

Si no Usas Bases de datos, acabo de mirar bien el tipo TlistItem y tiene una propiedad llamada Data aqui se puede guardar un puntero a cualquier cosa, así que puedes crearte un puntero a un registro y guardar ahí la hora de inicio de cada Pc.

Para que veas como va. crea un programa nuevo, metele un Listview, un Boton y un timer con Interval a 1 seg.

Este es mi codigo.
Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls;

type TInfo = record       // Tipo Informacion
        Hora : TDateTime;
end;
    TpTInfo = ^TInfo; // Tipo Puntero al tipo Informacion
type
  TForm1 = class(TForm)
    Button1: TButton;
    ListView1: TListView;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var H :TpTInfo;
begin
  with ListView1.items.Add do
  begin
     Caption := 'PC3';
     SubItems.Add('Ocupado');
     SubItems.Add('');
     New(H);
     H^.Hora:=Now;
     Data:= H;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  hora:TDateTime;
  i : integer;
begin
    with ListView1 do
    for i:=0 to pred(items.count) do
      if items[i].subItems[0] <>'Libre' then
      begin
        if Assigned(Items[i].data) then  // me aseguro de que se ha creado el registro
        begin
          hora :=TpTinfo(Items[i].data)^.Hora;
          items[i].SubItems[1] := FormatDateTime('hh:nn:ss', Now - Hora );
        end;
      end;

end;

end.
El ejemplo consiste en que cada vez que pulsas el boton se crea un nuevo elemento y aprovecha la propiedad Data para meter la hora en un registro asociado a cada elemento del Listview. En el registro TInfo podrías guardar toda la información que necesitaras.

Eso si. Todo lo que almacenas en Data, eres tú el que has de liberarlo antes de borrar algun elemento del listview.

Saludos, y espero que alguno de estos métodos te sirva.
_________________________________________________
Sugerencia: escribir el codigo fuente entre [ code] y [ /code] al postearlo en el foro. (sin el espacio que hay despues del corchete [, es mas facil leerlo)

Última edición por Lepe fecha: 13-02-2004 a las 13:16:11.
Responder Con Cita