Autor Téma: Zrušenie editácie záznamu - ShortCut  (Přečteno 376 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Zrušenie editácie záznamu - ShortCut
« kdy: 06-01-2020, 18:17:04 »
Pôvodne som chcel použiť Esc. Ale tu som narazil na problém s komponentami, ktoré to využívajú pre navrátenie do pôvodného stavu.
Akú skratku/shortcut použiť pre takýto prípad? Pre každý prípad prikladám terajší stav
Kód: Delphi [Vybrat]
  1.     FActions[naFirst].ShortCut := ShortCut(Word('F'), [ssCtrl]);
  2.     FActions[naBefor].ShortCut := ShortCut(Word('B'), [ssCtrl]);
  3.     FActions[naNext].ShortCut := ShortCut(Word('N'), [ssCtrl]);
  4.     FActions[naLast].ShortCut := ShortCut(Word('L'), [ssCtrl]);
  5.     FActions[naInsert].ShortCut := TextToShortCut('Ins');
  6.     FActions[naDelete].ShortCut := TextToShortCut('Del');
  7.     FActions[naEdit].ShortCut := ShortCut(Word('E'), [ssCtrl]);
  8.     FActions[naPost].ShortCut := ShortCut(Word('S'), [ssCtrl]);
  9. //    FActions[naCancel].ShortCut := TextToShortCut('Esc');
  10.     FActions[naPrint].ShortCut := ShortCut(Word('P'), [ssCtrl]);
Skratky Del a Ins sú v poriadku, nakoľko sú aktívne len v stave dsBrowse.
Ak je niekde zaužívaná iná skratka, tak mi to tu prosím napíšte. Ďakujem.
« Poslední změna: 06-01-2020, 18:43:00 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Slappy

  • Plnoletý
  • ***
  • Příspěvků: 228
  • Karma: 11
  • Slappy
    • Verze Delphi: 10.2 Tokyo + Vsetky :)
    • unSigned
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #1 kdy: 07-01-2020, 05:23:51 »
Esc je uplne standardna a vhodna skratka.

Ak je problem d nejakymi komponentami nemal by to byt problem osetrit a oIFovat, zalezi od toho ako to mas spravene, kde je fokus, ci sa Esc spracovavs ako VM_ message atd...
Moje projekty: http://www.unsigned.sk Tvorba cool dizajnovych instalatorov v NSIS a Inno Setup. Rozsirenie pre Visual Studio a RAD Studio pre tvorbu NSIS a Inno Setup instalatorov.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #2 kdy: 07-01-2020, 08:10:55 »
Citace
Esc je uplne standardna a vhodna skratka.
Preto som ju použil.
Citace
Ak je problem d nejakymi komponentami nemal by to byt problem osetrit a oIFovat, zalezi od toho ako to mas spravene, kde je fokus, ci sa Esc spracovavs ako VM_ message atd...
Celý kód som dal tu. Mám TActionManager a takto mu priraďujem ShortCut. Nič viac.
Netuším ako by som mohol použiť if - then. Ak užívateľ zmení text napr. v TAdvDBedit, tak po stlačení Esc očakáva pôvodnú hodnotu. A tu je problém. V TMS sú na inej úrovni ako ja. Tak si to ustrážia. Moje zrušenie editácie sa stratí. Nejaký komponent má vždy fokus.
.
Tak som si otestoval ShortCut a zistil som, že žiadne nemám :o ??? . Tak toto som nečakal :-\
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #3 kdy: 07-01-2020, 09:26:06 »
Skratky tam mám. Zobrazia sa mi. Ale nefunguje ani jedna! Už so to raz riešil. Takže znova na to.
Problém bol v priradení skratiek viacerým ActionManager. Žeby sa to opakovalo? Dám vedieť.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1112
  • Karma: 47
    • Verze Delphi: 10.3
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #4 kdy: 07-01-2020, 10:51:34 »
Ak užívateľ zmení text napr. v TAdvDBedit, tak po stlačení Esc očakáva pôvodnú hodnotu.

