Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
problemas con el timer

No sabia como llamar a este post pero tiene relacion con lo que he puesto.

Como sigo con el delphi y algun que otro problema que no encuentro solucion, tengo que postearlo.
A pesar de que estoy indagando con el firebird, sigo con el paradox hasta que pueda pasarme al fb, me da problemas con la ejecucion del timer.

Tengo hecha una utilidad de despertador en la que hay varias horas programadas para que suene grabadas en una tabla paradox, cada cierto tiempo en la aplicacion se revisa si las horas programadas en la tabla coinciden con la hora actual, es decir, que abre la tabla y busca en todos los registros si alguno coincide con la hora del sistema, si es asi se abre un form en el que aparece la hora con un boton de aceptar para que pare el sonido.
De ahi surgen dos problemas:
- cuando se abre el form y hasta que no se cierra no se continua la busqueda de otros registros que tenga la misma alarma o tengan alarmas posteriores, existe la posibilidad de abrir el form con la alarma y devolver el control manteniendo el form en pantalla? lo estoy usando de momento con showmodal.
- el otro problema viene, cuando estoy actualizando una tabla y el timer salta con el form, la tabla paradox se corrompe.

Perdonadme por la extension, pero estoy liado con estas cositas que ya se que son basicas.

gracias
Responder Con Cita
  #2  
Antiguo 09-02-2008
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Podías probar a usar un thread

Salu2
Responder Con Cita
  #3  
Antiguo 09-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por anubis Ver Mensaje
cuando se abre el form y hasta que no se cierra no se continua la busqueda de otros registros que tenga la misma alarma o tengan alarmas posteriores, existe la posibilidad de abrir el form con la alarma y devolver el control manteniendo el form en pantalla? lo estoy usando de momento con showmodal.
El problema es justamente que lo muestras con ShowModal. Muestralo simplemente con show y listo.

Cita:
Empezado por anubis Ver Mensaje
cuando estoy actualizando una tabla y el timer salta con el form, la tabla paradox se corrompe.
No debiera ocurrir esto. Si tu aplicación está ejecutando algún código, el timer esperará hasta que termine, entre en estado Idle y procese nuevamente mensajes. ¿que tipo de corrupción ocurre? ¿cómo es que llega a "saltar" el timer mientras estas actualizando? ¿que tipo de actualización estas llevando a cabo que "corrompe" la tabla?

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 09-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias, con el show solo no me cierra despues de abrirse. Sobre los threads tengo que estudiarlos detenidamente porque nose por donde empezar.
Me refiero a que si estoy actualizando una tabla con lineas de codigo, al ejecutar el timer y abrir el form, lo que estaba siendo ejecutado en otras lineas de codigo de delphi para seguir metiendo los datos en la tabla, los datos que faltan no acaban de pasar, y en otros casos me sale un aviso que nose puede actualizar en un dataset cerrado, si anulo el timer .enabled false, todo va como la seda.

gracias de nuevo
Responder Con Cita
  #5  
Antiguo 09-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por anubis Ver Mensaje
gracias, con el show solo no me cierra despues de abrirse.
Quzás estas haciendo uso de BitBtns... añade la siguiente llamada en el OnClick de aquellos botónes (o en el OnExecute de las acciones) que deban cerrar el formulario:

Código Delphi [-]
  Close;

Cita:
Empezado por anubis Ver Mensaje
Sobre los threads tengo que estudiarlos detenidamente porque nose por donde empezar.
No dudo que una aplicación multi-hilo sería mejor para lo que haces, pero tampoco creo que sea la solución a tus problemas actuales.

Cita:
Empezado por anubis Ver Mensaje
Me refiero a que si estoy actualizando una tabla con lineas de codigo, al ejecutar el timer y abrir el form, lo que estaba siendo ejecutado en otras lineas de codigo de delphi para seguir metiendo los datos en la tabla, los datos que faltan no acaban de pasar, y en otros casos me sale un aviso que nose puede actualizar en un dataset cerrado, si anulo el timer .enabled false, todo va como la seda.
Seguramente en algún punto estas llamando directa o indirectamente a Application.ProcessMessages. Quita esas llamadas... quizás nunca debiste ponerlas allí.

