Autor Téma: SelectNext - vyhľadáva v inom formulári než je Sender  (Přečteno 202 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2791
  • Karma: 26
    • Verze Delphi: XE7 professional
Všetky formuláre sú potomkami triedy (TForm), ktorá má
Kód: Delphi [Vybrat]
  1. procedure TAbstractForm.HandleCompKeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   if Key = #13 then
  4.     HandleEnterKeyPress(Sender, Key);
  5. end;
  6.  
  7. procedure TAbstractForm.HandleEnterKeyPress(Sender: TObject; var AKey: Char);
  8. begin
  9.   if GetShoutEnterKeyPress(TControl(Sender)) then
  10.   begin
  11.     SelectNext(TWinControl(Sender), True, True);
  12.     AKey := #0;
  13.   end;
  14. end;
  15.  
Vytváram si dva formuláre. Pri dvojkliku na VST skryjem aktívny a zobrazím druhý. Po stlačení Enter mi funkcia
FindNextControl(TWinControl(Sender), True, True, False) vráti komponent zo skrytého formulára. To isté aj SelectNext. Prečo?
Ak použijem FindNextControl(TWinControl(Sender), True, True, True]), tak mi funkcia vráti nil.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2791
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:SelectNext - vyhľadáva v inom formulári než je Sender
« Odpověď #1 kdy: 15-05-2017, 11:15:08 »
Nateraz som to vyriešil takto
Kód: Delphi [Vybrat]
  1. procedure TAbstractForm.HandleEnterKeyPress(Sender: TObject; var AKey: Char);
  2. begin
  3.   if TWinControl(FindNextControl(TWinControl(Sender), True, True, False).Owner).Visible then
  4.   begin
  5.     SelectNext(TWinControl(Sender), True, True);
  6.     AKey := #0;
  7.   end;
  8. end;
  9.  
Nevyhadzuje to výnimku, ale ani nezmení fokus.
Nikto žiaden nápad? Beriem aj blbé.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2791
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:SelectNext - vyhľadáva v inom formulári než je Sender
« Odpověď #2 kdy: 15-05-2017, 12:32:26 »
Doplňujem informáciu, že mi to tak divne funguje len pri dynamicky vytváraných komponentoch (TAdvEdit). Ich základné nastavenie je:
Kód: Delphi [Vybrat]
  1. FoblsListEdit.Add(TAdvEdit.Create(FParent.Owner));  // Je to správne druhý formulár
  2.  
  3. FoblsListEdit[Idx].Parent := TWinControl(FParent);  // Panel, kde ich potrebujem
  4. FoblsListEdit[Idx].TabStop := True;
  5. FoblsListEdit[Idx].TabOrder := Idx;
  6.  
Niečo mi ušlo?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: