2011년 7월 10일 일요일

제 12 장 인터넷 즐겨 찾기 4 (그림파일 등의 추가작업)

상기에서 설명한 예제에서 다음과 같이 구성을 추가한다.

1. 프로젝트의 명칭은 FavoriteInternetVersion으로 한다.

2. 이 예제에서 사용된 그림파일은 디자이너창의 미디어컬럼의 파일명칭을 클릭하여 컴퓨터에 다운로드할 수 있다.

  
또는, 압축파일(FavoriteInternetVersion.zip)을 풀어서 폴더(assets)안에 있는 그림파일을 사용하여도 된다.

  
3. 디자이너창 전체를 나타내는 스크린샷은 다음과 같다.

  
참고사항: 상기 디자이너창의 구성요소와 이후에 설명하는 블록에디터창의 기능블록에 대응하는 넥서스S의 즐겨찾기 화면은 다음의 스크린샷과 같이 나타난다.


  
3-1. 상기 스크린 샷에서 즐겨찾기 명칭:인터넷 주소:는 그림파일(favorite.png, internet.png)에 각각 해당하고, 이미지(image1, image2)의 속성컬럼의 그림(Picture)난에서 해당 그림파일을 각각 선택하면 상기 스크린샷과 같이 나타난다.

3-2. “즐겨찾기 추가는 그림파일(favoriteAdd.png)에 해당하고, 즐겨찾기 추가버튼(AddButton)의 속성컬럼의 이미지(Image)난에서 상기 그림파일을 선택하면 상기 스크린샷과 같이 나타난다.

3-3. “즐겨찾기 선택즐겨찾기 제거는 그림파일(favoriteSelect.png, favoriteRemove.png)에 각각 해당하고, 리스트피커(SelectListpicker, RemoveListpicker)의 속성컬럼의 이미지(Image)난에서 해당 그림파일을 각각 선택하며 상기 스크린샷과 같이 나타난다.

3-4. “안테나는 그림파일(antenna.png)에 해당하고, 버튼(AntennaButton)의 속성컬럼의 이미지(Image)난에서 상기 그림파일 선택하면 상기 스크린샷과 같이 나타난다.

3-5. 또한, 즐겨찾기 추가버튼(AddButton)을 터치할 때 순간이미지가 나타나도록 디자이너창에서 클록(Clock1)을 추가한다. 클록의 속성컬럼에서 타이머구동(TimerEnabled)난에 체크표시를 제거하고, 타이머인터벌(TimerInterval)난에 250을 기재한다.

4. 안테나 그림을 터치하면 구글사이트로 이동하는 블록은 이하의 스크린샷과 같다.

  
5. 즐겨찾기 추가버튼에서 이전 예제와의 차이점은 버튼을 터치할 때에 클록타이머가 구동하고 순간이미지(favoriteAddVersion.png)가 나타나고 문자도 그림파일에 포함되어 있는 점이다. 

5-1. , 클록타이머를 구동하는 블록{(set Clock1.TimerEnabled to), (true)} 및 버튼이미지를 순간이미지로 설정하는 블록{(set Addbutton.Image to), (text favoriteAddVersion.png)}을 추가한다.



5-2. 상기 두블록을 추가버튼에 조합한 스크린샷은 다음과 같다.


  
6. 상기한 바와 같이 즐겨찾기 추가버튼의 터치에 의해 구동되는 클록타이머(Clock1.Timer)를 부가하여 버튼이미지를 고정이미지(favoriteAdd.png)로 설정하고 클록자신의 타이머의 구동을 중지한다.

  
7. 지금까지 설명한 블록을 종합한 3개의 스크린샷을 이하 나타낸다.




제 12 장 인터넷 즐겨 찾기 3 (블록에디터창 작업)

6. 구성요소에 활력 불어넣기

1. 블록에디터를 오픈하고 좌측에 위치한 사용자(My Blocks)탭을 선택하면, 디자이너창에서 작업한 라벨, 버튼, 수평배열, 수직배열, 선택용 리스트피커, 제거용 리스크피커, 액티비티스타터, 데이터베이스(TinyDB) 및 통보자(Notifier1) 등에 각각 대응하는 드로워(Drawer)가 나타난다. 이외에도, 나중에 설명하는 바와 같이 변수블록 등을 정의할 때에 자동생성되는 블록을 저장하는 사용자정의(My Definitions)드로워가 나타난다.

