[LinuxFocus-icon]
<--  | Домой  | Карта  | Индекс  | Поиск

Новости | Архивы | Ссылки | Про LF
[an error occurred while processing this directive]
Jonas Alvarez
автор Jonás Alvarez
<jalvarez(at)eitb.com>

Об авторе:

Jonás Alvarez несколько лет работал разработчиком приложений под UNIX и Windows. Среди других вещей, он провёл несколько курсов по операционным системам, сетям и разработке.



Перевод на Русский:
Дмитрий Щербаков <dima_bsd(at)list.ru>

Содержание:

 

Gambas: Бейсик под Linux

Dibujo de una gamba

Резюме:

Gambas-это один из доступных в данный момент Бейсиков для Linux. В этой статье мы разработаем небольшой пример, где сможем увидеть простоту и мощь Gambas'а для ежедневных задач.


_________________ _________________ _________________

 

Введение

Basic - один из наиболее расширенных и самых легких языков программирования, главным образом для новичков. До сих пор, самой распространенной средой разработки приложений на Basic'e был Microsoft Visual Basic IDE. В последнее время Linux распространяется на пользовательские системы. Со времён, когда она была лимитирована серверам и использовалась гуру, она становится ОС для клиентов, давая ответ на такие потребности, как чтение электронной почты, серфинг сети и редактирование текста. Следуя этой тенденции, сейчас доступно несколько сред разработки на BASIC'e. Gambas - это графическая среда для разработки программ на BASIC'e, о которой говорится в этой статье. Стиль программирования подобен стилю программирования на Visual Basic'e, но, как мы увидим позже, есть и отличия. Я использую версию 0.64а, которая есть в моем дистрибутиве SuSE 9.0. Во время написания этой статьи, на странице проекта gambas последняя версия 0.81, но это не должно затронуть эту статью.

 

Кто будет заинтересован в Gambas'е?

Я разрабатывал приложения под Visual Basic какое-то время, поэтому мне больше не нужно было, чем просто начать работать, чтобы разработать этот пример. Кроме того, это - первый раз, когда я касаюсь Gambas, что доказывает, что любой, кто когда-либо использовал Visual Basic, может его использовать. Для остальных, это может быть пример того, каким простым и полезным BASIC может быть для многих вещей.

 

Пример

Я люблю учиться во время действия, поэтому мы начнем с примера. Это очень простое приложение, у которого есть свой секундомер с обратным счетом на экране. Мы можем изменить время, остановить и запустить его когда захотим.

Сразу после запуска Gambas'a , мы увидим его помощника:

startup

Мы выберем New Project (Новый проект). В следующем окне у нас спросят Project Name (Имя проекта). Назовем наш проект CountDown. Во втором диалоге выберем project directory (Папку проекта). Мы выберем нашу рабочую папку, и в текстовой строке внизу, напишем имя папки, которую собираемся создать.

new project

Если мы запустили Gambas в первый раз или не деактивировали опцию, то увидим подсказку дня. Читаем, что нас интересует, и закрываем окно. Мы уже в среде разработки, готовой к работе. Мы видем несколько окон на рабочем столе. Если мы в среде, такой как KDE, с несколькими рабочими столами, мы, возможно, захотим посвятить один из них Gambas'у, тем самым, имея все окна под контролем. Одна из первых опций, которые я обычно активирую в KDE - чтобы каждый рабочий стол показывал собственные значки.

Мы собираемся создать главную форму программы. Для этого,  делаем правый клик мыши в любой части окна проекта, и создаем новую форму.

new form

В следующем окне мы указываем имя формы, в этом случае FCountDown, со всеми значениями по умолчанию.

new form dialog

У нас уже есть первая форма, которая пока пустая.

form

Мы кликаем на элементах панели инструментов, которые мы будем включать в нашу форму. Мы можем увидеть его название, проводя мышью над каждым элементом. При двойном щелчке элемент будет помещен в верхний левый угол формы. При одиночном щелчке мы разместим его, изменяя размер, в любой части формы. Для нашей программы нам нужны: Метка (Label), текстовое поле (TextBox), Таймер (Timer), две кнопки (Button) и Переключатель (ToggleButton).

controls

Когда все элементы на месте, у нас должно получиться что-то похожее на это: (более или менее, каждый элемент мы можем поместить, где захотим):

controls in place

