BOXY SE SEZNAMEM – Rozlučte se s klávesou Alt!

Akce přetažení je standardní akcí v počítačových rozhraních. V případě seznamových polí je pro přesun několika položek současně nutné stisknout klávesu „Alt“. Nebo spíše „byla“, protože počínaje verzí 4D v19 R7 to již není vůbec nutné!

MOŽNOSTI SEZNAMOVÝCH POLÍ Přetahování

Uživatelsky přívětivější rozhraní

Tato operace vyžadovala z technických a historických důvodů stisknutí klávesy „Alt“ na klávesnici, aby bylo možné přesunout několik prvků současně. Tato povinnost je nyní minulostí. Jedná se o uživatelsky přívětivé vylepšení, protože toto nové chování je velmi blízké chování, které používají systémy MacOS nebo Windows pro správu souborů a složek. Uživatelé nebudou zmateni a tato akce bude velmi přirozená!

Co kdyby…

Pokud jsou uživatelé stávajících aplikací zvyklí při přetahování stisknout klávesu alt, není se čeho obávat. Přetahování bude fungovat úplně stejně. Klávesa alt bude ignorována, pokud nenaprogramujete něco, co by ji bralo v úvahu pro nějaký jiný účel (například: pokud je klávesa alt stisknutá, kopíruje se místo pouhého přesunu).

První závěr

Nové chování je uživatelsky přívětivější, protože napodobuje operační systémy a většina aplikací funguje. Zde bychom mohli skončit, ale využijme této příležitosti a připomeňme si některé zásady fungování seznamových polí, jejich vlastnosti a události, které lze zpracovávat. Pokud vás to zajímá, pojďme dál!

Režimy výběru. Výběr více položek. a události

Tři možné režimy výběru

Seznamové boxy mají tři režimy výběru, které jsou určeny vlastností seznamu vlastností.

  • Žádný
  • Jeden
  • Vícenásobný

Dva možné režimy výběru více položek.

Výběr několika prvků je možný pomocí klávesnice.

  • Podržením klávesy Shift můžete vytvořit souvislý výběr (např.: Od „Chloe“ po „Mike“).
  • Podržením klávesy Ctrl (v systému MacOS klávesyCmd ) můžete vytvořit nespojitý výběr(např.: „Albert“ a „John“ a „Mike“ a „Peter“).

Tři události

Při „přetahování“ lze spravovat tři události.

  • on beginning drag over
  • on drag over
  • on drop

blank

Důležitá poznámka: Tyto události se spustí pouze v případě, že nastavení akcí pro přetahování a upouštění je nastaveno na vlastní.

blank

1 – První z nich (on beginning drag over) se spustí, když se začne přetahovat v seznamu „zdroj“. V tomto okamžiku je třeba připravit „další krok“, tj. podívat se, co je vybráno, a nějakým způsobem to uložit. Může to být například uvnitř schránky nebo ve formulářové proměnné. Všimněte si, že tato událost se spouští pouze jednou.

If (Form event code=On Begin Drag Over)
 $drag:=New object
 // (…) put what you need in Form.drag object
 
 // put the object in a BLOB
 VARIABLE TO BLOB($drag; $blob)
 // and send the object to the PasteBoard with any signature (xxxx)
 APPEND DATA TO PASTEBOARD("xxxx"; $blob)
End if

2 – Druhý (on drag over) se spustí při najetí na listbox, ale pouze pokud mu předcházelo přetažení na začátku nebo pokud lze na listbox pustit cokoli jiného.

Tuto událost není nutné brát v úvahu, ale je výhodná, protože umožňuje odmítnout případné „upuštění“, které by mohlo nastat později.

Jak to udělat? Stačí se podívat na obsah toho, co bude pravděpodobně upuštěno. Pokud vám nevadí, co může být upuštěno, vraťte 0 (nulu) v hodnotě $0. V opačném případě vraťte -1 (mínus jedna), pak bude upuštění odmítnuto (a nebude generována žádná událost „při upuštění“).

If (Form event code=On Drag Over)
 If (Pasteboard data size("xxxx")<=0)
  $0:=-1 //reject anything that does NOT contains what is expected
 Else
  $0:=0
 End if
End if

3 – Konečně třetí (on the drop) je generována, jak napovídá její název, v okamžiku, kdy je skutečně provedeno „upuštění“ na „cílovém“ listboxu (který může být stejný jako zdrojový).

Od této chvíle můžete testovat, na které pozici byl drop proveden, a provádět potřebné operace v závislosti na obsahu, který má být dropnut. Nezapomeňte, že upuštění nemusí být nutně logickým důsledkem přetažení z jiného listboxu (nebo samotného listboxu). Může se jednat také o externí prvek, dokonce i mimo aplikaci, například soubor nebo složku z prostředí systému.

if(Form event code=On Drop)
 // read pasteboard content
 GET PASTEBOARD DATA("xxxx"; $blob)
 BLOB TO VARIABLE($blob; $drag)
 // do what you need to do with the object you got
  (…)
end if

Závěr

Všechny tyto informace jsou obsaženy v ukázce HDI, kterou si můžete stáhnout a prohlédnout si její praktickou implementaci.

Šťastné kódování!

Roland Lannuzel
- Product Owner & 4D Expert - Po studiu elektroniky se Roland věnoval průmyslovým IT jako vývojář a konzultant, který vytvářel řešení pro zákazníky s různými databázemi a technologiemi. Koncem 80. let se zamiloval do 4D a používal jej při psaní podnikových aplikací, které zahrnovaly účetní, fakturační a e-mailové systémy. nakonec se připojil ke společnosti v roce 1997 a Rolandův cenný přínos zahrnuje návrh specifikací, testovacích nástrojů, demoverzí a také školení a přednášky pro komunitu 4D na mnoha konferencích. Nadále aktivně utváří budoucnost 4D definováním nových funkcí a nástrojů pro vývoj databází.