2. 변수블록의 사용에 대해서 설명한다.

2-1. 우선, 메모를 다이내믹하게 임시저장하기 위해 사용하는 변수로서,
(1) 즐겨찾기 명칭을 다이내믹하게 임시저장하는 타이틀리스트(TitleList),
(2) 인터넷 주소를 다이내믹하게 임시저장하는 인터넷주소리스트(dataURLs)에 대해 설명한다.

2-1-1. 블록에디터의 내장블록(Built-In) 탭을 선택하고 정의(Definition)드로워를 열고 변수 정의블록(def variable)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(variable)을 더블 클릭하여 TitleList로 정정한다.

리스트(Lists)드로워를 열고 리스트 만들기 호출블록(call make a list item)을 선택하여 작업영역으로 드래그한다.

아래 스크린샷과 같이, 상기 타이틀리스트 정의블록(def TiltleList)의 소켓에 리스트블록만들기 호출블록(call make a list item)을 플러그인한다.

  
2-1-2. 마찬가지로, 정의(Definition)드로워에서 변수 정의블록(def variable)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(variable)을 더블 클릭하여 dataURLs로 정정한다.

리스트(Lists)드로워를 열고 리스트 만들기 호출블록(call make a list item)을 선택하여 작업영역으로 드래그한다.

아래 스크린샷과 같이, 상기 인터넷 주소모음 리스트 정의블록(def dataURLs)의 소켓에 리스트블록만들기 호출블록(call make a list item)을 플러그인한다.

  

2-2. (1) 타이틀리스트의 선택시에 사용되는 인덱스변수(index),
(2) 타이틀의 선택제거시에 사용되고 또한 타이틀의 선택제거에 대응하여 선택된 인터넷주소를 제거하기 위해 사용되는 제거인덱스변수(removeIndex),
(3) 인터넷 주소모음 리스트(dataURLs) 중에서 인터넷주소를 선택하기 위해 사용되는 URL인덱스변수(urlIndex),
(4) 상기한 바와 같이 선택된 인터넷주소를 임시 저장하는 URL변수(url) 등에 대해서 구체적으로 설명한다.

2-2-1. 타이틀리스트의 선택시에 사용되는 인덱스변수(index)로서 이에 대응하여 선택된 인터넷주소를 액티비티스타터의 인터넷주소로 사용하기 위해 선택되는 인덱스변수(index)에 대해서도, 마찬가지로 정의(Definition)드로워를 열고 변수 정의블록(def variable)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(variable)을 더블 클릭하여 index로 정정한다.

이 인덱스의 디폴트값을 0으로 하기 위해 수학(Math)드로워를 열고 숫자블록(number 123)을 선택하여 작업영역으로 드래그하고, 번호블록의 번호(123)를 더블클릭하여 0으로 정정한다.

아래 스크린샷과 같이, 인덱스 정의블록(def index)의 소켓에 숫자블록(number 0)을 플러그인한다.

  
2-2-2. 타이틀의 선택제거시에 사용되고 또한 타이틀의 선택제거에 대응하여 선택된 인터넷주소를 제거하기 위해 사용되는 제거인덱스변수(removeIndex)에 대해서도, 마찬가지로 정의(Definition)드로워를 열고 변수 정의블록(def variable)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(variable)을 더블 클릭하여 removeIndex로 정정한다.

이 인덱스의 디폴트값을 0으로 하기 위해 상기 수학(Math)드로워를 열고 숫자블록(number 123)을 선택하여 작업영역으로 드래그하고, 숫자블록의 번호(123)를 더블클릭하여 0으로 정정한다.

아래 스크린샷과 같이, 제거인덱스 정의블록(def removeIndex)의 소켓에 상기 숫자블록(number 0)을 플러그인한다.

  
2-2-3. 인터넷주소모음리스트(dataURLs) 중에서 인터넷주소를 선택하기 위해 사용되는 URL인덱스변수(urlIndex)에 대해서도, 마찬가지로 정의(Definition)드로워에서 변수정의블록(def variable)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(variable)을 더블 클릭하여 urlIndex로 정정한다.

이 인덱스의 디폴트값을 1로 하기 위해 수학(Math)드로워를 열고 숫자블록(number 123)을 선택하여 작업영역으로 드래그하고, 숫자블록의 숫자(123)를 더블 클릭하여 1로 정정한다.

아래 스크린샷과 같이, URL인덱스정의블록(def urlIndex)의 소켓에 숫자블록(number 1)을 플러그인한다.

  
2-2-4. 상기한 바와 같이 선택된 인터넷주소를 임시 저장하는 변수(url)에 대해서는, 정의(Definition)드로워를 열고 변수정의블록(def variable)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(variable)을 더블 클릭하여 url로 정정한다.

이 변수(url)는 숫자가 아닌 텍스트로 초기화하기 위해 상기 텍스트(Text)드로워를 선택하여 열고 텍스트블록(text text)을 작업영역으로 드래그한다.

아래 스크린샷과 같이, URL정의블록(def url)의 소켓에 텍스트블록(text text)을 플러그인한다.

  
3. 동일한 절차를 반복해서 계속 사용하여야 하는 경우에는 절차블록(procedure)을 사용하면 블록의 조합이 간편하게 된다.  , 절차블록은 매개변수화하여 사용하면 블록의 조합이 간편하게 된다.

3-1. 블록에디터의 내장블록(Built-In)탭을 선택하고 정의(Definition)드로워를 열고 절차정의블록(procedure)을 선택하여 작업영역으로 드래그하고, 이 블록에 기재된 디폴트명(procedure)을 더블 클릭하여 displayInternetAddress로 정정하면, 사용자블록(My Blocks)탭의 사용자정의(My Defintions)에 자동으로 절차호출블록(call displayInternetAddress)이 생성된다.

  
이 절차호출블록은 필요에 따라 다수의 다른 블록에 추가된다.  이에 대한 설명은 나중에 한다.

3-2. 절차블록(to displayInternetAddress arg)내에 다음과 같은 방식으로 블록을 조합한다.

3-2-1. 라벨(InternetLabel)에 기재된 텍스트를 모두 삭제하여 초기화한다.

  
3-2-2. 다음에, URL인덱스(urlIndex) 1로 설정하여 초기화한다.

  
3-2-3. 상기와 같이 초기화하는 라벨블록과 URL인덱스를 절차블록에 다음 스크린샷과 같이 조합한다.

  
3-3. 다음에, 타이틀리스트(TitleList)에 있는 타이틀(title) 전체에 대해서 한 개의 타이틀마다 순차적으로 순환하여 인터넷라벨타이틀(즐겨찾기 명칭)url(인터넷주소)를 기록하기 위해 퍼이취블록(foreach)을 사용한다.

  
3-3-1. URL인덱스(urlIndex)를 사용하여 인터넷주소모음 리스트(dataURLs)에서 아이템(인터넷주소)을 선택하여 변수(url)에 임시 저장한다.

  
3-3-2. “인터넷라벨의 텍스트(InternetLabel.Text)”, “줄 바꿈(n)”, “타이틀(value title)”, “: (text :)인터넷주소(globla url)등을 단일의 텍스트그룹으로서 인터넷라벨의 텍스트(set InternerLabel.Text to)로 기록한다.

  
3-3-3. 상기한 바와 같이, 한쌍의 타이틀(즐겨찾기 명칭)URL데이터(인터넷 주소)를 인터넷라벨의 텍스트로 기록하는 것을 종료하면, 다음의 인터넷주소를 인터넷라벨에 기록하기 위해 URL인덱스(global urlIndex) 1만큼 증가한다.

  
3-3-4. 상기한 복수의 블록을 퍼이치블록(foreach)에 조합함으로써, 타이틀리스트(TitleList)에 있는 타이틀(즐겨찾기 명칭)전체에 대해서 한 개의 타이틀마다 순차적으로 순환하면서, 인터넷라벨에 타이틀(즐겨찾기 명칭)을 기록하고 또한 인터넷주소 모음리스트(dataURLs)에 있는 인터넷주소전체에 대해서도 상기 타이틀에 대응하는 인터넷주소를 한 개씩 순차적으로 순환하여 인터넷라벨에 인터넷주소를 기록한다.

  
참고 사항: 텍스트 만들기 호출블록(call make text text)의 소켓(text)에 플러그인한 타이틀블록(value title)과 인터넷주소블록(global url)이 서로 다른 형태의 블록으로 되어 있다. , 타이틀블록에서는 value가 기재되어 있고 인터넷주소블록에는 global이 기재되어 있다. 이것은 퍼이취블록(foreach)에서 순환을 위해 타이틀리스트블록과 타이틀블록을 메인블록으로 사용하고 있다.  따라서, 타이틀블록의 값을 사용한다.  이에 반해서, 인터넷주소블록은 퍼이취블록에서 메인블록으로 사용하고 있지 않다.  따라서, 인터넷주소블록은, 상기 메인블록(타이틀리스트블록과 타이틀블록)과 동기화하도록 변수(url)를 매개변수로 하는 전역변수를 사용한다.

3-4. 두개의 초기화블록{(set InternetLabel.Text to, text), (set global urlIndex to, number 1)}과 두개의 리스트 전체의 아이템을 순환하여 기록하는 퍼이치블록(foreach), 절차블록(displayInternetAddress)의 섹션(do)에 배치한 모습의 스크린샷은 다음과 같다.

  
4. 타이틀텍스트박스(TitleTextBox)URL텍스트박스(URLTextBox)에 각각 기재한 즐겨찾기 명칭과 인터넷 주소를 인터넷라벨(InternetLabel)에 추가하고 또한 소형데이터베이스(TinyDB)에 저장하기 위해, 즐겨찾기 추가버튼(AddButton)을 사용한다. 

이에 관련하여, 즐겨찾기 추가버튼(AddButton)을 터치하여 발생되는 버튼클릭이벤트에 의해 호출하는 버튼클릭이벤트핸들러에 대해서 설명한다.

4-1. 상기 즐겨찾기 추가버튼의 버튼클릭이벤트핸들러의 블록은 다음과 같다.

  
4-2. 상기 버튼클릭이벤트핸들러에 기능을 부여하기 위해, 타이틀리스트(global TitleList)에 타이틀텍스트박스의 텍스트(즐겨찾기 명칭)(TitleTextBox.Text)를 추가하는 블록을 조합한다. 

  
마찬가지로, 인터넷 주소 모음리스트(global dataURLs)URL텍스트박스의 텍스트(인터넷 주소)(URLTextbox.Text)를 추가하는 블록을 조합한다.

  
4-3. 다음에는, 즐겨찾기 명칭과 인터넷 주소 등의 추가기재를 편리하게 하기 위해 타이틀텍스트박스와 인터넷주소텍스트박스를 공백 상태로 초기화한다.


  
4-4. 다음에, 이전에 설명한 절차블록(displayInternetAddress)을 호출하는 블록(call displayInternetAddress)을 추가하여 조합한다.  , 타이틀리스트(TitleList)에 있는 타이틀전체에 대해서 한 개의 타이틀(즐겨찾기 명칭)마다 순차적으로 순환하여 인터넷라벨에 타이틀을 기록하고 또한 인터넷 주소모음 리스트(dataURLs)에 있는 인터넷주소전체에 대해서도 상기 타이틀에 대응하는 인터넷주소를 한 개씩 순차적으로 순환하여 인터넷라벨에 인터넷주소를 기록하는 절차블록을 간편화하는 절차호출블록을 이벤트핸들러에 추가한다.

  
4-5. 다음에, 안드로이드폰 내부에 있는 소형 데이터베이스의 스토어밸류(TinyDB1.StoreValue), notes(text titles)를 태그로 사용하여 타이틀리스트(global TitleList)의 값(즐겨찾기 명칭)이 저장된다.   , 소형 데이터베이스에 저장될 때에는 한쌍의 태그와 값(tag-value pairs)으로 저장된다.

  
또한, 안드로이드폰 내부에 있는 소형 데이터베이스의 스토어밸류(TinyDB1.StoreValue), notes(text urls)를 태그로 사용하여 인터넷 주소모음 리스트(global dataURLs)의 값(인터넷 주소)이 저장된다.   마찬가지로, 소형 데이터베이스에 저장될 때에는 한쌍의 태그와 값(tag-value pairs)으로 저장된다.

  
4-6. 상기 조합블록을 한 개의 그룹으로 조합하면 다음의 스크린샷과 같다. 

  
참고사항: 상기 블록조합의 그룹은 즐겨찾기 추가버튼의 버튼클릭이벤트핸들러의 기능블록으로 사용한다. 그런데 이하에 설명하는 바와 같이 이 기능블록을 보완하여야 한다.

4-7. 상기한 바와 같은 그룹을 버튼클릭이벤트핸들러에 조합한 다음, 라이브테스트를 하면 즐겨찾기 명칭과 인터넷주소 중 어느 하나를 기재하지 않아도 문제가 없는 것처럼 보인다.  그런데, 절차블록가 실행될 때 즐겨찾기 명칭과 인터넷주소는 각각의 리스트에서 순서가 서로 일치하여야 한다.  , 즐겨찾기 명칭과 인터넷주소에 관한 인덱스가 서로 일치하여야 한다. 즐겨찾기 명칭과 인터넷주소중 어느 하나를 누락한 상태에서 추가버튼에 의해 저장되면 이들의 해당 인덱스가 일치하지 않게 되어 나중에 소형데이터베이스에서 이들 데이터를 출력할 때에 즐겨찾기 명칭과 인터넷주소가 일치하지 않게 된다.  이를 미연에 방지하기 위해, 즐겨찾기 명칭과 인터넷주소를 모두 기재하지 않고 추가버튼을 터치하는 경우에는 알림통지를 하고, 모두 기재하고 버튼을 터치하는 경우에만 소형 데이터베이스에 기재할 수 있도록 다음에 조건블록(ifelse)을 사용한다.

4-8. 상기한 바와 같이 버그가 발생하지 않도록 조건블록(ifelse)을 사용한다.

  
4-9. 상기 조건블록에서 즐겨찾기 명칭과 인터넷주소를 모두 기록하였는 지의 여부를 체크하는 조합블록을 다음의 스크린샷과 같다.

  
4-10. 한편, 즐겨찾기 명칭과 인터넷주소를 적어도 하나를 기록하지 않은 경우에는, 각각의 경우에 대응하는 경고(“즐겨찾기 명칭을 입력하세요.” 또는 인터넷 주소를 입력하세요.”) 등이 통보자이벤트핸들러(Notifier)에 의해 스크린에 잠시 동안 나타나도록 이하에 설명하는 바와 같이 블록을 조합한다.


4-11. 사용자블록(My Blocks)탭의 통보자(Notifier1)드로워를 열고 통보자의 경고알림호출블록(call Notifier1.ShowAlert notice)을 선택하여 작업영역으로 드래그한다.

내장블록(Built-In)탭의 텍스트(Text)드로워를 열고 텍스트블록(text)을 선택하여 작업영역으로 드래그한다.  텍스블록(text)에 알림문구로서, “즐겨찾기 명칭을 입력하세요.를 복사하여 붙여 넣기를 한다.

다음에, 경고알림블록(call Notifier1.ShowAlert notice)의 소켓(notice)에 상기 텍스트블록(text)을 플러그인한다.
  

  
4-12. 즐겨찾기 명칭이 기재되지 않은 경우, “즐겨찾기 명칭을 입력하세요.라고 기재된 텍스트를 플러그인한 경고알림블록을 조건블록(if)의 섹션(then-do)에 놓는다.

  
4-13. 마찬가지로, 통보자(Notifier1)드로워를 열고 통보자의 경고알림호출블록(call Notifier1.ShowAlert notice)을 선택하여 작업영역으로 드래그한다.

내장블록(Built-In)탭의 텍스트(Text)드로워를 열고 텍스트블록(text)을 선택하여 작업영역으로 드래그한다. 텍스블록(text)에 알림문구로서, “인터넷주소를 입력하세요.를 복사하여 붙여 넣기를 한다.

다음에, 경고알림호출블록(call Notifier1.ShowAlert  notice)의 소켓(notice)에 상기 텍스트블록(text)을 플러그인한다.

 
  
4-14. 마찬가지로, 인터넷주소가 기재되지 않은 경우, “인터넷주소를 입력하세요.라고 기재된 텍스트를 플러그인한 경고알림호출블록을 조건블록(if)의 섹션(then-do)에 놓는다.

  
4-15. 상기한 바와 같이 즐겨찾기 명칭이나 인터넷주소를 기재하지 않은 경우 경고알림에 대한 블록그룹은 다음과 같이 된다.

  
4-16. 이상 설명한 즐겨찾기 추가버튼의 클릭이벤트핸들러(AddButton.Click)에 기능전체를 부여한 블록조합은 다음과 같다. 

  
참고사항: 모두 기록한 경우에는 상기한 블록그룹을 실행하여 즐겨찾기 명칭과 인터넷주소를 소형데이터베이스에 각각 저장한다.  일단 데이터베이스에 저장하면, 앱을 끝낸 후에 다시 실행하여도 이전에 저장한 명칭과 인터넷주소가 그대로 남아있기 때문에 편리하다.

5. 다음에는, 소형데이터베이스에 저장한 인터넷주소에 해당하는 인터넷을 열기 위해 선택용 리스트피커를 사용하는 방법에 대해 설명한다.  즐겨찾기 선택용 리스트피커(SelectListPicker)을 터치하면, 선택용 리스트피커에 이벤트가 발생한다.
이 이벤트발생 후에, 열고자 하는 인터넷에 대응하는 즐겨찾기 명칭의 피크(선택) 전후로 구분하여 조합블록을 구성한다.

5-1. 즐겨찾기 명칭의 피크(선택) 전의 조합블록에 대해 설명한다.

5-1-1. 블록에디터의 사용자 블록(My Blocks)탭을 선택하고, 선택용 리스트피커(SelectListPicker)드로워를 열고 선택용 리스트피커의 피크전블록(when SelectListPicker.BeforePicking do)을 작업영역으로 드래그한다.

  
5-1-2. 열고자 하는 인터넷에 대응하는 즐거찾기 명칭(title)을 선택하기 전에 타이틀리스트의 타이틀 전체를 선택용 리스트피커의 구성요소로서 설정한다.
, 선택용 리스트피커의 구성요소(set SelectListPicker.Elements to)의 소켓(to)에 타이틀리스트(global TitleList)를 설정한다.

  
5-1-3. 타이틀리스트의 타이틀(즐겨 찾기 명칭) 중에서 열고자하는 인터넷에 대응하는 명칭을 선택(터치)하기 전에 타이틀리스트의 타이틀 전체를 선택용 리스트피커의 구성요소로 설정하는 블록조합의 스크린 샷은 다음과 같다.

  
참고사항: 상기 선택용리스트피커를 터치하면 상기한 블록조합에 의해 타이틀리스트의 타이틀 전체를 리스트로 나타내는 새로운 창이 나타난다. 이 리스트에서 원하는 타이틀(즐겨 찾기 명칭)을 터치하면 다음에 설명하는 블록조합에 의해 소망의 웹사이트를 런칭한다.

5-2. 즐겨찾기 명칭의 피크(선택) 후의 블록조합에 대해 설명한다.

5-2-1. 블록에디터의 사용자 블록(My Blocks)탭을 선택하고, 리스트선택용 피커(ListSelectPicker)드로워를 열고 선택용 리스트피커의 피크(선택)후블록(when SelectListPicker.AfterPicking do)을 작업영역으로 드래그한다.

  
5-2-2. 타이틀리스트(TitleList)에서 선택(터치)한 타이틀(ListSelectPicker.Selection)의 위치(positon in list)를 찾아서 전역 인덱스(set global Index to)에 임시 저장한다.

  
5-2-3. 상기 임시 저장소(global index)에 저장된 인덱스(index)에 대응하는 인터넷주소를 인터넷 주소모음 리스트(global dataURLs)에서 선택하여 액티비티스타터의 데이터URI(set ActivityStarter1.DataUri to)로 설정한다.

  
5-2-4. 액티비티스타터의 스타트액티비티(ActivityStarter1.StartActivity)를 호출하여 브라우저를 런칭하고 액티비티스타터의 데이터URI(set ActivityStarter1.DataUri to)로 설정한 인터넷 주소를 브라우징한다.

  
5-2-5. 이상 설명한 블록의 조합은 다음의 스크린 샷과 같이 구성된다.

  
6. 다음에는, 소형데이터베이스에 저장한 한 쌍의 즐겨찾기 명칭과 인터넷주소를 제거하기 위해 제거용 리스트피커(RemoveListPicker)를 사용하는 방법에 대해 설명한다.  즐겨찾기 제거용 리스크피커를 터치하면, 제거용 리스트피커에 이벤트가 발생한다.  이 이벤트발생 후에, 제거하고자 하는 즐겨찾기 명칭의 피크(선택) 전후로 구분하여 조합블록을 구성한다.

6-1. 제거하고자 하는 즐겨찾기 명칭의 피크(선택) 전의 조합블록에 대해 설명한다.

6-1-1. 블록에디터의 사용자 블록(My Blocks)탭을 선택하고, 제거용 리스트피커(RemoveListPicker)드로워를 열고 리스트제거용 피커의 피크전블록(RemoveListPicker.BeforePicking)을 선택하여 작업영역으로 드래그한다.

  
6-1-2. 제거하고자 하는 인터넷에 대응하는 즐거찾기 명칭(title)을 선택하기 전에 타이틀리스트의 타이틀(즐겨찾기 명칭) 전체를 피커의 구성요소로서 설정한다. , 타이틀리스트를 제거용 리스트피커의 구성요소(set RemoveListPicker.Elements to)로 설정한다.

  
6-1-3. 타이틀리스트의 타이틀(즐겨 찾기 명칭) 중에서 제거하고자 하는 인터넷에 대응하는 명칭을 선택하기 전에 타이틀리스트의 타이틀 전체를 제거용 리스트피커의 구성요소로 설정하는 블록조합의 스크린 샷은 다음과 같다.

  
참고사항: 상기 제거용리스트피커를 터치하면 상기한 블록조합에 의해 타이틀리스트의 타이틀 전체를 리스트로 나타내는 새로운 창이 나타난다. 이 리스트에서 제거하고자 하는 타이틀(즐겨 찾기 명칭)을 터치하면 다음에 설명하는 블록조합에 의해 타이틀(즐겨 찾기 명칭)과 이에 대응하는 인터넷주소가 소형데이터베이스에서 제거되고 초기의 화면으로 복귀한다.

6-2. 제거하고자 하는 즐겨찾기 명칭의 피크(선택) 후의 조합블록에 대해 설명한다.

6-2-1. 제거용 리스트피커(RemoveListPicker)드로워에서 제거용 리스트피커의 피크후블록(RemoveListPicker.AfterPicking)을 드래그한다.


6-2-2. 다음에 타이틀리스트에서 선택(터치)한 타이틀(RemoveListPicker.Selection)의 위치(positon in list)를 찾아서 제거인덱스(removeIndex)로 설정한다.
  
  
6-6. 제거인덱스(global removeIndex)에 의거하여 타이틀리스트(global TitleList)에서 선택된 타이틀을 삭제한다(call remove list item list index).

  
6-2-3. 동시에, 인터넷주소리스트(dataURLs)에서도 상기 제거인덱스(removeIndex)에 의거하여 상기한 바와 같이 제거되는 타이틀(즐겨찾기 명칭)에 대응하는 인터넷주소를 제거한다.


참고 사항: 전역 제거인덱스(global removeIndex), 변수(variable)를 사용하여 제거인덱스(def removeIndex)블록의 생성시에 사용자블록(My Blocks)의 사용자 정의(My Definitons)드로워에 자동으로 생성된다.

6-2-4. 다음에, 이전에 설명한 절차블록(displayInternetAddress)을 호출하는 블록(call displayInternetAddress)을 추가하여 조합한다.  , 타이틀리스트(TitleList)에 있는 타이틀전체에 대해서 한 개의 타이틀마다 순차적으로 순환하여 인터넷라벨에 타이틀을 기록하고 또한 인터넷 주소모음 리스트(dataURLs)에 있는 인터넷주소전체에 대해서도 상기 타이틀에 대응하는 인터넷주소를 한 개씩 순차적으로 증가하여 인터넷라벨에 인터넷주소를 기록하는 절차블록을 간편화하는 절차호출블록을 이벤트핸들러에 추가한다.
  
  
6-2-5. 다음에, 안드로이드폰 내부에 있는 소형 데이터베이스의 스토어밸류(TinyDB1.StoreValue), titles(text titles)를 태그로 사용하여 타이틀리스트(global TitleList)의 값(즐겨찾기 명칭)이 저장된다. , 소형 데이터베이스에 저장될 때에는 한쌍의 태그와 값(tag-value pairs)으로 저장된다.

  
또한, 안드로이드폰 내부에 있는 소형 데이터베이스의 스토어밸류(TinyDB1.StoreValue), urls(text urls)를 태그로 사용하여 인터넷 주소모음리스트(global dataURLs)의 값(인터넷 주소)이 저장된다.   , 소형 데이터베이스에 저장될 때에는 한쌍의 태그와 값(tag-value pairs)으로 저장된다.

  
6-2-6. 이상 설명한 블록의 조합은 다음의 스크린 샷과 같이 구성된다.

  
참고 사항: 이전에 설명한 바와 같이, 안드로이드폰의 내부에 있는 소형의 데이터베이스(TinyDB)를 사용하는 경우, 앱을 종료한 후 앱을 다시 시작할 때에 값이 제대로 저장되어 있는 지의 여부를 시험하기 위해서는 실제로 apk 파일을 안드로이드폰에 다운로드하여 실제로 실행하여햐 한다. 앱인벤터를 애뮬레이터나 안드로이드폰에 직접 연결하여 라이브 테스트를 하는 경우 소형의 데이터베이스(TinyDB)를 테스트할 수 없다.