Как только все элементы на нашей форме, изменяем их имена на такие, какие будут для нас что-либо значить. Для этого, редактируем свойство Name на странице свойств. Мы не видим страницу свойств на экране, её можно активировать с окна проекта кнопкой свойств. Мы можем подводить мышь к кнопкам и следить за всплывающими подсказками, чтобы найти то, что нам нужно.

Я назвал элемент Label1 lblContador: Я кликнул по элементу управления и на панели свойств я могу изменить его имя. Для этого я редактирую свойство Name, присваивая ему значение lblContador. Потом я изменяю шрифт, делая его больше. Для этого, в свойстве font (шрифт) я выбираю шрифт Courier Bold 72 и принимаю (OK). Точно также я изменяю имя элемента ToggleButton1 на tglFuncionando. Элемент TextBox1 стал txtSegundos, Timer1 стал clkMiReloj, Button1 становится cmdPonerSegundos и, наконец, я переименовал Button2 на cmdSalir. Также я изменил Alignment (выравнивание) txtSegundos на Right (право).

Итак, начинаем писать код Basic'а. Он очень простой и его синтаксис не очень строг. Что мы сделаем сначала, так это присвоим текстам, которые видим на форме, более реальные значения. Хотя много опций отличны от Basic'а, мы могли бы это сделать в каждом окне свойств данного элемента, мы всё равно получили бы тот же самый результат.

Как только откроется форма, мы заполняем названия, которые хотим, чтобы каждый элемент хотел. Когда мы говорим:"как только откроется форма", мы говорим о действии: открытие формы. Для этого мы щелкаем мышью в любой части формы, где нет элементов. Открывается окно редактора и курсор расположен в теле новой процедуры: Public Sub Form_Open() (если мы программировали на Visual Basic, мы бы использовали событие Form_Load). Мы собираемся сделать элемент lblContador, чтобы показать количество оставшихся секунд. Первые строки кода класса формы выглядят так:

' Gambas class file
CONST fSegundosPorDefecto AS Float=120.0
fSegundos AS Float

PRIVATE SUB VerValores()
DIM nMinutos AS Integer

nMinutos = Int(Int(fSegundos) / 60)
lblContador.Caption = nMinutos & ":" & Format (fSegundos -
nMinutos * 60, "00.0")
END

PRIVATE SUB VerActivarDesactivar()
IF tglFuncionando.Value THEN
tglFuncionando.Text = ("&Detener")
ELSE
tglFuncionando.Text = ("&Arrancar")
ENDIF
END

PUBLIC SUB Form_Open()
fSegundos = fSegundosPorDefecto
VerValores
tglFuncionando.Value = FALSE
VerActivarDesactivar
txtSegundos.Text = fSegundos
cmdPonerSegundos.Text = ("&Reiniciar")
cmdSalir.Text = ("&Salir")
END

Мы добавили сразу после комментария, который сгенерировал Gambas,' Gambas class file, константу, которая содержит количество секунд по умолчанию для секундомера, fSegundosPorDefecto, имеющую значение 120 секунд (две минуты), и переменную fSegundos, которая будет фиксировать секундомер. Мы, также, создали две процедуры: VerValores, которая визуализирует значения секундомера и VerActivarDesactivar, которая изменяет текст кнопки Start/Stop.

К этому моменту, у нас уже есть форма, которая работает. Она не делает ничего полезного, она позволяет нам понять, что мы сделали, так что стоит попробовать. Мы сохраняем изменения из главного окна проекта Project CountDown и запускаем программу, нажав кнопку F5, или нажав кнопку Execute панели кнопок того же окна. Вот что мы должны увидеть:

Project CountDown

Если появляется что-то другое или получаем сообщение об ошибке, нужно пересмотреть, что мы делали до сих пор. Даже при нажатии кнопок Start, Reset или Exit ничего не происходит. Это будет нашим следующим заданием: назначение событий, происходящих при нажатии на кнопку. Перед тем, как мы продолжим, давайте запустим программу и посмотрим, что она содержит. Чтобы закрыть её, мы можем нажать X в верхнем правом углу. Я в KDE с темой SuSe, как вы могли заметить на формах, возможно закрытие окна другим способом.

Давайте рассмотрим кнопку Exit. При помощи этой кнопки наша программа закрывается. Чтобы описать кодом Бейсика действия, выполняющиеся при нажатии на эту кнопку, мы дважды щёлкаем на кнопке с надписью Exit (cmbExit). Мы видим, что Gambas сгенерировал несколько строк кода и курсор установлен между ними. Это то место, где должен быть написан код. Эта процедура будет выполнена, когда пользователь нажмет на кнопку. Чтобы закрыть программу, мы должны выполнить Me.Close, так что код будет выглядеть так:

