HDroidGUI - описание

Создание нового проекта
Процесс создания нового проекта с помощью утилиты newproject достаточно подробно описан ранее. Здесь я хочу пояснить, почему желательно пользоваться именно этой утилитой.

Java и Андроид накладывают некоторые ограничения на структуру каталогов проекта и на содержание обязательных для проекта файлов. Так, дерево каталогов, в котором находятся .java файлы проекта, должно соответствовать названию пакета. Каждый .java файл, AndroidManifest.xml содержат в себе полное имя пакета, а setenv.bat (setenv.sh), кроме того, краткое имя пакета и путь к .java файлам. Если вы решите создать новый проект вручную, копированием другого проекта, то вы должны будете сами изменить все, что требуется. А newproject сделает все это за вас.

Как это работает.
Наше приложение, созданное с помощью HDroidGUI, состоит из двух основных частей, одна из которых написана на Java, другая - на Harbour и C, они связаны между собой посредством JNI - Java Native Interface. Java - часть выполняет всю работу по взаимодействию с устройством. Она отрисовывает экран в соответствии с "заданием", полученным от Harbour - кода, получает информацию от пользователя через соответствующие виджеты и элементы управления устройством, от датчиков - и отправляет ее Harbour - части для последующей обработки, вызывает системные функции.

Можно представить это следующим образом: есть базис приложения, написанный на Java, который вызывает Harbour - функции для получения "задания", что именно ему следует делать. При старте программы создается главное окно приложения, и Java запрашивает у Harbour информацию о том, что и как следует отобразить в этом окне. Получив ее, Java отображает окно и ждет ввода от пользователя или, например, информации от датчиков - в зависимости от того, как построена программа и, при получении, обращается к Harbour, если он указал, что хочет обработать этот сигнал ( установив соответствующий обработчик - кодоблок ON CLICK для кнопки, например ). Harbour функция - обработчик может, в свою очередь, вызывать Java - методы для реализации тех или иных действий, в т.ч., для создания нового окна.

Интерфейс
Прежде всего еще раз хочу отметить, что HDroidGUI использует родной интерфейс Андроид, его родные виджеты, в отличие от тех фреймворков, которые рисуют весь интерфейс самостоятельно. Поэтому надо хорошо представлять себе структуру окна Андроид ( в терминологии Андроид оно называется Activity ).

Весь пользовательский интерфейс Андроид построен из объектов View и ViewGroup. View - это аналог понятия control или виджет, объект, который что-то изображает на экране и с которым можно взаимодействовать ( кнопка, строка ввода, ... ). ViewGroup - это невидимый контайнер, в котором расположены другие ViewGroup и View:

HDroidGUI в настоящее время использует один тип ViewGroup - это Linear Layout, которые могут быть вертикальными и горизонтальными. В вертикальных входящие в них объекты располагаются сверху вних по вертикали, а в горизонтальных, соответственно, слева направо по горизонтали. Если нам надо, например, поместить в окно объект, показывающий статический текст (TextView), под ним строку ввода (EditView) и ниже две кнопки, одна рядом с другой, мы должны объявить сначала вертикальный Layout, вставить в него последовательно TextView, EditView и горизонтальный Layout, а в этот последний - две кнопки. Соответствующий код на Harbour будет примерно таким:

  BEGIN LAYOUT oLayV SIZE MATCH_PARENT,MATCH_PARENT

     TEXTVIEW oText TEXT "Введите что-нибудь" SIZE MATCH_PARENT,WRAP_CONTENT
     EDITBOX oEdit SIZE MATCH_PARENT,WRAP_CONTENT

     BEGIN LAYOUT oLayH HORIZONTAL SIZE MATCH_PARENT,WRAP_CONTENT
        BUTTON oBtn1 TEXT "Сохранить"
        BUTTON oBtn2 TEXT "Отмена"
     END LAYOUT oLayH

  END LAYOUT oLayV
  

А на экране устройства это будет выглядеть так:

Пока не очень красиво :) ? Ну так мы ведь еще не использовали выравнивание, стили, цвета, шрифты, ...

Команды

INIT WINDOW

Начинает описание окна приложения - того, что в терминологии Андроид называется Activity. Вслед за этой должны следовать команды, реализующие интерфейс окна, и, в завершение, обязательно - ACTIVATE WINDOW.

     INIT WINDOW <oWnd> [ TITLE <cTitle> ];
               [ ON INIT <bInit> ]        ;
               [ ON EXIT <bExit> ]
    

