<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF72%3AGambas</id>
		<title>LXF72:Gambas - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF72%3AGambas"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;action=history"/>
		<updated>2026-05-13T04:54:52Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;diff=4692&amp;oldid=prev</id>
		<title>Yaleks: шаблон</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;diff=4692&amp;oldid=prev"/>
				<updated>2008-05-22T10:59:52Z</updated>
		
		<summary type="html">&lt;p&gt;шаблон&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 10:59, 22 мая 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{Цикл/Gambas}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Модули и классы ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Модули и классы ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''ЧАсТь 2 Пусть это будет нашим маленьким секретом: программирование — это действительно просто. '''Доктор Марк Александр Бейн''' (Dr Mark Alexander Bain) укажет вам путь наименьшего сопротивления.''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''ЧАсТь 2 Пусть это будет нашим маленьким секретом: программирование — это действительно просто. '''Доктор Марк Александр Бейн''' (Dr Mark Alexander Bain) укажет вам путь наименьшего сопротивления.''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;diff=4585&amp;oldid=prev</id>
		<title>Yaleks: /* РАботА с несКоЛьКиМи ФоРМАМи */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;diff=4585&amp;oldid=prev"/>
				<updated>2008-05-15T12:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;РАботА с несКоЛьКиМи ФоРМАМи&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 12:11, 15 мая 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== РАботА с несКоЛьКиМи ФоРМАМи ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== РАботА с несКоЛьКиМи ФоРМАМи ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{Врезка&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;|Заголовок=ПоДсКАзКА&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;|Содержание=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Всегда храните все свои проекты Gambas в одной и той же папке – таким образом, вы всегда будете знать, где их можно найти.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Убедитесь, что первым делом при создании новой формы вы добавили на нее функцию выхода.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* Во время написания кода попробуйте набрать имя объекта (например, Form1), затем точку. будет показан выпадающий список со всеми свойствами и методами объекта.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* используйте параметр OPTIONAL в функциях и подпрограммах для определения значений по умолчанию, например вот так:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;OPTIONAL MyParam As&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;String = “My default text”&amp;lt;/source&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;|Ширина=300px}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Теперь у вас есть две чистые формы, между которыми можно переключаться в режиме дизайна. однако, никаких действий эти формы пока&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Теперь у вас есть две чистые формы, между которыми можно переключаться в режиме дизайна. однако, никаких действий эти формы пока&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;совершать не могут. Первоочередная задача — добавить кнопку выхода,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;совершать не могут. Первоочередная задача — добавить кнопку выхода,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;diff=4584&amp;oldid=prev</id>
		<title>Yaleks: Новая: == Модули и классы == ''ЧАсТь 2 Пусть это будет нашим маленьким секретом: программирование — это действи...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF72:Gambas&amp;diff=4584&amp;oldid=prev"/>
				<updated>2008-05-15T12:02:27Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: == Модули и классы == &amp;#039;&amp;#039;ЧАсТь 2 Пусть это будет нашим маленьким секретом: программирование — это действи...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Модули и классы ==&lt;br /&gt;
