![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
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.
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. |
|
#2
|
|||
|
|||
|
Hola
Si uso tablas en el programa, lo que escribiste me sirvió para el tiempo libre, y quiero hacer otra para el prepago, o sea tener en la tabla tiempos de 30, 60, una hora y media, etc, y seleccionar el tiempo adecuado. Saludos. ![]() |
|
#3
|
||||
|
||||
|
No le veo mucho problema, añadiendo en el uses Dateutil, puedes acceder a esta funcion (al menos en delphi 6):
Código:
H^.HoraInicio:= now; H^.HoraFin:=incminute(H^.horainicio, Form4.TarifaHasta.AsInteger); Por cierto, me alegro que el código anterior te sirva para algo ![]() Como te decia, antes de borrar un elemento del Listview, tienes que liberarlo con Dispose(TpTInfo(listview1.items[X].data)). Si hay elementos que no tienen el registro asociado, pues deberás hacer primero la comprobación de si ha sido creado o no. Saludos |
|
#4
|
|||
|
|||
|
Cita:
|
|
#5
|
||||
|
||||
|
Cita:
![]() sodulaS ![]() |
|
#6
|
|||
|
|||
|
Hola de nuevo
.Te cuento que he intentado pero no consigo que los valores enteros de la grilla de un formulario en la cual tengo los tiempos, y al seleccionar uno que los pase al listview como un tiempo decreciente. Gracias. Saludos. ![]() |
|
#7
|
||||
|
||||
|
Para el tema de la rejilla, es copiado literalmente de la ayuda de delphi, adaptandolo te puede servir:
Código:
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
for j := 0 to FieldCount-1 do
begin
if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
Listbox1.Items.Add(s);
s:= '';
end;
Cita:
Ahora te toca pensar a ti un poquito ![]() Te aconsejo que te pares a estudiar un poquito el tema de las fechas en delphi, con 10 minutos peleandote, te aclarará muchas dudas. ShowMessage(Formatdatetime('dd/mm/yyyy hh:nn:ss', now - MiValorDouble) sodulaS ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|