Autor Téma: Zobrazení formuláře  (Přečteno 1076 krát)

Hanzi23

  • Host
Zobrazení formuláře
« kdy: 21-12-2013, 19:41:19 »
Dobrý den,
chtěl bych poprosit o radu. Píšu aplikaci, ve které chci, aby se každých například 60 sekund otevřelo okno, které bude po uživateli vyžadovat určitý vstup. Po jeho zavření by se okno mělo po uplynutí stanovené doby znovu otevřít. Vyřešil jsem toto pomocí Timeru, ale nastal problém. Okno se otevře jednou, po jeho zavření se příště otevře 2x, příště 4x, 8x atd..
Procedura pro otevírání okna vypadá následovně:

procedure TForm3.Timer1Timer(Sender: TObject);
var g: TForm3;
begin
    g := TForm3.Create(self);
    g.Left := screen.Width div 2 - g.Width div 2;
    g.Top :=  screen.Height - screen.Height;
    g.Show;
end;

Děkuji za případnou pomoc.

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Re:Zobrazení formuláře
« Odpověď #1 kdy: 21-12-2013, 19:47:42 »
procedure TForm3.Timer1Timer(Sender: TObject);
var g: TForm3;
begin
    g := TForm3.Create(self);
    g.Left := screen.Width div 2 - g.Width div 2;
    g.Top :=  screen.Height - screen.Height;
    g.Show;
end;

Moc nechápu proč vytváříš formulář, na kterém je ten časovač, ale tak jako tak ho zastav a spusť až uživatel zavře ten otevíraný form.
Jinak, nechceš ten vyplňovací form otevřít raději modálně (jednak by ti odpadl problém, kdy uživateli zapadne ten form někde pod jiné
okno tvé aplikace a druhak bys měl jednodušší kód k napsání) ?

Btw. formuláři stačí místo manuálního centrování nastavit Position na poScreenCenter.
« Poslední změna: 21-12-2013, 21:25:00 od TLama »

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Zobrazení formuláře
« Odpověď #2 kdy: 21-12-2013, 22:37:43 »
Tak to je dobrý kód :)

Ještě bych doplnil TLamu:

1.) Při:
Kód: Delphi [Vybrat]
  1.     g.Left := screen.Width div 2 - g.Width div 2;
  2.     g.Top :=  screen.Height - screen.Height;
bych se zamyslel, co se asi stane na systému s 2 monitory. Novější Delphi už při Position = poScreenCenter zohledňují více monitorů, ale nedají formulář samozřejmě k dolnímu okraji. Kouknul bych se na vlastnost:
Kód: Delphi [Vybrat]
  1. TCustomForm.Monitor
a
Kód: Delphi [Vybrat]
  1. TMonitor.WorkareaRect

2.) Zapomínáš otevřený formulář zničit - samozřejmě, když vytváříš ten formulář stále znova, tak z toho máš geometrickou řadu, t.j. nejdřív 1 běžící časovač, pak 2, pak 4 atd.
« Poslední změna: 21-12-2013, 22:48:22 od oxo »
Embarcadero Technology Partner

Hanzi23

  • Host
Re:Zobrazení formuláře
« Odpověď #3 kdy: 25-12-2013, 19:52:15 »
Děkuji Vám oběma za užitečné postřehy ;) Problém už jsem vyřešil, ale na možnosti umístění okna se ještě podívám. Ještě jednou díky :)