Centrum skryptów - Systemy operacyjne

Jak ustalić kolejność kart w aplikacji HTA?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak ustalić kolejność kart w aplikacji HTA?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak ustalić kolejność kart w aplikacji HTA?

-- MJ

Cześć Skrypciarze! Odpowiedź

Cześć, MJ. Zbliża się właśnie rozpoczęcie najbardziej oczekiwanych zawodów sportowych roku. Z całą pewnością nie możecie się już doczekać, co na temat ma do powiedzenia Skrypciarz piszący te słowa. Otóż: tylko szaleniec może nie wziąć udziału w Zimowej Olimpiadzie Skrypciarskiej! Super Bowl może się schować.

Pamiętajcie: nawet zwycięzca Super Bowl nie otrzyma laleczki doktora Scripto. A my rozdajemy takich 250!

Mamy nadzieję, że na naszej olimpiadzie każdy znajdzie coś dla siebie. Mamy zawody dla zaawansowanych i początkujących w dziedzinie VBScript i Windows PowerShell. Osoby, które zdobędą 60 punktów w którejkolwiek z nich, otrzymają certyfikat umiejętności podpisany osobiście przez Skrypciarzy. A to przecież coś bezcennego.

No dobra, przesadzamy. Ale na jego odwrocie można robić notatki.

W ramach rozgrzewki przed olimpiadą zajmiemy się modyfikowaniem kolejności kart w aplikacji HTA. Mamy tu prostą aplikację, składającą się z trzech pól tekstowych i przycisku:

<html>

<head>

<title>HTA Test</title>

<HTA:APPLICATION

     ID="objTest"

     APPLICATIONNAME="HTATest"

     SCROLL="yes"

     SINGLEINSTANCE="yes"

>

</head>



<body>

    Box 1 <input type="text" name="BasicTextbox1" size="30"><P>

    Box 3 <input type="text" name="BasicTextbox3" size="30"><P>

    Box 2 <input type="text" name="BasicTextbox2" size="30" ><P>



    <input id=runbutton type="button" value="Run Script">

</body>

Aplikacja na ekranie przedstawia się tak:

Kolejność kart aplikacji HTA domyślnie zależy od lokalizacji elementów na stronie; w naszym wypadku, przy założeniu, że kursor znajduje się w pierwszym polu, kolejność wygląda tak:

  • Box 1
  • Box 3
  • Box 2
  • Przycisk „Run Script”

Przeważnie takie rozwiązanie wystarcza. Jeśli jednak zaczniemy wprowadzać bardziej wymyślne układy z kilkoma kolumnami, domyślny układ może okazać się nieodpowiedni; przykładowo – naciśnięcie klawisza TAB będzie powodować przeniesienie kursora w poziomie, podczas gdy należałoby przenieść go w pionie. Przyznajemy się bez bicia, że sytuacja w naszej przykładowej aplikacji jest dosyć dziwna – pole 2 umieściliśmy za polem 3. Chcielibyśmy, aby naciśnięcie klawisza TAB w momencie, gdy kursor znajduje się w polu 1, powodowało jego przeniesienie do pola 2, a nie 3. Jak to zrobić bez zmieniania układu?

Ano tak:

<html>

<head>

<title>HTA Test</title>

<HTA:APPLICATION

     ID="objTest"

     APPLICATIONNAME="HTATest"

     SCROLL="yes"

     SINGLEINSTANCE="yes"

>

</head>



<body>

    Box 1 <input type="text" name="BasicTextbox1" size="30" tabIndex=1><P>

    Box 3 <input type="text" name="BasicTextbox3" size="30" tabIndex=3><P>

    Box 2 <input type="text" name="BasicTextbox2" size="30" tabIndex=2><P>



    <input id=runbutton type="button" value="Run Script">

</body>

Na pierwszy rzut oka skrypt ten nie wydaje się robić nic sensownego (typowe dla Skrypciarzy!). Przyjrzyjmy się jednak bliżej znacznikom pól tekstowych:

Box 1 <input type="text" name="BasicTextbox1" size="30" tabIndex=1><P>

Box 3 <input type="text" name="BasicTextbox3" size="30" tabIndex=3><P>

