Problem z iteracją

0

Witam. Jako, że jestem początkujący proszę o radę. Mam problem z iteracją, a mianowicie z jej wykonaniem. Gdyby ktoś mógł coś poradzić byłbym wdzięczny. Iteracja ta znajduje się w procedurze o nazwie kolejka.

 unit sylw;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    Timer1: TTimer;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    muza: TMediaPlayer;
    Button1: TButton;
    Label5: TLabel;
    GroupBox3: TGroupBox;
    Button2: TButton;
    Label6: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
  procedure sylwester;
  procedure alarmix;
  procedure kolejka;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   godziny, minuty, sekundy : string;
   x : integer;
   piciee : integer;
   picie : string;
   piciex, piciey :integer;
   kolejeczka : string;
   kolka : integer;



implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
        godziny := FormatDateTime('h',Time);
        minuty := FormatDateTime('n',Time);
        sekundy := FormatDateTime('s',Time);

        Label1.Caption := godziny;
        Label2.Caption := minuty;
        Label3.Caption := sekundy;

        x := (StrToInt(godziny)*60*60)+(StrToInt(minuty)*60)+StrToInt(sekundy);
        Label4.Caption := IntToStr(86400 - x)+ ' sekund';
        Label5.Caption := IntToStr(x);



        if Label4.Caption = '0 sekund' then sylwester;


        if x = piciee then alarmix;
        if x = piciee + kolka then kolejka;

end;
procedure TForm1.kolejka;
 begin
 alarmix;
 while kolka = 1 do
 begin
 kolka := kolka + kolka;
 piciee := piciee + kolka;
 if x = piciee then alarmix;
 end;

 end;

procedure TForm1.sylwester;
begin
        muza.filename := 'alarm.mp3';
        muza.Open;
        muza.Play;
        showmessage('S Y L W E S T E R!!!');
        muza.Stop;
end;

procedure TForm1.alarmix;
begin
        muza.FileName := 'alarm.mp3';
        muza.Open;
        muza.Play;
        showmessage('P I J E M Y!!!');
        muza.Stop;
end;
procedure TForm1.Button1Click;
begin
  picie := InputBox('Picie','Podaj godzinę rozpoczecia picia w formacie np 07:00','07:00');
        picie := picie + ':00';

        piciex:= StrToInt(picie[1]+picie[2])*60*60;
        piciey:= StrToInt(picie[4]+picie[5])*60;
        piciee:= piciex+piciey;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  kolejeczka := InputBox('Kolejka','Co ile minut kolejka? Podaj to w formacie minut np "5"','5');
  kolka := StrToInt(kolejeczka)*60;
end;

end. 
0

A jaki masz ten problem? Co chcesz osiągnąć?

0

Chcę osiągnąć taki efekt aby po wpisaniu po ilu minutach ma być kolejka wykonywała się procedura kolejka, tzn aby co kolejkę grała muzyke i pojawiał się komunikat. Załóżmy, ze użytkownik wpisałby założmy "5" minut to co 5 minut to by się wykonywało.

0

może zamiast
if x = piciee then alarmix; wstawić
if x =< piciee then alarmix;

0

Xitami - nadal nic.

0

Może z delay pokombinuj?

0

A mianowicie? Jak pisałem jestem początkujączy.

0

Czemu nie skorzystasz z drugiego Timera?
Jeśli użytkownik wpisze 5 i to ma oznaczać 5 minut:

TwojTimer.Interval := 5 * 60000;

Za 5 podstawiasz zmienną.

0

To samo by było przy użyciu sleep - Sleep

0

Problem nadal nie rozwiązany.

0

Przecież Szarp Tobie już odpowiedział jak ustawić większy Interval Timera, ewentualnie zrób tak: dodaj zmienną globalną typu DWORD, na początku ją zeruj, a w Timerze z Intervalem 1000 milisekund zwiększaj o jeden na koncu kodu w zdarzeniu OnTimer i kiedy ta zmienna będzie wynosiła 5 * 60 to znaczy, że mineło pięć minut i jeżeli ten warunek jest spełniony to wtedy wykonuj jakiś dodatkowy kod, skoro nie odpowiada Tobie ustawienie w innym Timerze większego intervalu jak zaproponował Szarp.

0

EDIT: będzie pod spodem żeby odświeżyć. Do autora wątku: pytania zawsze zadawaj na forum, prywatne wiadomości są od ważnych spraw do skontaktowania się z kimś, a nie zadawania kolejnych pytań. To że nie piszę tutaj w swojej sygnaturce jak niektórzy pytania zadawaj na forum, nie do mnie na PM, to nie znaczy że chcę otrzymywać jakieś pytania co chwile, bo nie mam czasu zawsze na bieżąco odpowiadać, a forum przeglądam i jak umiem pomóc to na pewno odpiszę w danym temacie. A Tobie już pisałem widząć wklejony kod - zmienną kolka mnożysz przez zmienną iteracyjną pętli, a kombinacje ze zmienną zz (o ile to zmienna) robisz po else w case, tak ja bym kombinował.

0

Dziękuje za pomoc w rozwiązaniu ale rozwiązałem to innym sposobem.

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