[Delphi] Zamykanie programu po czasie

0

Witam,
Napisałem program (dokładniej to zmodyfikowałem gotowy)
który wysyła dane na RS232.

Chciałbym aby po uruchomieniu programu, został wykonany kod i okno automatycznie się zamknęło.
W jaki sposób to zrobić.

Nie chcę zamykać okna na przycisk, tylko chcę aby samo się zamknęło.

0

Oto kod:

 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, CPort;

type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);  //Wykonywanie porgramu bez plikania w przycisk
var
 arr : array[0..1] of byte;
 rozmiar : word;

begin

 ComPort1.Open;

 arr[0]:=50;      // Liczba 2
 arr[1]:=13;      // Nowa linia ENTER
 rozmiar:=2;
 ComPort1.write(arr,rozmiar);
 ComPort1.Close;
end;

end.
0

Robię projekt, dzięki któremu będzie można sterować oświetleniem przez stronę WWW.
Już mam prawie wszystko zrobione (brakuje mi tego aby program sam się wyłączał)

Po kliknięciu w link na stornie WWW, będzie uruchamiany mój program, i w zależności od parametru np. 1-wysyła na port RS232 "1"
0 - wysyła na RS232 "0"

Potem to idzie na sterownik i oświetlenie się włącza/wyłącza

A co do tematu.

Szukałem tylko nie potrafię tego ogarnąć za bardzo.
Za delphi wziąłem się wczoraj, więc naprawdę przydała by mi się pomoc.

Mam już taki kod:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, CPort;

type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);  //TO JEST NIE POTRZEBNE START
var
 arr : array[0..1] of byte;
 rozmiar : word;

begin

 ComPort1.Open;

 arr[0]:=50;
 arr[1]:=13;
 rozmiar:=2;
 ComPort1.write(arr,rozmiar);
 ComPort1.Close;
end;
//TO JEST NIE POTRZEBNE KONIEC

//TO WYKONUJE SIE AUTOMATYCZNIE PO WLACZENIU PROGRAMU

procedure TForm1.FormCreate(Sender: TObject);  //Wykonywanie porgramu bez klikania w przycisk
var
 arr : array[0..1] of byte;
 rozmiar : word;

begin

 ComPort1.Open;


 
  if StrToInt(ParamStr(1)) = 1 then
 arr[0]:=49;   // Liczba 1

  if StrToInt(ParamStr(1)) = 2 then
 arr[0]:=50;   // Liczba 2

  if StrToInt(ParamStr(1)) = 3 then
 arr[0]:=51;   // Liczba 3

  if StrToInt(ParamStr(1)) = 4 then
 arr[0]:=52;   // Liczba 4




 arr[1]:=13;      // Nowa linia ENTER
 rozmiar:=2;
 ComPort1.write(arr,rozmiar);
 ComPort1.Close;
end;
end. 

Więc bardzo serdecznie proszę kogoś o edytowanie tego kodu tak, aby po wykonaniu procedury TForm1.FormCreate następowało zamykanie programu.

Bardzo bardzo proszę :)
Tak jak pisałem, za Delphi wziąłem się wczoraj więc jest to naprawdę trudne dla mnie. Ale przynajmniej udało mi się zrobić obsługę parametrów(więc już was tym nie będę zamartwiał)
Proszę tylko o dodanie do kodu funkcji która wyłącza program może być po 1sek.

Z góry dziękuję :]

0

Zrobiłem coś takiego (żeby nie było że nie próbowałem)

 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, CPort;

type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

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

var
  Form1: TForm1;

implementation

{$R *.DFM}
 var
s:string[3];
licznik:byte;


  // START
procedure TForm1.Timer1Timer(Sender: TObject);
begin
licznik:=5;
 dec(licznik);
str(licznik,s);
form1.caption:='Okno za '+s+' s';
if licznik=0 then
  begin
  form1.Hide;
  //form2.Show;
  end;
end;



//// KONIEC


procedure TForm1.Button1Click(Sender: TObject);  //TO JEST NIE POTRZEBNE START
var
 arr : array[0..1] of byte;
 rozmiar : word;

begin

 ComPort1.Open;

 arr[0]:=50;
 arr[1]:=13;
 rozmiar:=2;
 ComPort1.write(arr,rozmiar);
 ComPort1.Close;
end;
//TO JEST NIE POTRZEBNE KONIEC

//TO WYKONUJE SIE AUTOMATYCZNIE PO WLACZENIU PROGRAMU

procedure TForm1.FormCreate(Sender: TObject);  //Wykonywanie porgramu bez plikania w przycisk
var
 arr : array[0..1] of byte;
 rozmiar : word;

begin

 ComPort1.Open;


 
  if StrToInt(ParamStr(1)) = 1 then
 arr[0]:=49;   // Liczba 1

  if StrToInt(ParamStr(1)) = 2 then
 arr[0]:=50;   // Liczba 2

  if StrToInt(ParamStr(1)) = 3 then
 arr[0]:=51;   // Liczba 3

  if StrToInt(ParamStr(1)) = 4 then
 arr[0]:=52;   // Liczba 4




 arr[1]:=13;      // Nowa linia ENTER
 rozmiar:=2;
 ComPort1.write(arr,rozmiar);
 ComPort1.Close;
end;
end.

Ale nie działa :(

1

Po kliknięciu w link na stornie WWW, będzie uruchamiany mój program

A po co ci tak naprawdę program okienkowy jak od razu chcesz zamknąć formularz ? Nie możesz sobie zrobić aplikacji konsolowej która rozwiąże problem z formularzem,
albo aplikacji całkowicie bez formularza (nie wiem czy w delphi tak się da) ?

0

Rozwiązania najprostsze widze takie: albo Timer ze zmienną globalną typu liczbowego ustawioną w OnCreate na jakąś tam
wartość, a później w Timerze z Intervalem 1000 milisekund ją zmniejszać o jeden. Jeżeli zmienna będzie wyności 0 zrobić
po prostu Close; drugie rozwiązanie to dać Close; w OnShow. Jednak takie coś jest bez sensu trochę. Faktycznie lepiej, w
aplikacji konoslowej to napisać jak radził poprzednik, bez formatki. A i jeżeli Cie dobrze zrozumiałem, to chcesz śterować
światłem przez http://www.speedyshare.com/files/26548074/httpserver_olesio.rarw Delphi oparty najlepiej o pakiet Indy i
przez odpowiednie sprawdzanie odnośników wykonywac polecenia. Jednak nic takiego w tym kodzie nie widzę. Zobacz na
źródla pod tym adresem, po postawieniu serwera i wejściu na stronę localhost lub po iP Twojego komputera, można także
uzyskać screen pulpitu komputera na ktorym stoi serwer. Napisane na podstawie przykładów dołączonych do dem wraz ze
starszej wersji Indy: http://www.speedyshare.com/files/26548074/httpserver_olesio.rar możesz to sobie dopasować, jak
się Tobie podoba lub przerobić aby działalało od razu lub bez okna. A wtedy komponenty od Indy, tworzysz dynamicznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1