oWnd - объект класса HDActivity.
cTitle - Заголовок окна.
bInit - Кодоблок, выполняющийся сразу после создания окна.
bExit - Кодоблок, выполняющийся перед закрытием окна.


ACTIVATE WINDOW

Завершает описание интерфейса окна и посылает его системе для создания.

     ACTIVATE WINDOW <oWnd>
    

oWnd - объект окна, созданный INIT WINDOW.


INIT DIALOG

Начинает описание диалога. Учтите, что диалог здесь служит, в основном, для реализации функций типа hd_MsgInfo(), hd_MsgYesNo() и т.п. Он имеет структуру, отличную от обычного окна (Activity). Используйте его, только если вы хорошо представляете, что вы делаете.

     INIT DIALOG <oDlg> [TITLE <cTitle>]      ;
               [ ON INIT <bInit> ]            ;
               [ ON EXIT <bExit> ]
    

oDlg - объект класса HDDialog.
cTitle - Заголовок диалогового окна.
bInit - Кодоблок, выполняющийся сразу после создания диалога.
bExit - Кодоблок, выполняющийся перед закрытием диалога.


ACTIVATE DIALOG

Завершает описание интерфейса диалога и посылает его системе для создания.

     ACTIVATE DIALOG <oDlg>
    

oDlg - объект диалога, созданный INIT DIALOG.


BEGIN LAYOUT

Начинает описание Layout. Этот виджет - контейнер для других компонентов, за его объявлением должны следовать команды, определяющие компоненты, последовательно размещающиеся в нем ( кнопки, тексты и пр. ). В завершение обязательно должен стоять END LAYOUT. Контайнер может быть горизонтальным - в этом случае входящие в него компоненты располагаются слева направо, или вертикальным - тогда, соответственно, сверху вниз.

     BEGIN LAYOUT <oLay>                      ;
               [<lHorz: HORIZONTAL>]          ;
               [ SIZE <width>, <height> ]     ;
               [ BACKCOLOR <bcolor> ]         ;
               [ FONT <oFont> ]               ;
    