Box 2 <input type="text" name="BasicTextbox2" size="30" tabIndex=2><P>

No właśnie. Chcąc zmienić kolejność kart, wystarczy dodać do elementów strony właściwość tabIndex i przypisać jej odpowiednie wartości. W zmodyfikowanej aplikacji HTA naciśnięcie klawisza TAB przeniesie kursor z pola 1 do pola 2; ponowne naciśnięcie przeniesie go do pola 3.

Jest jeszcze jedna ważna kwestia: co się stanie, jeśli naciśniemy klawisz TAB po raz trzeci? Otóż po przejściu przez wszystkie elementy o określonej właściwości tabIndex, kursor przeskoczy na taki, który właściwości tej nie ma. W naszym przypadku będzie to przycisk Run Script.

Może nam to odpowiadać, ale wcale nie musi. W końcu może się zdarzyć, że nie będziemy chcieli, aby użytkownik był w stanie dotrzeć do któregoś z elementów za pomocą klawisza TAB. W takim wypadku wystarczy, jeśli do znaczników elementu dodamy właściwość tabIndex o wartości -1:

<input id=runbutton type="button" value="Run Script" tabIndex=-1>

Co nam to da? Otóż elementy o właściwości tabIndex równej -1 są pomijane przy przełączaniu klawiszem TAB.

Kolejność przełączania klawiszem TAB można też zmienić programistycznie. Po co? Załóżmy, że mamy pole wyboru. Chcemy, aby miejsce w które kursor zostanie przeniesiony po naciśnięciu klawisza TAB zależało od tego, czy pole zostanie zaznaczone, czy nie. Poniżej mamy podprogram, który usuwa jeden z elementów z kolejki przełączania, ustawiając jego wartość tabIndex na -1:

Sub TestSub

    BasicTextbox2.tabIndex = -1

End Sub

Aby ponownie wprowadzić element do kolejki przeglądania, wystarczy przypisać mu nową wartość tabIndex. Szczególnie przydatne jest to, że właściwość tabIndex można zmieniać dla wybranych elementów bez modyfikowania jej dla całej reszty. Załóżmy, że w aplikacji mamy elementy z wartościami tabIndex równymi 1, 2, 3, 4 i 5. Uruchamiamy skrypt, który przestawia wartość tabIndex trzeciego elementu na -1, usuwając go z kolejki przełączania. Pozostają w niej wartości tabIndex równe 1, 2, 4 i 5. Czy to zadziała? Jasne. Kursor z elementu 2 będzie przeskakiwał do elementu 4. To, że nie ma elementu 3, nie będzie przeszkadzać.

Uwaga!

Można to wykorzystać, numerując elementy w odstępach co 10 – np. 10, 20 i 30 zamiast 1, 2 i 3. Dzięki temu będziemy mogli bez kłopotu wstawić dodatkowy element – np. 25.

Możemy także uruchomić aplikację HTA w taki sposób, aby kursor znajdował się w wybranym elemencie. Służy do tego podprogram Window_OnLoad i wywołanie metody Focus:

Sub Window_OnLoad

   BasicTextbox1.Focus

End Sub

Gdybyście się zastanawiali, Skrypciarz piszący te słowa oglądał mistrzostwa Super Bowl, tak zresztą, jak co roku. Nie ma on nic przeciwko samemu Super Bowl; sprzeciwia się tylko przekonaniu, że są to najważniejsze rozgrywki sportowe na Ziemi. Wszyscy wiedzą, że najważniejsze jest March Madness – turniej koszykówki NCAA mężczyzn. Bez konkurencji.

Co takiego? Puchar Świata w piłce nożnej? Przecież chodziło o rozgrywki sportowe. Od kiedy to piłka nożna jest sportem?

Uwaga!

Prosimy nie przysyłać oburzonych e-maili. Skoro Skrypciarz piszący te słowa nie lubi piłki nożnej, to w ten sposób go do niej nie przekonacie. Na pocieszenie: Skrypciarz nie lubi też hokeja, boksu, wyścigów samochodowych, NBA ani gimnastyki artystycznej.Można by wymieniać, ale nie chcemy męczyć czytelników.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne