Autor Téma: Vytvorený formulár nemá focus.  (Přečteno 1849 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Vytvorený formulár nemá focus.
« kdy: 31-08-2013, 13:37:48 »
Používam
Kód: Delphi [Vybrat]
  1. procedure TfrmMain.actBlocksExecute(Sender: TObject);
  2. begin
  3.   Self.Visible := False;
  4.   Application.CreateForm(TfrmBlock, frmBlock);
  5.   frmBlock.SetFocus; // Pre každý prípad
  6. end;
  7.  


V tomto prípade sa vytvára sa len jediný fromulár. Po zobrazení nemá focus. Čo je pre mňa veľmi nepríjemne. Kde hľadať zradu.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1023
  • Karma: 29
    • Verze Delphi: XE8, Seattle
Re:Vytvorený formulár nemá focus.
« Odpověď #1 kdy: 31-08-2013, 13:39:48 »
Otázka je, jestli toto je správný způsob vytváření formuláře :)
Kdybych to dělal já, asi bych se přidržel doporučených vzorů...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Vytvorený formulár nemá focus.
« Odpověď #2 kdy: 31-08-2013, 13:51:42 »
Citace
Otázka je, jestli toto je správný způsob vytváření formuláře Kdybych to dělal já, asi bych se přidržel doporučených vzorů...
A to je aký? Mám to priamo z Delphi. Viď súbor dpr.


Hodil som tam Self.Enable := False;  a tak získa focus. To sa mi už z princípu nepáči.

W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Vytvorený formulár nemá focus.
« Odpověď #3 kdy: 31-08-2013, 14:03:31 »
Našiel som tieto dve veci:
Kód: Delphi [Vybrat]
  1. 1
  2. Application.CreateForm(TResultsForm, ResultsForm);
  3.  
  4. 2
  5. procedure TMainForm.Button1Click(Sender: TObject);
  6. begin ResultsForm := TResultForm.Create(self);
  7.   try
  8.     ResultsForm.ShowModal;
  9.   finally
  10.     ResultsForm.Free;
  11.   end;
  12. end;
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Vytvorený formulár nemá focus.
« Odpověď #4 kdy: 31-08-2013, 15:10:00 »
Nateraz to riešim s tým MainForm.Enable := False;
Rád by som to mal bez toho.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1155
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Vytvorený formulár nemá focus.
« Odpověď #5 kdy: 31-08-2013, 19:15:40 »
a nepomuze ti spis .BringToFront ?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Vytvorený formulár nemá focus.
« Odpověď #6 kdy: 01-09-2013, 09:22:53 »
Formulár je v popredí. Skúsil som to aj tak. Nepomohlo. V rámci metódy pokus-omyl som urobil
Kód: Delphi [Vybrat]
  1. procedure TfrmMain.actBlocksExecute(Sender: TObject);
  2. begin
  3. //  Self.Enabled := False;
  4. //  Self.Hide;
  5.   Self.SendToBack;
  6.   Application.CreateForm(TfrmBlock, frmBlock);
  7.   frmBlock.BringToFront;
  8.   frmBlock.SetFocus;
  9. end;
  10.  
Poradie je správne, focus zostáva na hlavnom formulári.
To Enable to rieši, ale rád by som sa dozedel spôsob takého správania sa. Má niekto nejaké vysvetlenie (hocaké - aj na prvý pohľad nezmyselné), alebo nápad čo skúsiť či pozrieť/preveriť?

OT: prečo keď dám niečo vložiť, napríklad kód tak mi to dá v poradí /code-code. Musím potom všetko opravovať. Nehovoriac o tom,
 - že pri uložení mi pri práve doplnenom prázdnom riadku pridá ešte jeden prázdny riadok
 - ak tam niečo vložím príkazom copy a potom zmažem čo len jediný znak, tak mi zmení veľkosť písma
Potom to všetko dodatočne upravujem a dvakrát ma to nebaví.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Re:Vytvorený formulár nemá focus.
« Odpověď #7 kdy: 01-09-2013, 15:06:25 »
Formulár je v popredí. Skúsil som to aj tak. Nepomohlo. V rámci metódy pokus-omyl som urobil
Kód: Delphi [Vybrat]
  1. procedure TfrmMain.actBlocksExecute(Sender: TObject);
  2. begin
  3. //  Self.Enabled := False;
  4. //  Self.Hide;
  5.   Self.SendToBack;
  6.   Application.CreateForm(TfrmBlock, frmBlock);
  7.   frmBlock.BringToFront;
  8.   frmBlock.SetFocus;
  9. end;
  10.  
Poradie je správne, focus zostáva na hlavnom formulári.

Opravdu je pořadí správně ? Jenom tak letmo jsem proběhl tímto tématem, ale posílat Self na pozadí před vytvořením dalšího formu je,
ehm, zbytečnost, ne ? Co když je Self zrovna jediný formulář aplikace ? Kam ho tím pošleš ?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3096
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Vytvorený formulár nemá focus.
« Odpověď #8 kdy: 01-09-2013, 20:22:16 »
Když si udělám dva testovací formuláře, tak, tak mi to funguje podle očekávání: má-li formulář nastaveno Visible na TRUE, tak získá focus hned po CreateForm(), aniž bych něco extra před nebo po přidával.
--
Jestli si to správně pamatuju, tak s podivně fungujícím focusem jsem se setkal jen jednou: ve spojeni s frames, na kterých nebyl žádný TWinControl, ale už je to moře let a detaily si nepamatuju.


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Vytvorený formulár nemá focus.
« Odpověď #9 kdy: 02-09-2013, 10:39:22 »
TLama: Myslel som poradie zobrazených fromulárov. Ostatné máš pravdu.
pf1957: Doteraz sa mi to nestalo. Na každom formulári mám frame. Ale vždy obsahuje TWinControl

Pomáha jedine to Self.Enabled := False;
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.