oLay - объект класса HDLayout.
HORIZONTAL - если есть это слово, контейнер определен как горизонтальный ( по умолчанию - вертикальный ).
width, height - ширина и высота. Размер в dp (Density-independent Pixels). Можно также использовать константы MATCH_PARENT (максимально возможная ширина или высота в пределах родителя) или WRAP_CONTENT (ширина или высота определяется по содержимому элемента).
bcolor - цвет фона, может задаваться числом или в шестнадцатиричном строковом представлении (#FFFFFF).
oFont - объект класса HDFont.


END LAYOUT

Завершает описание контейнера.

     END LAYOUT <oLay>
    

oLay - объект контейнера, созданный BEGIN LAYOUT.


TEXTVIEW

Эта команда создает TextView - компонент GUI Андроид, отображающий статический текст.

     TEXTVIEW <oText>                         ;
               [ TEXT <cText> ]               ;
               [ SIZE <width>, <height> ]     ;
               [ TEXTCOLOR <tcolor> ]         ;
               [ BACKCOLOR <bcolor> ]         ;
               [ FONT <oFont> ]               ;
               [<lVScroll: VSCROLL>]
    

oText - объект класса HDTextView.
cText - текст, отображаемый в TextView.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
tcolor, bcolor - цвет текста и фона, соответственно. Может задаваться числом или в шестнадцатиричном строковом представлении (#FFFFFF).
oFont - объект класса HDFont.
VSCROLL - устанавливает вертикальный скроллинг.


BUTTON

Создание кнопки.

     BUTTON <oBtn>                            ;
               [ TEXT <cText> ]               ;
               [ SIZE <width>, <height> ]     ;
               [ TEXTCOLOR <tcolor> ]         ;
               [ BACKCOLOR <bcolor> ]         ;
               [ FONT <oFont> ]               ;
               [ ON CLICK <bClick> ]
    

oBtn - объект класса HDButton.
cText - текст, отображаемый на кнопке.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
tcolor, bcolor - цвет текста и фона, соответственно. Может задаваться числом или в шестнадцатиричном строковом представлении (#FFFFFF).
oFont - объект класса HDFont.
bClick - Кодоблок, выполняемый при нажатии кнопки.


EDITBOX

Создание компонента для ввода текста

     EDITBOX <oEdit>                          ;
               [ TEXT <cText> ]               ;
               [ HINT <cHint> ]               ;
               [ PASSWORD ]                   ;
               [ SIZE <width>, <height> ]     ;
               [ TEXTCOLOR <tcolor> ]         ;
               [ BACKCOLOR <bcolor> ]         ;
               [ FONT <oFont> ]               ;
               [ ON KEYDOWN <bKeyDown>]
    

oEdit - объект класса HDEdit.
cText - текст.
cHint - подсказка - текст, отображаемый в EditBox когда этот компонент пуст.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
tcolor, bcolor - цвет текста и фона, соответственно. Может задаваться числом или в шестнадцатиричном строковом представлении (#FFFFFF).
oFont - объект класса HDFont.
bKeyDown - Кодоблок, выполняемый при вводе очередного символа.


CHECKBOX

     CHECKBOX <oChe>                          ;
               [ TEXT <cText> ]               ;
               [ SIZE <width>, <height> ]     ;
               [ TEXTCOLOR <tcolor> ]         ;
               [ BACKCOLOR <bcolor> ]         ;
               [ FONT <oFont> ]
    

oChe - объект класса HDCheckBox.
cText - текст.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
tcolor, bcolor - цвет текста и фона, соответственно. Может задаваться числом или в шестнадцатиричном строковом представлении (#FFFFFF).
oFont - объект класса HDFont.


BROWSE ARRAY

     BROWSE <oBrw> ARRAY <aArr>        ;
               [ SIZE <width>, <height> ]     ;
               [<lHScroll: HSCROLL>]          ;
               [ ON CLICK <bClick> ]          ;
    

oBrw - объект класса HDBrwArray.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
HSCROLL - устанавливает горизонтальный скроллинг.


BROWSE DBF

     BROWSE <oBrw> DBF <cAlias>        ;
               [ FILTER <xFilter> ]           ;
               [ SIZE <width>, <height> ]     ;
               [<lHScroll: HSCROLL>]          ;
               [ ON CLICK <bClick> ]          ;
    

oBrw - объект класса HDBrwDbf.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
HSCROLL - устанавливает горизонтальный скроллинг.
bClick - кодоблок, выполняемый при выборе строки.


IMAGEVIEW

Эта команда создает ImageView - компонент GUI Андроид, предназначенный для отображения графических объектов.

     IMAGEVIEW <oImage>                       ;
               [ URI  <cUri>> ]               ;
               [ SIZE <width>, <height> ]     ;
               [ BACKCOLOR <bcolor> ]         ;
    

oImage - объект класса HDImageView.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
bcolor - цвет фона.


WEBVIEW

Эта команда создает WebView - компонент GUI Андроид, представляющий собой встроенный броузер.

     WEBVIEW <oWeb>                           ;
               [ TEXT <cText> ]               ;
               [ SIZE <width>, <height> ]     ;
               [ BACKCOLOR <bcolor> ]         ;
               [<lZoom: ZOOMTOOL>]            ;
               [<lJS: JSCRIPT>]
    

oWeb - объект класса HDWebView.
cText - текст, отображаемый в TextView.
width, height - ширина и высота. Подробнее см. в BEGIN LAYOUT
bcolor - цвет фона.
ZOOMTOOL
JSCRIPT


PREPARE FONT

Создание нового шрифта

     PREPARE FONT <oFont>            ;
               [ FACE <face> ]       ;
               [ STYLE <style> ]     ;
               [ HEIGHT <height> ]   ;
    

oFont - объект класса HDFont.
face - Может принимать одно из значений: FONT_NORMAL, FONT_SANS, FONT_SERIF, FONT_MONOSPACE.
style - Может принимать одно из значений: FONT_BOLD, FONT_ITALIC, FONT_BOLD_ITALIC.
height - размер шрифта в dp.


INIT STYLE

Создание нового стиля

     INIT STYLE <ostyle>            ;
          [COLORS <colors,...>]     ;
          [ORIENT <norient>]        ;
          [CORNERS <corners,...>]   ;
          [TEXTCOLOR <tcolor>]
    

oStyle - объект класса HDStyle.
colors -
nOrient -
corners -
tcolor -


MENU

Объявление меню для текущего окна (Activity). Вслед за этой командой должен следовать один или несколько MENUITEM и, в завершение, MENUITEM.

      MENU [ ID <nId> ] [ TITLE <cTitle> ]
    

nId - пока не используется.
cTitle - пока не используется.


ENDMENU

Завершение объявления меню.

      ENDMENU
    



MENUITEM

Элемент меню.

      MENUITEM <cTitle> [ ID <nId> ]   ;
              ACTION <bAction>
    

cTitle - название элемента меню.
nId - числовой идентификатор. Если не указан, формируется автоматически.
bAction - Кодоблок, выполняемый при выборе этого пункта меню..


SET TIMER

Установка таймера.

     SET TIMER <oTimer>  ;
               VALUE <value> ACTION <bAction>
    

oTimer - объект класса HDTimer.
value - периодичность активизации таймера в миллисекундах.
bAction - Кодоблок, вызываемый при срабатывании таймера.


INIT NOTIFICATION

Подготовка уведомления. Подготовленное уведомление можно отправить с помощью oNotify:Run().

     INIT NOTIFICATION <oNotify> TITLE <cTitle> ;
               [ TEXT <cText> ]             ;
               [ SUBTEXT <cSubText> ]       ;
               [<lLight: LIGHT>]            ;
               [<lSound: SOUND>]            ;
               [<lVibr:  VIBRATION>]
    

oNotify - объект класса HDNotify.
cTitle - заголовок уведомления.
cText - текст уведомления.
cSubText - дополнительный, более подробный текст.
LIGHT, SOUND, VIBRATION - при указании этих слов, уведомление сопровождается, соответственно, миганием светодиодов, звуковым сигналом или вибрацией.


SET MARGINS

     SET <oWidget> MARGINS [ LEFT <ml>] [ TOP <mt>] [ RIGHT <mr>]  [ BOTTOM <mb>]
    

oWidget - объект виджета, для которого устанавливаются параметры.
ml, mt, mr, mb -


SET PADDING

     SET <oWidget> PADDING [ LEFT <pl>] [ TOP <pt>] [ RIGHT <pr>]  [ BOTTOM <pb>]
    

oWidget - объект виджета, для которого устанавливаются параметры.
pl, pt, pr, pb -

Классы

HDGUIObject


Переменные:
cargo -


HDWindow INHERIT HDGUIObject


Переменные:
title -
bInit -
bExit -
bBack -

Методы:
New( cTitle, bInit, bExit ) -
FindByName( cName ) -


HDActivity INHERIT HDWindow


Переменные:
oFont -

Методы:
New( cTitle, bInit, bExit ) -


HDDialog INHERIT HDWindow


Переменные:
nRes -
aRes -

Методы:
New( cTitle, bInit, bExit ) -


HDTimer INHERIT HDGUIObject


Переменные:
bAction -

Методы:
New( value, bAction ) -
End() -


HDNotify INHERIT HDGUIObject


Переменные:
cTitle -
cText -
cSubText -
lLight -
lSound -
lVibr -

Методы:
New( lLight, lSound, lVibr, cTitle, cText, cSubtext ) -
Run() -


HDFont INHERIT HDGUIObject


Переменные:
typeface -
style -
height -

Методы:
Add( typeface, style, height ) -
Release() -


HDWidget INHERIT HDGUIObject


Переменные:
objName -
cText -
nWidth -
nHeight -
nMarginL -
nMarginT -
nMarginR -
nMarginB -
nPaddL -
nPaddT -
nPaddR -
nPaddB -
nAlign -
tColor -
bColor -
oFont -
oStyle -

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont ) -
GetText() -
SetText( cText ) -
getSize() -
setSize( nWidth, nHeight ) -


HDLayout INHERIT HDWidget


Переменные:
lHorz -

Методы:
New( lHorz, nWidth, nHeight, bcolor, oFont ) -
FindByName( cName ) -


HDTextView INHERIT HDWidget


Переменные:
lVScroll -
lHScroll -

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont, lVScroll, lHScroll ) -


HDButton INHERIT HDWidget


Переменные:
bClick - кодоблок, выполняемый при нажатии кнопки

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont, bClick ) -


HDEdit INHERIT HDWidget


Переменные:
cHint - подсказка - текст, отображаемый в EditBox когда этот компонент пуст.
bKeyDown - кодоблок, выполняемый при нажатии на клавишу

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont, cHint, bKeyDown ) -
getCursorPos( n ) - возвращает текущее положение курсора
setCursorPos( nPos ) - устанавливает текущее положение курсора


HDCheckBox INHERIT HDWidget


Переменные:

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont ) -
Value( lValue ) -