7. 예제를 실행할 때의 스크린의 초기화에 대해 설명한다.

7-1. 스크린의 초기화 이벤트핸들러는 다음의 스크린 샷은 다음과 같다.


7-2. 태그(text titles)를 사용하여 소형데이터베이스의 겟밸류(TinyDB1.GetValue)타이틀리스트(set global TitleList to)에 임시 저장한다.
  

또한, 태그(text urls)를 사용하여 소형데이터베이스의 겟밸류(TinyDB1.GetValue)인터넷주소모음리스트(set global dataURLs to)에 임시 저장한다.
  
  
7-3. 타이틀리스트에 타이틀(이미 저장된 즐겨찾기 명칭)이 없는 경우를 나타내는 조건블록을 나타낸다.

  
7-4. 타이틀리스트에 타이틀(이미 저장된 즐겨찾기 명칭)이 없는 경우, 타이틀리스트(TitleList)에 타이틀(즐겨찾기 명칭)이 없음을 나타내는 블록을 설정한다.  이 경우는 앱을 처음 실행한 경우이거나 이미 실행한 경우로서 저장된 타이틀을 모두 삭제한 경우에 해당한다.

  
7-5. 상기 조건블록에 타이틀이 없는 타이틀리스트블록을 조합한 블록을 나타낸다.


7-6. 마찬가지로, 인터넷 주소모음 리스트(dataURLs)에 인터넷주소(이미 저장된 인터넷주소)가 없는 경우를 나타내는 조건블록을 나타낸다.
  
  
7-7. 인터넷 주소모음 리스트에 인터넷주소(이미 저장된 인터넷주소)가 없는 경우, 인터넷 주소모음 리스트(dataURLs)에 인터넷주소가 없음을 나타내는 블록을 설정한다.  이 경우는 앱을 처음 실행한 경우이거나 이미 실행한 경우로서 저장된 인터넷주소를 모두 삭제한 경우에 해당한다.

  
7-8. 상기 조건블록에 인터넷주소가 없는 인터넷 주소모음 리스트블록을 조합한 블록을 나타낸다.

  
7-9. 다음에, 이전에 설명한 절차블록(displayInternetAddress)을 호출하는 블록(call displayInternetAddress)을 추가하여 조합한다.  , 타이틀리스트(TitleList)에 있는 타이틀 전체에 대해서 한 개의 타이틀마다 순차적으로 순환하여 인터넷라벨에 타이틀(즐겨찾기 명칭)을 기록하고 또한 인터넷 주소모음 리스트(dataURLs)에 있는 인터넷주소 전체에 대해서도 상기 타이틀에 대응하여 인터넷주소를 한 개씩 순차적으로 순환하여 인터넷라벨에 인터넷주소를 기록하는 절차블록을 간편화하는 절차호출블록을 이벤트핸들러에 추가한다.

  
7-10. 타이틀리스트의 타이틀(즐겨 찾기 명칭) 중에서 브라우징하고자하는 인터넷에 대응하는 명칭을 선택하기 전에 타이틀리스트의 타이틀 전체를 선택용 리스피커의 구성요소로 설정하는 조합블록을 스크린초기화 블록에 추가한다.

  
7-11. 스크린의 초기화면을 위한 이벤트핸들러의 스크린샷은 다음과 같다.

  

8. 지금까지 설명한 블록을 종합한 3개의 스크린샷을 이하 나타낸다.