Já bych na Esc očekával storno celého okna; na původní hodnotu bych zkusil Ctrl+Z nebo pravým tlačítkem a Zpět.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #5 kdy: 07-01-2020, 14:16:09 »
Neviem čo s tým. Ak mám na formulári len jeden ActionManager tak mi to funguje.
Ak ich je viac, tak nie. Aktívny ActionManager má nastavené ShortCut a State = asNormal. Ostatné majú ShortCut zrušené a State = asSuspended.
Dôvodom viacerých ActionManager sú podformuláre. Nevedel som to urobiť ináč.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3011
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #6 kdy: 07-01-2020, 16:20:02 »
Neviem čo s tým. Ak mám na formulári len jeden ActionManager tak mi to funguje.
Ak ich je viac, tak nie. Aktívny ActionManager má nastavené ShortCut a State = asNormal. Ostatné majú ShortCut zrušené a State = asSuspended.
Dôvodom viacerých ActionManager sú podformuláre. Nevedel som to urobiť ináč.
Ja tedy o ActionManageru nic nevim, ale na stejne/podobne problemy jsme narazili, kdyz jsme kdysi meli nekolik ActionListu z duvodu skladani formulare z vice Framu, cili v podstate totez, o co se snazis, ale v bledemodrem. A dispatching zprav v ramci formulare nepocita s existenci vice ActionListu na jednom formulari. A matne si vzpominam, ze jsme museli na zaklade kontextu jednotlive akce deaktivovat. Kdyz se letmo divam do zdrojovek, tak jsme meli nejake ve framech virtualni metody
Kód: Delphi [Vybrat]
  1. procedure   TXxxFrame._DisableHotKeysWhileEditing;
  2. begin
  3.   actCancel.ShortCut  := TextToShortCut('');
  4.   ...
  5. end;
  6.  
  7. procedure   TXxxFrame._EnableHotKeysWhileEditing;
  8. begin
  9.   inherited _EnableHotKeysWhileEditing;
  10.   actCancel.ShortCut := TextToShortCut('Esc');
  11.   ...
  12. end;
  13.  
A nejakou logiku, ktera je volala. Ale Detaily uz si nepamatuju.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #7 kdy: 07-01-2020, 17:03:05 »
Ja to mám v podstate tak ako si to tu naznačil. Plus ešte nastavenie ActionManager.State. Ak je asSuspended, tak Action nereagujú. Popisy ShortCut sa mi zobrazia tam kde majú (patričný/zodpovedajúci ActionToolBar), len to nefunguje.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #8 kdy: 07-01-2020, 19:25:20 »
Vyskúšal som si to na samostatnom formulári s dvoma ActionManager a ActionToolBar. Tam mi to funguje podľa nastavenia ActionManager.State. Ani som nerušil ShortCut. Vlastnosť formulára KeyPreview na to nemá vplyv.
.
No pri podformulároch nie a nie. Formulár aj podformuláre majú nastavené KeyPreview = True. Neviem o ničom čo by som mal pri používaní podformulárov nastaviť.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #9 kdy: 07-01-2020, 19:36:12 »
Zo všetkých mojich pokusov mi vychádza jediné, že pre podformuláre platí
Citace
A dispatching zprav v ramci formulare nepocita s existenci vice ActionListu na jednom formulari.
Akurát, že namiesto ActionList tam je ActionManager.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #10 kdy: 07-01-2020, 19:52:56 »
Joj, ale ma to štve >:(
Jedná sa o kvázi DBNavigator pre VST. Robil som to podľa štandardného DBNavigator-a. Ten však neprichádza do úvahy. Vo VST mám vždy len časť údajov z DB tabuľky a Dataset (TFDEQuery) nie je k dispozícii. ActionToolBar som si vybral kvôli jeho vlastnostiam. Automatické usporiadanie tlačidiel pri zmene veľkosti. Pracuje len s TActionManager. Ten má tiež pre mňa zaujímavé vlastnosti. Zobraziť/skryť Popis, ShortCut či obrázok.
V niektorých prípadoch tento "DBNavigator " rozširujem o ďalšie tlačidlá + Action. Ale len v DesignTime.
.
Má niekto nejaký návrh ako by som to mohol realizovať ináč a aby to fungovalo?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5465
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Zrušenie editácie záznamu - ShortCut
« Odpověď #11 kdy: 08-01-2020, 09:58:49 »
Nakoniec som dospel k presvedčeniu, že Delphi nedokážu zachytiť ShortCut v ActionManager na podformulároch.
Tak som hodil jeden ActionManager na master formulár a tam používam oGlobalVar.CustomObject.PozadovanaAction. Takto mi to funguje.
.
Viem, že tu viacerí používajú podformuláre. To nikto z nich nemal tento problém?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.