''ЧАсТь 2 Пусть это будет нашим маленьким секретом: программирование — это действительно просто. '''Доктор Марк Александр Бейн''' (Dr Mark Alexander Bain) укажет вам путь наименьшего сопротивления.''&lt;br /&gt;
&lt;br /&gt;
Полагаю, весь прошедший месяц вы плотно занимались работой с базами данных, впечатляя своего босса, своих коллег и&lt;br /&gt;
даже собственную кошку своими способностями в добыче&lt;br /&gt;
данных, обработке их и отправке обратно в базу (конечно же, вы отметили про себя, что Gambas делает это занятие невероятно простым).&lt;br /&gt;
&lt;br /&gt;
Технологии, с которыми мы имели дело до сих пор, хороши для&lt;br /&gt;
одиночных, небольших приложений, однако пришло время узнать, как&lt;br /&gt;
можно работать с Gambas в больших проектах. Должно быть, в первую&lt;br /&gt;
очередь вы захотите узнать, как можно открыть больше одной формы.&lt;br /&gt;
Вот этим-то мы сейчас и займемся.&lt;br /&gt;
&lt;br /&gt;
начнем с чистого проекта. щелкните New Project (Создать проект) на&lt;br /&gt;
экране приветствия Gambas, или в меню File (Файл) выберите New&lt;br /&gt;
Project (Создать проект), если Gambas уже открыт. затем, добавьте две&lt;br /&gt;
новые чистые формы (правой кнопкой мыши щелкните Forms (Формы)&lt;br /&gt;
в окне проекта, затем выберите New (Создать) &amp;gt; Form (Форму). не поддавайтесь искушению оставить имена как есть (по умолчанию формы&lt;br /&gt;
будут названы Form1 и Form2). Этим вы только создадите себе проблемы в дальнейшем: если будут получены десятки форм с подобными&lt;br /&gt;
названиями, то произойдет полная неразбериха. Так что, возьмите себе&lt;br /&gt;
за правило называть их сразу какими-либо осмысленными именами — в&lt;br /&gt;
нашем случае, например, frmMain и frmLogon.&lt;br /&gt;
&lt;br /&gt;
=== РАботА с несКоЛьКиМи ФоРМАМи ===&lt;br /&gt;
Теперь у вас есть две чистые формы, между которыми можно переключаться в режиме дизайна. однако, никаких действий эти формы пока&lt;br /&gt;
совершать не могут. Первоочередная задача — добавить кнопку выхода,&lt;br /&gt;
чтобы любую форму можно было закрыть. Перейдите к frmMain и&lt;br /&gt;
создайте новую кнопку, кликнув значок кнопки в окне инструментов и&lt;br /&gt;
перетащив его на форму. нажмите F4 для перехода в окно Properties&lt;br /&gt;
(Свойства), и измените текст на кнопке на «Close» («закрыть»).&lt;br /&gt;
&lt;br /&gt;
Так же, как с формами, заведите привычку давать кнопкам осмысленные имена вместо того, чтобы оставлять их названия такими, какие&lt;br /&gt;
они берут себе сами (Button 1, Button 2 и т. д.). Воспользуйтесь окном&lt;br /&gt;
Properties (Свойства), чтобы изменить название закрывающей кнопки&lt;br /&gt;
на btnClose. затем дважды щелкните по новой кнопке, чтобы добавить&lt;br /&gt;
код для обработки ее нажатия. он будет выглядеть примерно так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas class file&lt;br /&gt;
PUBLIC SUB btnClose_Click()&lt;br /&gt;
ME.Close&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Повторив весь процесс для формы frmLogon, вы получите возможность закрывать обе формы. Конечно, для того чтобы закрыть&lt;br /&gt;
frmLogon, вам необходимо будет сначала ее открыть, так как к этому&lt;br /&gt;
моменту доступна только frmMain (попробуйте запустить проект и посмотрите, что произойдет). очевидно, следующей задачей должно стать&lt;br /&gt;
добавление на форму frmMain кнопки, которая позволила бы перейти к&lt;br /&gt;
frmLogon.&lt;br /&gt;
&lt;br /&gt;
В режиме дизайна перейдите к frmMain и добавьте новую кнопку.&lt;br /&gt;
Воспользуйтесь окном Properties (Свойства) для изменения текста кнопки на «Log On» («Вход»), а ее названия на btnLogon.&lt;br /&gt;
&lt;br /&gt;
Прежде чем приступить к написанию кода, мы должны сначала&lt;br /&gt;
подумать, в каком режиме будет открываться форма frmLogon. Если вы&lt;br /&gt;
работали в среде Visual Basic, вам должно быть знакомо понятие открытия форм в модальном и немодальном режимах. Когда форма&lt;br /&gt;
frmLogon открывается в немодальном режиме, вы можете получить&lt;br /&gt;
доступ к одной форме независимо от другой. Если же вы откроете&lt;br /&gt;
frmLogon модально, то перейти от нее обратно к frmMain можно будет&lt;br /&gt;
только закрыв frmLogon.&lt;br /&gt;
&lt;br /&gt;
Дважды щелкнув btnLogon, вы получите примерно это:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC SUB btnLogon_Click()&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вы можете ввести&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;frmLogon.Show&amp;lt;/source&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;frmLogon.ShowModal&amp;lt;/source&amp;gt;&lt;br /&gt;
Если мы вызываем btnLogon немодально, то можно добавить на&lt;br /&gt;
frmLogon кнопку для вызова frmMain. Убедитесь, что вы используете&lt;br /&gt;
только немодальный вызов (Show вместо ShowModal). Если вы установите обе формы в модальный режим — ваше приложение намертво&lt;br /&gt;
зависнет (если поразмыслить — это очевидно), поэтому будьте&lt;br /&gt;
внимательны!&lt;br /&gt;
&lt;br /&gt;
Если вы добавили все нужные формы и полностью закончили переходы между ними, давайте узнаем, как можно передавать данные.&lt;br /&gt;
&lt;br /&gt;
=== ЛоКАЛьные и гЛобАЛьные ДАнные ===&lt;br /&gt;
В этом примере мы используем две формы, frmMain и frmLogon. У&lt;br /&gt;
нас могут быть данные, которые имеют отношение либо только к&lt;br /&gt;
frmMain, либо только к frmLogon — локальные данные. но могут&lt;br /&gt;
существовать и другие данные, доступ к которым может потребоваться в&lt;br /&gt;
пределах всего приложения — глобальные данные.&lt;br /&gt;
&lt;br /&gt;
ниже приведен код для frmLogon с добавленной на нее кнопкой&lt;br /&gt;
btnLogon:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas class file&lt;br /&gt;
logged_on AS Boolean&lt;br /&gt;
countdown AS Integer&lt;br /&gt;
PUBLIC SUB btnClose_Click()&lt;br /&gt;
ME.Close&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB Form_Open()&lt;br /&gt;
logged_on = FALSE&lt;br /&gt;
countdown = 3&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB btnLogon_Click()&lt;br /&gt;
logged_on = TRUE&lt;br /&gt;
countdown = countdown - 1&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Мы видим, что переменные описаны в самом начале. затем они инициализируются при открытии формы (Form_Open) и изменяются при&lt;br /&gt;
щелчке по кнопке «Log On» («Вход») (btnLogon_Click). При таком описании переменных они являются локальными по отношению к frmLogon.&lt;br /&gt;
Если же некоторые из них необходимо сделать доступными для всего&lt;br /&gt;
остального приложения, то их нужно описать как PUBLIC:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC logged_on AS Boolean&lt;br /&gt;
PUBLIC countdown AS Integer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
описав переменные logged_on и countdown как глобальные,&lt;br /&gt;
можно использовать их вне формы frmLogon. например, можно будет&lt;br /&gt;
добавить новую кнопку (btnCheckStatus) на frmMain со следующим&lt;br /&gt;
исполняемым кодом:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC SUB btnCheckStatus_Click()&lt;br /&gt;
IF (frmLogon.logged_on = FALSE) THEN&lt;br /&gt;
message (“You are not logged on. “ &amp;amp;&lt;br /&gt;
frmLogon.countdown &amp;amp; “ attempts left”)&lt;br /&gt;
ELSE&lt;br /&gt;
message (“Logged On”)&lt;br /&gt;
END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
заметьте, что вы должны предварять имя переменной именем&lt;br /&gt;
формы (как, например, frmLogon.logged_on). однако, это верно&lt;br /&gt;
только до тех пор, пока frmLogon открыта. Можно заметить, что&lt;br /&gt;
countdown будет равна 0, пока frmLogon не откроется, 3 — когда она&lt;br /&gt;
будет открыта, и 0 — когда снова закроется. очевидно, это хорошо&lt;br /&gt;
только если frmLogon будет постоянно открыта. В противном случае,&lt;br /&gt;
нужно поискать другой путь.&lt;br /&gt;
&lt;br /&gt;
По мере роста проекта может проявиться еще одно неудобство.&lt;br /&gt;
Метод, описанный выше, позволяет обращаться к глобальным данным,&lt;br /&gt;
содержащимся только в Form1, Form2 и т. д., но не к более общим данным. Это может вызвать неразбериху: нужно постоянно помнить, где&lt;br /&gt;
содержатся данные, к тому же для их правильной инициализации необходимо открывать формы только в определенном порядке.&lt;br /&gt;
&lt;br /&gt;
Гораздо более эффективным методом представляется создание&lt;br /&gt;
модуля для хранения глобальных параметров. Модуль также может&lt;br /&gt;
использоваться как отправная точка — для инициализации данных, а также для того чтобы предохранить нас от неприятных ситуаций, одну из&lt;br /&gt;
которых мы только что наблюдали. Для создания модуля щелкните правой кнопкой мыши окно проекта и выберите New &amp;gt; Module (Создать &amp;gt;&lt;br /&gt;
Модуль). В появившемся затем окне измените имя на Global&lt;br /&gt;
(«Глобальный»). здесь же следует отметить галочкой параметр Startup&lt;br /&gt;
Class (если вы забыли сделать это, не волнуйтесь — галочку можно поставить после создания файла).&lt;br /&gt;
&lt;br /&gt;
Теперь перейдем к новому модулю и отредактируем его вот так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas module file&lt;br /&gt;
PUBLIC logged_on AS Boolean&lt;br /&gt;
PUBLIC countdown AS Integer&lt;br /&gt;
PUBLIC SUB Main()&lt;br /&gt;
logged_on=FALSE&lt;br /&gt;
countdown=3&lt;br /&gt;
frmMain.Show&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Если модуль Global («Глобальный») определен как Startup Class,&lt;br /&gt;
то при запуске проекта он автоматически выполняет главную подпрограмму (Main subroutine). При этом инициализируются все требуемые&lt;br /&gt;
параметры, после чего отображается та форма, которую мы хотим&lt;br /&gt;
видеть первой.&lt;br /&gt;
&lt;br /&gt;
Теперь обе формы будут следует отредактировать с учетом нового&lt;br /&gt;
расположения параметров (они теперь определены в модуле Global&lt;br /&gt;
(«Глобальный»), а не в frmLogon):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘frmMain&lt;br /&gt;
Gambas class file&lt;br /&gt;
PUBLIC SUB btnClose_Click()&lt;br /&gt;
ME.Close&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB btnLogon_Click()&lt;br /&gt;
frmLogon.Show&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB Form_Open()&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB btnCheckStatus_Click()&lt;br /&gt;
IF (Global.logged_on = FALSE) THEN&lt;br /&gt;
message (“You are not logged on. “ &amp;amp;&lt;br /&gt;
Global.countdown &amp;amp; “ attempts left”)&lt;br /&gt;
ELSE&lt;br /&gt;
message (“Logged On”)&lt;br /&gt;
END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘frmLogon&lt;br /&gt;
‘ Gambas class file&lt;br /&gt;
PUBLIC SUB btnClose_Click()&lt;br /&gt;
ME.Close&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB Form_Open()&lt;br /&gt;
END&lt;br /&gt;
PUBLIC SUB btnLogon_Click()&lt;br /&gt;
Global.logged_on=TRUE&lt;br /&gt;
Global.countdown=Global.countdown - 1&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Когда вы запустите проект, то увидите, что все параметры установлены корректно, и они будут оставаться таковыми в процессе работы.&lt;br /&gt;
&lt;br /&gt;
=== ПовтоРное исПоЛьзовАние КоДА ===&lt;br /&gt;
одной из причин, по которым я начал заниматься программированием&lt;br /&gt;
профессионально, была обыкновенная лень. я понял, что компьютер&lt;br /&gt;
может сделать за меня кучу дел, предоставив мне просто наслаждаться&lt;br /&gt;
жизнью. но помните — никто (особенно ваш босс) не должен знать,&lt;br /&gt;
насколько все это просто.&lt;br /&gt;
&lt;br /&gt;
С кодированием происходит точно так же. Наша задача — выполнить&lt;br /&gt;
как можно больше работы, прилагая как можно меньше усилий со своей&lt;br /&gt;
стороны. З десь самое место для повторного использования кода. Под&lt;br /&gt;
повторным использованием кода я понимаю не вырезание и вставку&lt;br /&gt;
кода из одного окна в другое — я имею в виду физическое использование кода, который однажды уже был написан.&lt;br /&gt;
&lt;br /&gt;
Если вы следовали руководству предыдущего номера, у вас должен&lt;br /&gt;
быть проект доступа к базам данных (если у вас его нет — не волнуйтесь,&lt;br /&gt;
код есть на прилагаемом диске). Сейчас мы увидим, как легко можно&lt;br /&gt;
повторно использовать форму из этого проекта.&lt;br /&gt;
&lt;br /&gt;
Щелкните правой кнопкой мыши на проекте и выберите New &amp;gt;&lt;br /&gt;
Form (Создать &amp;gt; Форму). Появится окно новой формы. Кликните вкладку Existing (Существующие), затем перейдите к тому месту, где вы&lt;br /&gt;
сохранили проект базы данных. Выберите Form1.form. Мы видим, что к&lt;br /&gt;
нашему проекту была добавлена новая форма. О на еще не готова к&lt;br /&gt;
использованию, для этого нужен один из дополнительных компонентов&lt;br /&gt;
Gambas. Перейдем к окну проекта и выберем Project &amp;gt; Properties&lt;br /&gt;
(Проект &amp;gt; Свойства). Перейдем на вкладку Components (Компоненты) и&lt;br /&gt;
отметим галочкой параметр gb.db. Теперь форма готова к использованию в нашем проекте.&lt;br /&gt;
&lt;br /&gt;
Нам осталось только добавить кнопку (btnDbForm) и написать для&lt;br /&gt;
нее следующий код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC SUB btnDbForm_Click()&lt;br /&gt;
Form1.Show&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Если база данных запущена и работает, а таблицы настроены верно,&lt;br /&gt;
то вы без лишних хлопот получите полнофункциональную форму.&lt;br /&gt;
&lt;br /&gt;
=== МОДУЛЬ «НАПРОКАТ» ===&lt;br /&gt;
Такой метод повторного использования весьма удобен, но ограничен.&lt;br /&gt;
Возможность подключиться к базе данных — это великолепно, но вам&lt;br /&gt;
могут понадобиться другие Б Д, или вы не захотите использовать те формы, что были созданы прежде. Вот здесь-то модули берут свое. Точно&lt;br /&gt;
так же, как мы создавали модули для установки глобальных параметров,&lt;br /&gt;
можно создать модуль, с функциональностью базы данных.&lt;br /&gt;
&lt;br /&gt;
Очевидно, первое, что предстоит сделать — это создать новый&lt;br /&gt;
модуль. Н а этот раз назовем его Database (База данных), но не будем&lt;br /&gt;
отмечать как Startup Class (модуль Global по-прежнему останется таковым). Х отя я и писал, что повторное использование кода — это не просто&lt;br /&gt;
вырезание и вставка из одного окна в другое, сейчас мы сделаем именно это. Но только однажды. Обещаю. Мы хотим взять от формы БД всю&lt;br /&gt;
функциональность, оставив черты, присущие этой, отдельно взятой, форме. Когда мы закончим, модуль Б Д будет выглядеть примерно так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas module file&lt;br /&gt;
PUBLIC conn AS NEW Connection&lt;br /&gt;
PRIVATE connected AS Boolean&lt;br /&gt;
PUBLIC FUNCTION make_connection() AS Boolean&lt;br /&gt;
IF (connected = FALSE) THEN&lt;br /&gt;
WITH conn&lt;br /&gt;
.Type = “mysql”&lt;br /&gt;
.Host = “localhost”&lt;br /&gt;
.Login = “bainm”&lt;br /&gt;
.Password = “mypassword”&lt;br /&gt;
.Name = “customers”&lt;br /&gt;
END WITH&lt;br /&gt;
TRY conn.Open&lt;br /&gt;
IF ERROR THEN&lt;br /&gt;
Message (“Cannot Open Database. Error = “ &amp;amp; Error.Text)&lt;br /&gt;
RETURN FALSE&lt;br /&gt;
END IF&lt;br /&gt;
connected=TRUE&lt;br /&gt;
END IF&lt;br /&gt;
RETURN connected&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вы, наверное, заметили переменную connected, добавленную&lt;br /&gt;
мною в код. Это сделано для того, чтобы не было попыток подключиться к базе данных, если подключение уже существует.&lt;br /&gt;
&lt;br /&gt;
Теперь этот модуль доступен для всех создаваемых вами проектов.&lt;br /&gt;
Просто добавьте его к проекту таким же образом, каким вы добавляли&lt;br /&gt;
существующие формы (не забудьте отметить компонент gb.db.)&lt;br /&gt;
&lt;br /&gt;
=== РАБОТА С КЛАССАМИ ===&lt;br /&gt;
Стойте, не уходите!. Не спешите — все не так заумно, как кажется. В действительности, не замечая этого, вы уже работали с классами в Gambas,&lt;br /&gt;
только назывались они формами.&lt;br /&gt;
&lt;br /&gt;
Давайте начнем с простого примера. Во-первых, создайте новый&lt;br /&gt;
проект, чтобы иметь перед собой чистое рабочее место. Щелкните правой кнопкой мыши в окне проекта и выберите New &amp;gt; Class (Создать &amp;gt;&lt;br /&gt;
Класс). Н азовите ваш новый класс Person (Лицо) (понимаете, к чему мы&lt;br /&gt;
клоним?). Этому классу необходимы несколько ключевых элементов.&lt;br /&gt;
Прежде всего, необходимо описать все переменные:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas class file&lt;br /&gt;
PUBLIC firstname AS String&lt;br /&gt;
PUBLIC surname AS String&lt;br /&gt;
PUBLIC salary AS Float&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Здесь есть одна существенная подпрограмма, _new. О на нужна для&lt;br /&gt;
инициализации всех переменных, которые относятся к классу:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC SUB _new (OPTIONAL ifirstname AS&lt;br /&gt;
String,OPTIONAL isurname AS String,OPTIONAL isalary AS&lt;br /&gt;
Float)&lt;br /&gt;
firstname=ifirstname&lt;br /&gt;
surname=isurname&lt;br /&gt;
salary=isalary&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В итоге, все функции и подпрограммы, относящиеся к классу,&lt;br /&gt;
должны быть определены. Помните, что их нужно определять как&lt;br /&gt;
PUBLIC, чтобы дать возможность внешним источникам (таким, как формы) обращаться к ним.&lt;br /&gt;
&lt;br /&gt;
В этом случае, мы разработаем некий налоговый диапазон:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC FUNCTION tax() AS Float&lt;br /&gt;
tsalary AS Float&lt;br /&gt;
ttax AS Float&lt;br /&gt;
tsalary = salary&lt;br /&gt;
ttax = 0&lt;br /&gt;
‘High band&lt;br /&gt;
IF (tsalary &amp;gt; 32400) THEN&lt;br /&gt;
ttax=(tsalary-32400)*40/100&lt;br /&gt;
tsalary = 32400&lt;br /&gt;
END IF&lt;br /&gt;
‘Middle band&lt;br /&gt;
IF (tsalary &amp;gt; 2090) THEN&lt;br /&gt;
ttax=ttax + (tsalary-2090)*22/100&lt;br /&gt;
tsalary=2090&lt;br /&gt;
END IF&lt;br /&gt;
‘Lower band&lt;br /&gt;
ttax=ttax + tsalary*10/100&lt;br /&gt;
RETURN ttax&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь класс можно использовать в приложении. Просто создайте&lt;br /&gt;
форму, добавьте на нее заготовку таблицу (gridbox), назовите grdSalary,&lt;br /&gt;
затем отредактируйте ее для придания нужной функциональности.&lt;br /&gt;
&lt;br /&gt;
Первое, что нужно сделать, это описать переменные, которые будут&lt;br /&gt;
относиться к экземплярам класса Person:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas class file&lt;br /&gt;
p1 AS Person&lt;br /&gt;
p2 AS Person&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
затем используем подпрограмму Form_Open для создания объектов (p1 и p2). Это можно сделать двумя различными способами. Первый&lt;br /&gt;
вариант — передать параметры через оператор NEW; другой — создать&lt;br /&gt;
объект, затем присвоить значения его поляем:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC SUB Form_Open()&lt;br /&gt;
p1 = NEW Person(“Jane”,”Jones”,35000)&lt;br /&gt;
p2 = NEW Person&lt;br /&gt;
WITH p2&lt;br /&gt;
.firstname=”Fred”&lt;br /&gt;
.surname=”Smith”&lt;br /&gt;
.salary=23000&lt;br /&gt;
END WITH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
остаток подпрограммы состоит из заполнения таблицы (grdSalary)&lt;br /&gt;
конкретными значениями для каждого объекта:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
grdSalary.Columns.Count = 3&lt;br /&gt;
grdSalary.Rows.Count = 3&lt;br /&gt;
grdSalary.Current.Text = “First Name”&lt;br /&gt;
grdsalary.column = 1&lt;br /&gt;
grdSalary.Current.Text = “Surname”&lt;br /&gt;
grdsalary.column = 2&lt;br /&gt;
grdSalary.Current.Text = “Tax”&lt;br /&gt;
grdsalary.row =1&lt;br /&gt;
grdsalary.column = 0&lt;br /&gt;
grdSalary.Current.Text=p1.firstname&lt;br /&gt;
grdsalary.column = 1&lt;br /&gt;
grdSalary.Current.Text=p1.surname&lt;br /&gt;
grdsalary.column = 2&lt;br /&gt;
grdSalary.Current.Text=p1.tax()&lt;br /&gt;
grdsalary.row =2&lt;br /&gt;
grdsalary.column = 0&lt;br /&gt;
grdSalary.Current.Text=p2.firstname&lt;br /&gt;
grdsalary.column = 1&lt;br /&gt;
grdSalary.Current.Text=p2.surname&lt;br /&gt;
grdsalary.column = 2&lt;br /&gt;
grdSalary.Current.Text=p2.tax()&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Да, конечно — не забудьте добавить обязательную кнопку выхода:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
PUBLIC SUB btnClose_Click()&lt;br /&gt;
ME.Close&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
работа с классами оказалась совсем несложной, не так ли? Вы&lt;br /&gt;
согласны с этим? Тогда ничто не мешает пользоваться ими. Это намного&lt;br /&gt;
облегчит вашу работу по кодированию.&lt;br /&gt;
&lt;br /&gt;
=== ЛюбАя бАзА, в ЛюбоМ Месте ===&lt;br /&gt;
Взгляните на следующий, думаю, даже более полезный пример. Мы&lt;br /&gt;
разработали модуль для простого подключения к базе данных. однако,&lt;br /&gt;
мы, очевидно, предполагаем, что можем сделать только одно подключение. А что если нам необходимо подключиться более чем к одной&lt;br /&gt;
базе данных? здесь-то и проявит себя наша техника. Мы можем поступить еще более разумно, чем использовать модуль. Мы можем создать&lt;br /&gt;
класс и использовать экземпляры класса для каждой базы данных.&lt;br /&gt;
Конечно же, при этом нужно стремиться к тому, чтобы писать как можно меньше излишнего кода.&lt;br /&gt;
&lt;br /&gt;
откройте новый проект и добавьте только что созданный модуль&lt;br /&gt;
данных. затем, добавьте новый класс, назвав его dbConnection:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
‘ Gambas class file&lt;br /&gt;
PUBLIC conn AS NEW Connection&lt;br /&gt;
PUBLIC connected AS Boolean&lt;br /&gt;
PUBLIC SUB _new ( OPTIONAL mtype AS String =&lt;br /&gt;
“mysql”,OPTIONAL mhost AS String = “localhost”,OPTIONAL&lt;br /&gt;
mdb AS String = “customers”,OPTIONAL m_id AS String =&lt;br /&gt;
“bainm”,OPTIONAL mpwd AS String = “mypassword”)&lt;br /&gt;
IF (connected = FALSE) THEN&lt;br /&gt;
WITH conn&lt;br /&gt;
.Type = mtype&lt;br /&gt;
.Host = mhost&lt;br /&gt;
.Login = m_id&lt;br /&gt;
.Password = mpwd&lt;br /&gt;
.Name = mdb&lt;br /&gt;
END WITH&lt;br /&gt;
TRY conn.Open&lt;br /&gt;
IF ERROR THEN&lt;br /&gt;
Message (“Cannot Open Database. Error = “ &amp;amp; Error.Text)&lt;br /&gt;
END IF&lt;br /&gt;
connected=TRUE&lt;br /&gt;
END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь вы можете подключиться к любой базе данных:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;vb&amp;quot;&amp;gt;&lt;br /&gt;
mydb AS dbConnection&lt;br /&gt;
mydb2 AS dbConnection&lt;br /&gt;
PUBLIC SUB Form_Open()&lt;br /&gt;
mydb = NEW dbConnection&lt;br /&gt;
mydb2 = NEW dbConnection(“postgresql”,”http://www.myhost.com”,”maindb”)&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Это был краткий рассказ о переменных, модулях и классах. однако,&lt;br /&gt;
надеюсь, он был достаточно полон, чтобы понять, насколько они могут&lt;br /&gt;
быть полезны. Просто помните золотое правило программиста — быть&lt;br /&gt;
ленивым выгодно.&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>