HDColumn INHERIT HDGUIObject


Переменные:
nWidth - ширина колонки в dp
cHead - заголовок (header) колонки
cFoot - footer колонки
lBool -
nAlign -
nHeadAlign -
block - Кодоблок, возвращающий содержание ячейки

Методы:
New( block, nWidth, cHead, cFoot, nAlign, nHeadAlign ) -


HDBrowse INHERIT HDWidget


Переменные:
aColumns - Массив объектов HDColumn - колонок таблицы
data -
lHScroll - .T., если требуется скроллинг по горизонтали
nRowHeight - высота строки
RowTColor -
oRowStyle -
nHeadHeight, HeadBColor, HeadTColor - высота, цвет фона и цвет текста заголовка
nFootHeight, FootBColor, FootTColor - высота, цвет фона и цвет текста footer
oFontHead -
bClick - кодоблок, выполняемый при нажатии на строку
bLong - кодоблок, выполняемый при долгом нажатии на строку
bCheck - кодоблок, выполняемый при клике по чекбоксу

Методы:
New( nWidth, nHeight, tcolor, bcolor, oFont, lHScroll, bClick ) -
AddColumn( oColumn ) -
GoTo( nRow ) -
RowCount() -
GetRow( nRow ) -
Refresh() -


HDBrwArray INHERIT HDBrowse


