Autor Téma: Ako sa volá funkcia - či je čosi potomkom TWinControl  (Přečteno 1751 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Kód: Text [Vybrat]
  1.  
  2. procedure EnableAllComponents(const aCont: TWinControl; const aEnabled: Boolean);
  3. var
  4.   I: Integer;
  5.   Comp: TControl;
  6. begin
  7.   // Kontrola vstupu
  8.   if not Assigned(aCont) then
  9.     Exit;
  10.   aCont.Enabled := aEnabled;
  11.   for I := 0 to aCont.ControlCount -1 do
  12.   begin
  13.     Comp := aCont.Controls[I];
  14. // Tu chem vložiť test či je aCont potomkom TWinControl - neviem si spomenúť/nájsť názov funkcie
  15.     if Comp.ComponentCount > 0 then
  16.       EnableAllComponents(TWinControl(Comp), aEnabled);
  17.   end;
  18.  
  19.  
« Poslední změna: 15-10-2013, 11:47:44 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline jSemler

  • Nováček
  • *
  • Příspěvků: 10
  • Karma: 0
    • Verze Delphi: 6, 2007, XE2
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #1 kdy: 15-10-2013, 11:45:11 »
Nemáš na mysli

Kód: Delphi [Vybrat]
  1. if aCont is TWinControl then ...?

Jirka

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #2 kdy: 15-10-2013, 11:48:54 »
Nie. Comp môže byť hocičo, napr. Tlabel a to nie je TWinControl.
Teraz som si spomenul, že obsahuje slovo "From"
« Poslední změna: 15-10-2013, 12:05:39 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #3 kdy: 15-10-2013, 12:24:30 »
Žeby "InheritsFrom"  8)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #4 kdy: 15-10-2013, 12:28:33 »
Žeby "InheritsFrom"  8)

pokud něco dědí z něčeho, tak snad musí projít i is. Ještě existovalo as, ale teď nevím, jestli to při neshodě vrací nil (to dělá C#) nebo to spadne na tom, že nelze přetypovat.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1127
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #5 kdy: 15-10-2013, 12:30:47 »
jo, aCont.InheritsFrom je to, co potrebuje ... "is" se vaze jen na tridu daneho prvku

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #6 kdy: 15-10-2013, 12:49:21 »
as padne. Nemá ošetrenú výnimku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2588
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #7 kdy: 15-10-2013, 14:02:42 »
jo, aCont.InheritsFrom je to, co potrebuje ... "is" se vaze jen na tridu daneho prvku
To nevim proc? V prikladu porovnava objekty tj. instance trid, takze v Delphi muze pouzit operator is nebo metodu InheritsFrom, je to jedno.
Ale InheritsFrom je metoda tridy, takze ji lze navic pouzit na tridu, coz operator is nelze.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1127
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #8 kdy: 15-10-2013, 14:40:16 »
no pozadavek je "potomkom TWinControl", a "is" je pro tento ucel nepouzitelny (porovna jen 2 stejne tridy, nedokaze porovnat v hierarchii)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2588
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #9 kdy: 15-10-2013, 14:59:09 »
no pozadavek je "potomkom TWinControl", a "is" je pro tento ucel nepouzitelny (porovna jen 2 stejne tridy, nedokaze porovnat v hierarchii)
Od kdy?  :o To je jen ponekud nestastne pojmenovany operator viz help:

returns True if object is an instance of the class denoted by class or one of its descendants, and False otherwise.

nebo-li se tim testuje, zda je typove kompatibilni a kazdy potomek je kompatibilni se svou basickou tridou.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1127
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Ako sa volá funkcia - či je čosi potomkom TWinControl
« Odpověď #10 kdy: 15-10-2013, 15:01:58 »
aha, beru zpet, asi mi preskocilo :)