[ franjo_tahi @ 16.02.2010. 14:20 ] @
Kreirao sam svoju kotrolu koja je prošireni DBNavigator. Nije kreirana kao nasljednik tDBNavigator-a, več kao zasebna klasa. Na osnovnoj klasi koristim proširenu klasu tButton, kojoj sam dodao TAction kako bih ju mogao pokretati sa ShortCut-ima. U konstruktoru kase tMyNavigator imam: Code: fActionList := TActionList.Create(self); fActionList.State := asNormal; U konstruktoru gumba imam: Code: ... self.fAction := TAction.Create(AOwner); self.fAction.Visible := true; self.fAction.Enabled := true; U proceduri tMyNavigator koja kreira gumb imam (npr gumb "Storno"): Code: btnStorno := mBtn.Create(self); btnStorno.OnClick := ButtonStornoClick; ... btnStorno.fAction.ActionList := fActionList; btnStorno.ShortCut := TextToShortCut('(None)'); btnStorno.fAction.OnExecute := ShortCutClick; btnStorno.SetSubComponent(true); btnStorno.fAction.Tag := 11; '(None)' se zamjenjuje tipkom koja je shortcut za taj gumb. To radi ok. Svakoj klasi tMyNavigator se može reći da li da koristi shotcut ili ne. Na formi je više objekata tipa tMyNavigator od kom je samo jednom rečeno da može koristiti shortcut. Pritiskom na tipku koja je definirana u TAction kao shortcut, event se okine, ali samo u jednom objektu MyNavigator. Pri tome se izvrši ok, ispoštuje postavku o dozvoli/zabrati pa se ili odradi ili ne. Procedura klase koja određuje da li je shortcut omogućen ili ne je: Code: fActiveShortcat := Value; //koristim ju za provjeru... for i := 0 to self.ControlCount-1 do begin if self.Controls[i] is mBtn then mBtn(self.Controls[i]).fAction.Enabled := Value; end; |