Ver Mensaje Individual
  #8  
Antiguo 10-02-2008
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Reputación: 20
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