PUBLIC SUB cmdSalir_Click()
ME.Close
END

Следующая кнопка, которую мы опишем - кнопка Reset. Таким же образом: дважды щелкаем на кнопке и в окне кода вводим следующие строки:

PUBLIC SUB cmdPonerSegundos_Click()
fSegundos = txtSegundos.Text
VerValores
END

По сути, все еще кажется, что ничто не случается. Наша программа должна выполнять какие-то действия. Мы должны активировать объект Timer. Для этого, нужно установить интервал для получения действий. Можно сделать это или кодом в прошлом действии Form_Open, или положить его на форму. Сейчас мы сделаем это так. На форме, щелкаем по объекту Timer и на его property sheet (странице свойств) изменяем значение его свойства Delay (задержка) от 1000ms до 100, чтобы выполнялось одно действие каждую десятую секунды, что будет точностью нашего секундомера.

У нас все еще нет кода, который бы выполнялся каждый раз, когда просыпается и пути активировать его. Чтобы сгенерировать код часов, нет ничего проще, просто как всегда щелкнуть дважды на форме часов. Это перенесет нас в окно кода. После записи нашего кода, все должно выглядеть так:

PUBLIC SUB clkMiReloj_Timer()
IF fSegundos < 0.1 THEN
tglFuncionando.Value = FALSE
tglFuncionando_Click
ELSE
fSegundos = fSegundos - 0.1
VerValores
END IF
END

И, наконец, по желанию пользователя мы активируем секундомер кнопкой-переключателем, которую мы всё еще не описали. После двойного щелчка по кнопке, мы можем записать код для этого действия:

PUBLIC SUB tglFuncionando_Click()
clkMiReloj.Enabled = tglFuncionando.Value
VerActivarDesactivar
END

И мы уже можем протестировать нашу работу.

 

И последний штрих: Gambas многоязычный, как и должен быть

Еще одна особенность Gambas'а - это поддержка множества языков. Если вы следили за кодом, вы заметили, что строки заключены в скобки. Это для того, чтобы уведомить Gambas, что эти строки будут переведены. Текст элементов формы не нуждается в этих скобках. Наш проект стал чем-то очень полезным, и люди будут просить, чтобы диалоговые окна появлялись на их родном языке. Ничего проще. Входим в меню Project / Properties окна проекта.

project properties

Здесь мы устанавливаем Title (заголовок) нашего проекта и отмечаем опцию Project is translatable (проект переводимый), которая позволит сделать проект переводимым. Теперь новая опция стала активной в меню: Project / Translate. Если мы откроем этот диалог, мы увидим, что перевод сейчас интуитивный:

project translation

Сначала выбираем нужный язык в верхней части. Если мы хотим перевести строку - выбираем и заполняем нижнюю часть. Когда все строки переведены, мы можем протестировать программу, запустив ее из терминала, если перед этим мы присвоили переменной LANG значение языка перевода. Если я хочу посмотреть, как выглядит перевод на английском, я закрываю gambas и запускаю

$ LANG=en_US; gambas

Чтобы вернуться к предыдущей ситуации, я запускаю gambas из меню KDE, просто потому, что переменная среды не определена, она только живет в своей консоли.

 

Заключение

Хотя это интерпретированный язык и нам нужно иметь Gambas полностью установленный, это хороший выбор, чтобы начать разработку приложений для Linux. Как мы заметили, он очень прост и разработка ведется очень быстро. Этого достаточно для многих повседневных приложений.

Экранная справка вглядит подробной, кроме того есть примеры из меню File/Open example. Мы можем, также, перейти на web страницу проекта, где в секции ссылок есть много интересных проектов на Basic'е. Это только начало проекта, в котором я вижу большое будущее.

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей
 talkback page 

<--, перейти к начальной странице выпуска

Webpages maintained by the LinuxFocus Editor team
© Jonás Alvarez, FDL
LinuxFocus.org
Translation information:
es --> -- : Jonás Alvarez <jalvarez(at)eitb.com>
es --> en: Miguel Alfageme Sánchez, Samuel Landete Benavente. <mas20(at)tid.es>
en --> ru: Дмитрий Щербаков <dima_bsd(at)list.ru>

2004-03-21, generated by lfparser version 2.43