Como regla general, no introduzco una sola línea de código en mis programas si no he leído lo suficiente sobre lo que hace y sus efectos colaterales. (en el help/en los foros/en internet en general)

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 10-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por las respuestas.
Comento lo que pasa, cuando la alarma es la misma que la del sistema, lo que hago es crear en tiempo de ejecucion un form, si le pongo como me dices solo show, me abre, si se abre otro, si le doy a parar la alarma (tiene un control mediaplayer y un timer.enabled:=false, me sale error de stackflow.

Alguna sugerencia como puedo hacer esto?

gracias
Responder Con Cita
  #7  
Antiguo 10-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por anubis Ver Mensaje
Gracias por las respuestas.
Comento lo que pasa, cuando la alarma es la misma que la del sistema, lo que hago es crear en tiempo de ejecucion un form, si le pongo como me dices solo show, me abre, si se abre otro, si le doy a parar la alarma (tiene un control mediaplayer y un timer.enabled:=false, me sale error de stackflow.

Alguna sugerencia como puedo hacer esto?

gracias
La sugerencia que te doy es que nos brindes información más concreta.
Por empezar: Mensaje específico del error. Y segundo... no terminamos de comprender como lo estás implementando. ¿Podrías mostrarnos parte del código?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 10-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Tienes razon. El codigo es muy simple:
Código Delphi [-]
procedure Tfentrada.Timer1Timer(Sender: TObject);
var
lahora:ttime;
horastr:string;
horastr1:string;
begin
  lahora:=time;
  horastr:=formatdatetime('hh:mm',lahora);
  displayhora:='Hora '+FormatDateTime('hh:mm',Time);
  statusbar1.panels.items[3].text:=displayhora;
  datadespertador.tdespertador.open;
  datadespertador.tdespertador.first;
  while not datadespertador.tdespertador.Eof do
    begin
    horastr1:=formatdatetime('hh:mm',datadespertador.tdespertador.FieldByName('Hora').asdatetime);
      if horastr=horastr1 then
        begin
         alarmahabitacion:=datadespertador.tdespertador.fieldbyname('Habitacion').asinteger;
         lbl2:= Txibutton(fentrada.FindComponent('b'+inttostr(alarmahabitacion)));
         lbl2.glyph:=nil;
         falarma:=tfalarma.create(application);
         falarma.Show;
       // falarma.Destroy;
         datadespertador.tdespertador.Delete;
      end;
      datadespertador.tdespertador.next;
    end;
end;

y el formulario falarm que se abre es este:
Código Delphi [-]
unit alarma;

interface

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

type
  Tfalarma = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn1: TBitBtn;
    Bevel1: TBevel;
    procedure FormShow(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  falarma: Tfalarma;
   reproduce:boolean;
implementation

uses entrada;
{$R *.dfm}

procedure Tfalarma.FormShow(Sender: TObject);
begin
fentrada.MediaPlayer1.Open;
//fentrada.Timer1.Enabled:=false;
timer1.Enabled:=true;
label2.Caption:=inttostr(fentrada.alarmahabitacion);
end;
procedure Tfalarma.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
close;
end;
procedure Tfalarma.Timer1Timer(Sender: TObject);
begin
fentrada.MediaPlayer1.Play;
end;
procedure Tfalarma.BitBtn1Click(Sender: TObject);
begin
fentrada.MediaPlayer1.stop;
end;
uso un mediaplayer con un boton para parar la alarma.

Se que esta un poco farragoso, para una sola alarma si funciona pero se pierden el resto de alarmas si pongo un showmodal, pero lo que interesa es que se abra la ventanita avisando de la alarma y siga buscando comparando en el archivo para sacar mas ventanitas, con solo show a veces queda tapado el form.

si le pongo para parar me sale el error stack overflow.

gracias por vuestra paciencia
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Medir tiempo de ejecución usando Timer (Problemas) Bauhaus1975 Varios 12 24-11-2012 02:16:59
Timer comba OOP 3 18-06-2007 16:54:00
Timer nenufer Varios 7 10-05-2006 16:35:17
timer +1 slim jim Varios 4 02-10-2005 04:03:11
Timer Malon OOP 5 25-11-2003 17:19:03


La franja horaria es GMT +2. Ahora son las 00:24:25.


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
Copyright 1996-2007 Club Delphi