Переменные:

Методы:
New( aArray, nWidth, nHeight, tcolor, bcolor, oFont, lHScroll, bClick ) -


HDBrwDbf INHERIT HDBrowse


Переменные:

Методы:
New( cAlias, nWidth, nHeight, tcolor, bcolor, oFont, lHScroll, bClick, xFilter ) -
Rebuild( xFilter ) -
RefreshRow( nRow ) -


HDWebView INHERIT HDWidget


Переменные:
lZoom -
lJS -

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont, lZoom, lJS ) -


HDImageView INHERIT HDWidget


Переменные:
cUri -

Методы:
New( cText, nWidth, nHeight, tcolor, bcolor, oFont, cUri ) -
SetImage( cPath ) -

Функции

hd_ColorN2C( nColor ) -> cColor

Преобразует значение цвета из числа в шестнадцатиричное символьное представление ( #FFFFFF ).


hd_cpFromAsset( cFileIn, cFileOut )


hd_getCurrWindow()


hd_getScreenSize() -> aSize

Возвращает массив геометрических параметров экрана:


hd_getSysDir( cType ) -> cDir

Возвращает доступный общий каталог заданного типа cType:


hd_HomeDir() -> cDir

Возвращает домашний каталог приложения. Это каталог, доступный только данному приложению. При удалении приложения он удаляется вместе с ним.


hd_LockOrient()

Запрещает ( блокирует ) изменение ориентации при повороте устройства


hd_MsgGet( cMessage[, cText][, cHint][, bExit] )


hd_MsgInfo( cMessage[, bExit] )

Выводит на экран диалог с текстовым сообщением cMessage и кнопкой Ok. Кодоблок bExit выполняется после закрытия диалогового окна.


hd_MsgYesNo( cMessage[, bExit] )

Выводит на экран диалог с текстовым сообщением cMessage и кнопками Да, Нет. Кодоблок bExit выполняется после закрытия диалогового окна, получая в качестве параметра соответствующий экземпляр класса HDDialog. Переменная nRes этого экземпляра равна 1, если была нажата кнопка Да.


hd_Progress( symfunc, cTitle, cMess, bNext, aData )


hd_setMargins( oWidget, ml [, mt] [, mr] [, mb] )

Устанавливает margins для виджета oWidget - левый, верхний, правый, нижний. Если функция вызвана только с двумя параметрами: hd_setMargins( oWidget, ml ), то все 4 margins устанавливаются в указанное значение ml; если с тремя: hd_setMargins( oWidget, ml, mt ), то левый и правый устанавливаются в ml, а верхний и нижний - в mt.


hd_setPadding( oWidget, pl [, pt] [, pr] [, pb] )

Устанавливает padding для виджета oWidget - левый, верхний, правый, нижний. Если функция вызвана только с двумя параметрами: hd_setPadding( oWidget, pl ), то все 4 padding устанавливаются в указанное значение pl; если с тремя: hd_setPadding( oWidget, pl, pt ), то левый и правый устанавливаются в pl, а верхний и нижний - в pt.


hd_takePhoto( cDir, cName, block )


hd_ThreadClosed( oTimer )


hd_Toast( cMessage )

Вывод сообщения на экран - это сообщение само исчезает через несколько секунд.


hd_UnLockOrient()

Разрешает ( разблокирует ) изменение ориентации при повороте устройства


hd_Version( [n] ) -> xVersion

Возвращает версию HDroidGUI:


hd_WrLog( cMessage )

Запись сообщения в журнал, служит для отладки приложения на эмуляторе.