"Fossies" - the Fresh Open Source Software Archive

Member "gambas-3.16.3/app/src/gambas3/tips/tips.ru.txt" (7 Sep 2021, 25276 Bytes) of package /linux/misc/gambas-3.16.3.tar.bz2:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 [WELCOME]
    2 
    3 <h3>Добро пожаловать в <b>Gambas</b>!</h3>
    4 
    5 <p><b>Gambas</b> - это графическая среда разработки,
    6 основанная на продвинутом интерпретаторе <i>Basic</i>.</p>
    7 
    8 <p>Цель <b>Gambas</b> - дать вам возможность легко и
    9 быстро создавать мощные программы. Но чистые
   10 программы остаются на <i>вашей</i> ответственности...</p>
   11 
   12 <p>Наслаждайтесь!</p>
   13 
   14 <p align="right">Beno&icirc;t Minisini<br><u>g4mba5@gmail.com</u><br><br><br></p>
   15 
   16 
   17 [STARTUP]
   18 
   19 <h3>Класс запуска</h3>
   20 
   21 <p>Каждый проект должен иметь <i>класс запуска</i>. Этот класс
   22 запуска должен определять статический открытый метод
   23 с именем <tt><b>Main</b></tt> без аргументов, который будет действовать
   24 как метод запуска вашей программы.</p>
   25 
   26 <p>Вы можете определить класс запуска, щёлкнув по
   27 нему правой кнопкой мыши в дереве проекта и
   28 выбрав <u>класс запуска</u> во всплывающем меню.</p>
   29 
   30 <p>Нет необходимости определять метод <tt>Main</tt> в форме
   31 запуска, поскольку он уже имеет предопределённый метод.</p>
   32 
   33 <p>Этот предопределённый метод запуска создаёт экземпляр формы и показывает её как в
   34 <i>Visual Basic&trade;</i>.</p>
   35 
   36 
   37 [OPEN]
   38 
   39 <h3>Открыть</h3>
   40 
   41 <p>Инструкция <b>Open</b> в <b>Gambas</b> не работает
   42 как в <i>Visual Basic&trade;</i>. Она не возвращает файл как целое число,
   43 а как объект <b>File</b>.</p>
   44 
   45 <p>Итак, вместо того, чтобы написать:</p>
   46 
   47 <pre>Dim handle As Integer
   48 ...
   49 Open "myfile" For Read As #handle</pre>
   50 
   51 <p>Вы должны написать:</p>
   52 
   53 <pre>Dim handle As File
   54 ...
   55 handle = Open "myfile" For Read</pre>
   56 
   57 
   58 [CATDIR]
   59 
   60 <h3>Конкатенация путей</h3>
   61 
   62 <p>Знаете ли вы, что вы можете объединить имена директорий
   63 и файлов с помощью оператора <b><tt>&amp;/</tt></b>? Этот
   64 оператор имеет дело с косыми чертами, так что получающийся
   65 путь идеален.</p>
   66 
   67 <p>Например:</p>
   68 
   69 <pre>Print "/home/gambas" &amp;/ ".bashrc"
   70 &rarr; /home/gambas/.bashrc
   71 
   72 Print "/home/gambas/" &amp;/ "/tmp" &amp;/ "foo.bar"
   73 &rarr; /home/gambas/tmp/foo.bar</pre>
   74 
   75 <p>Разве это не чудесно?</p>
   76 
   77 
   78 [EXEC]
   79 
   80 <h3>Исполняемый файл</h3>
   81 
   82 <p>Вы можете создать исполняемый файл из всего вашего проекта.
   83 Выберите <u>Создать исполняемый файл</u> в меню <u>Проект</u>.</p>
   84 
   85 <p>Когда <b>Gambas</b> создаёт исполняемый файл, он по
   86 умолчанию помещает результат в директорию вашего проекта.
   87 Имя исполняемого файла совпадает с именем вашего проекта.</p>
   88 
   89 
   90 [PATH]
   91 
   92 <h3>Относительные пути</h3>
   93 
   94 <p>Относительные пути имеют особое значение в <b>Gambas</b>.
   95 Они всегда ссылаются на файлы внутри ваших проектов.</p>
   96 <p>Нет понятия <i>текущей директории</i> и нет ключевого слова, такого как <tt>CHDIR</tt>, чтобы изменить её.</p>
   97 <p><b>Будьте осторожны:</b> вы должны использовать относительные пути
   98 только для доступа к файлам проекта, потому что абсолютные пути
   99 больше не будут работать, когда вы создаёте исполняемый файл.</p>
  100 
  101 
  102 [GLOBAL]
  103 
  104 <h3>Глобальные переменные</h3>
  105 
  106 В <b>Gambas</b> <b>нет глобальных переменных</b>!
  107 <p>В качестве обходного пути, поместите их в свой основной модуль
  108 и объявите их как <tt>Public</tt>.</p>
  109 <p>Если у вас нет основного модуля main в вашем проекте, но
  110 есть основная форма, то объявите их как <tt>Static Public</tt>.</p>
  111 <p>Чтобы получить доступ к этим переменным, необходимо использовать
  112 имя основного модуля main или форму: <tt>MyMainModule.MyGlobalVariable</tt>
  113 или <tt>MyMainForm.MyGlobalVariable</tt>.</p>
  114 
  115 
  116 [EMPTY]
  117 
  118 <h3>Пустые строки</h3>
  119 
  120 <p>Чтобы узнать, является ли строка пустой, нет необходимости использовать
  121 функцию <tt><b>Len()</b></tt>. Вы можете непосредственно проверить это,
  122 так как пустая строка - <tt><b>False</b></tt>, а непустая строка - <tt><b>True</b></tt>.</p>
  123 
  124 <p>Например, вместо того, чтобы делать:</p>
  125 
  126 <pre>If Len(MyString) &gt; 0 Then ...
  127 If Len(MyString) = 0 Then ...</pre>
  128 
  129 <p>Вы должны делать:</p>
  130 
  131 <pre>If MyString THEN ...
  132 If Not MyString THEN ...</pre>
  133 
  134 
  135 [TRANSLATE]
  136 
  137 <h3>Перевод</h3>
  138 
  139 <p>Приложения Gambas полностью переводимое, при условии, что вы
  140 сообщаете ему, какие строки должны быть переведены, а какие нет.</p>
  141 <p>Чтобы пометить строки как переводимые, просто заключите их в круглые скобки:</p>
  142 
  143 <pre>Print ("Translate me")
  144 Print "But do not translate me!"</pre>
  145 
  146 
  147 [SUBST]
  148 
  149 <h3>Subst$</h3>
  150 
  151 <p>Функция <b><tt>Subst$()</tt></b> очень полезна для интернационализации вашего приложения.</p>
  152 
  153 <p>Требуется как минимум два аргумента. Первый - это текстовая маска, к которой применяется подстановка.
  154 Другие являются аргументами замещения, пронумерованными от одного.</p>
  155 
  156 <p>Каждый <tt>&amp;X</tt> шаблон в строке замены будет заменён X-<sup>ым</sup> аргументом замены.
  157 Например:</p>
  158 
  159 <pre>Print Subst(("Substitution of &amp;1, &amp;2 and &amp;3"),
  160   "first", "second", "third")
  161 
  162 &rarr; Substitution of first, second and third</pre>
  163 
  164 
  165 [EVENT]
  166 
  167 <h3>Обработчики событий</h3>
  168 
  169 <p>Каждый элемент управления и каждый объект, который может вызывать
  170 события, имеет <i>наблюдателя событий</i> и <i>имя группы</i> событий.</p>
  171 
  172 <p>Наблюдатель событий перехватывает каждое событие, вызванное объектом,
  173 а имя группы событий является префиксом процедуры, вызываемой для
  174 управления событием. Эта функция называется <i>обработчиком событий</i>.</p>
  175 
  176 <p>По умолчанию этот наблюдатель событий является объектом, в котором вы
  177 создали элемент управления, а имя группы - это имя элемента управления.</p>
  178 
  179 <p>Таким образом, форма получает все события, созданные
  180 элементами управления, которые вы создали внутри.</p>
  181 
  182 <pre>' Gambas form
  183 Dim hButton As Button
  184 
  185 Public Sub _new()
  186 &nbsp;&nbsp;hButton = New Button(Me) As "MyButton"
  187 End
  188 
  189 Public Sub MyButton_Click()
  190 &nbsp;&nbsp;Print "You have clicked MyButton !"
  191 End</pre>
  192 
  193 
  194 [GROUP]
  195 
  196 <h3>Группы элементов управления</h3>
  197 
  198 <p>Каждый элемент управления имеет свойство <b>(Group)</b>. Когда это
  199 свойство установлено, префикс имени обработчика события - это
  200 имя группы, а не имя элемента управления.</p>
  201 
  202 <p>Предположим, у вас есть <b>кнопка</b> с именем <tt>btnAction</tt> со следующим обработчиком события <b>Click</b>:</p>
  203 
  204 <pre>Public SubbtnAction_Click()</pre>
  205 
  206 <p>Если вы установите свойство <b>(Group)</b> для <tt>btnAction</tt>
  207 в значение <tt>"MyGroup"</tt>, то обработчик событий, который будет
  208 получать события от кнопки, будет выглядеть следующим образом:</p>
  209 
  210 <pre>Pubic Sub MyGroup_Click()</pre>
  211 
  212 <p>Это свойство позволяет обрабатывать события различных элементов
  213 управления в одной функции. И элементы управления одной и той же
  214 группы не обязательно должны быть одного типа!</p>
  215 
  216 <p><b>Примечание:</b> Старый ветеран <b>Visual Basic&trade;</b> может
  217 распознавать концепцию <i>управляющего массива</i>, но в более мощной
  218 реализации. :-)</p>
  219 
  220 
  221 [FORM]
  222 
  223 <h3>Формы</h3>
  224 
  225 <p>В <b>Gambas</b> форма является собственным наблюдателем событий,
  226 так что вы можете напрямую управлять её событиями (такими как
  227 <b>Resize</b>, <b>Activate</b>, ...) в своём собственном коде класса.</p>
  228 
  229 <p>Таким образом, новички из <b>Visual Basic&trade;</b>
  230 не дезориентированы :-).</p>
  231 
  232 
  233 [EMBED]
  234 
  235 <h3>Встраивание форм</h3>
  236 
  237 <p>Вы можете встроить любую форму в другие формы с <b>Gambas</b>!</p>
  238 
  239 <p>Чтобы сделать такую мощную вещь, просто создайте экземпляр формы,
  240 передав родительский контейнер в качестве последнего аргумента конструктора.</p>
  241 
  242 <p>Например:</p>
  243 <pre>Dim hForm As MyDialog
  244 Dim hSuperControl As MyForm
  245 ' Создать диалог
  246 hForm = New MyDialog
  247 ' Вставьте форму в этот диалог
  248 ' Обратите внимание, что эта форма принимает два параметра перед контейнером
  249 hSuperControl = New MyForm(Param1, Param2, MyDialog)
  250 ' Переместить и изменить размер формы
  251 hSuperControl.Move(8, 8, 128, 64)</pre>
  252 
  253 <p><b>Будьте осторожны:</b> форма, встроенная в другую форму, всё ещё является формой, как и её собственный наблюдатель событий.</p>
  254 
  255 
  256 [TAG]
  257 
  258 <h3>Свойство тега</h3>
  259 
  260 <p>Каждый элемент управления имеет свойство <b>Tag</b>. Это свойство
  261 предназначено для программиста и может содержать любые данные
  262 <b>Variant</b>, которые вы считаете уместными.</p>
  263 
  264 <p>Это очень полезно, когда вы хотите различить элементы управления
  265 одной и той же группы в общем обработчике событий.</p>
  266 
  267 
  268 [LAST]
  269 
  270 <h3>Последний</h3>
  271 
  272 <p>Ключевое слово <b>Last</b> возвращает последний элемент управления,
  273 который получил событие. Это очень полезно, когда вы хотите написать
  274 обработчик событий, который не зависит от имени элемента управления.</p>
  275 
  276 <p>Например, предположим, что вы хотите написать калькулятор.
  277 Вы определили десять кнопок, по одной для каждой цифры, каждая
  278 в одной <i>группе элементов управления</i> "Digit". <b>Tag</b> каждого элемента
  279 управления устанавливается на цифру, нарисованную на кнопке.</p>
  280 
  281 <p>Ваш обработчик событий может выглядеть так:</p>
  282 
  283 <pre>Public Sub Digit_Click()
  284 
  285 &nbsp;&nbsp;Display = Display &amp; Last.Tag
  286 &nbsp;&nbsp;RefreshDisplay
  287 END</pre>
  288 
  289 
  290 [LEFT]
  291 
  292 <h3>Left$ / Mid$ / Right$</h3>
  293 
  294 <p>Хорошо известные базовые процедуры <b>Left$</b>, <b>Right$</b>
  295 и <b>Mid$</b> имеют полезное поведение в <b>Gambas</b></p>
  296 
  297 <p>Второй параметр <b>Left$</b> и <b>Right$</b> является
  298 опциональным и по умолчанию равен единице.</p>
  299 
  300 <p><tt>Left$("Gambas")</tt> возвращает <tt>"G"</tt><br><tt>Right$("Gambas")</tt> возвращает <tt>"s"</tt></p>
  301 
  302 <p>Этот второй параметр может быть отрицательным, а в таком случае
  303 указывается количество символов, которые не нужно извлекать.</p>
  304 
  305 <p><tt>Left$("Gambas", -2)</tt> возвращает <tt>"Gamb"</tt><br><tt>Right$("Gambas", -2)</tt> возвращает <tt>"mbas"</tt></p>
  306 
  307 <p>Точно так же, третий аргумент <b>Mid$</b> может быть
  308 отрицательным, а в таком случае указывается количество символов
  309 в конце строки, которые не нужно извлекать.</p>
  310 
  311 <p><tt>Mid$("Gambas", 2, -2)</tt> возвращает <tt>"amb"</tt></p>
  312 
  313 
  314 [OBSERVER]
  315 
  316 <h3>Наблюдатель</h3>
  317 
  318 <p>Класс <b>Observer</b> позволяет вам перехватывать все события,
  319 вызванные объектом, до того, как они действительно будут отправлены.</p>
  320 
  321 <pre>MyTextBox = New TextBox(Me) As "MyTextBox"
  322 MyObserver = New Observer(MyTextBox) As "MyObserver"
  323 ...
  324 Public Sub MyObserver_KeyPress()
  325   Debug "Got it first"
  326 End
  327 
  328 Public Sub MyTextBox_KeyPress()
  329   Debug "Got it next"
  330 End</pre>
  331 
  332 <p>Наблюдатель может отменить событие с помощью <tt>Stop Event</tt>, чтобы не дать объекту эффективно
  333 поднять его.</p>
  334 
  335 
  336 [STRING]
  337 
  338 <h3>Строки UTF-8</h3>
  339 
  340 <p><b>Gambas</b> использует кодировку <b>UTF-8</b> для представления строк в памяти.</p>
  341 
  342 <p>Но все стандартные строковые функции имеют дело только с <b>ASCII</b>:
  343 <tt>Left</tt>, <tt>Mid</tt>, <tt>Right</tt>, <tt>UCase</tt>...</p>
  344 
  345 <p>Если вы хотите работать со строками UTF-8, вы должны использовать методы
  346 статического класса <b>String</b>, которые имеют то же имя, что и их стандартные аналоги.</p>
  347 
  348 <pre>Print Len("bébé");; Left$("bébé", 3)
  349 &rarr; 6 bé
  350 
  351 Print String.Len("bébé");; String.Left("bébé", 3)
  352 &rarr; 4 béb</pre>
  353 
  354 
  355 [ASSIGNMENT]
  356 
  357 <h3>Присваивания</h3>
  358 
  359 <p><b>Gambas</b> реализует ярлыки присваивания, к которым привыкли программисты C/C ++.</p>
  360 
  361 <pre>MyVariable += 2
  362 MyVariable *= 4
  363 MyVariable &amp;= "Great"</pre>
  364 является эквивалентом этого:
  365 <pre>MyVariable = MyVariable + 2
  366 MyVariable = MyVariable * 4
  367 MyVariable = MyVariable &amp; "Great"</pre>
  368 
  369 <p>И так далее...</p>
  370 
  371 
  372 [DEBUG]
  373 
  374 <h3>Отладка</h3>
  375 
  376 <p>Вы можете использовать инструкцию <b><tt>Debug</tt></b> для вывода
  377 сообщений отладки в консоль (то есть стандартный вывод ошибок). Она
  378 ведёт себя так же, как инструкция <tt>Print</tt>.</p>
  379 
  380 <p>Эти сообщения имеют префикс имени класса, имени метода и номера строки
  381 инструкции <tt>Debug</tt>. Если вам не нужен этот префикс, вы можете
  382 использовать инструкцию <b><tt>Error</tt></b>
  383 вместо <tt>Debug</tt>.</p>
  384 
  385 <p>Сообщения отладки автоматически удаляются при создании исполняемого файла
  386 без отладочной информации.</p>
  387 
  388 
  389 [TRY]
  390 
  391 <h3>Управление ошибками (1)</h3>
  392 
  393 <p>Управление ошибками в <b>Gambas</b> осуществляется с помощью следующих инструкций:
  394 <b><tt>Try</tt></b>, <b><tt>Error</tt></b>, <tt>Catch</tt> и <tt>Finally</tt>.</p>
  395 
  396 <p><tt>Try</tt> пытается выполнить инструкцию, не вызывая ошибки. Ключевое слово <tt>Error</tt>
  397 используется только для того, чтобы узнать, правильно ли был выполнен оператор.</p>
  398 
  399 <pre>Try MyFile = Open "/etc/password" For Write
  400 If Error Then Print "I cannot do what I want!"</pre>
  401 
  402 
  403 [CATCH]
  404 
  405 <h3>Управление ошибками (2)</h3>
  406 
  407 <p>Управление ошибками в <b>Gambas</b> осуществляется с помощью следующих инструкций:
  408 <tt>Try</tt>, <tt>Error</tt>, <b><tt>Catch</tt></b> и <tt>Finally</tt>.</p>
  409 
  410 <p><tt>Catch</tt> указывает начало части управления ошибками функции или процедуры.
  411 Он ставится в конце кода функции.</p>
  412 
  413 <p>Часть catch выполняется при возникновении ошибки между началом
  414 выполнения функции
  415 и её концом.</p>
  416 
  417 <p>Если возникает ошибка во время выполнения части catch, она нормально распространяется.</p>
  418 
  419 <pre>Sub ProcessFile(FileName As String)
  420   ...
  421   Open FileName For Read As #hFile
  422   ...
  423   Close #hFile
  424   
  425 Catch ' Выполняется только в случае ошибки
  426 
  427   Print "Cannot process file "; FileName
  428 
  429 End</pre>
  430 
  431 
  432 [FINALLY]
  433 
  434 <h3>Управление ошибками (3)</h3>
  435 
  436 <p>Управление ошибками в <b>Gambas</b> осуществляется с помощью следующих инструкций:
  437 <tt>Try</tt>, <tt>Error</tt>, <tt>Catch</tt> и <b><tt>Finally</tt></b>.</p>
  438 
  439 <p><tt>Finally</tt> представляет код, выполняемый в конце функции, даже если
  440 во время её выполнения
  441 возникла ошибка.</p>
  442 
  443 <p>Часть finally не является обязательной. Если в функции есть часть catch, то часть finally должна предшествовать ей.</p>
  444  
  445 <p>Если возникает ошибка во время выполнения части finally, она нормально распространяется.</p>
  446 
  447 <pre>Sub ProcessFile(FileName As String)
  448   ...
  449   Open FileName For Read As #hFile
  450   ...
  451 Finally ' Всегда выполняется, даже если возникла ошибка
  452 
  453   Close #hFile
  454   
  455 Catch ' Выполняется только в случае ошибки
  456   
  457   Print "Cannot print file "; FileName
  458   
  459 End</pre>
  460 
  461 
  462 [OPTIONAL]
  463 
  464 <h3>Опциональный</h3>
  465 
  466 <p>Функции и процедуры в <b>Gambas</b> могут иметь опциональные аргументы.</p>
  467 
  468 <p>Опциональные аргументы можно сделать, просто указав ключевое слово
  469 <b><tt>Optional</tt></b> непосредственно перед именем аргумента.</p>
  470 
  471 <p>Опциональные аргументы также могут иметь явное значение по умолчанию.</p>
  472 
  473 <pre>Private Sub MyFunction(Param AS String, Optional Optim AS String = "Default")
  474   ...
  475   Print "Required: "; param; ", Optional: "; optim
  476   ...
  477 End</pre>
  478 
  479 
  480 [ARRAY]
  481 
  482 <h3>For Each</h3>
  483 
  484 <p>В <b>Gambas</b> вы можете легко проходить через массив, коллекцию или
  485 множество других перечисляемых классов с помощью инструкции <b><tt>For Each</tt></b>.</p>
  486 
  487 <p>Например:</p>
  488 
  489 <pre>Dim Xml As New XmlDocument
  490 Dim Node As XmlNode
  491 Dim I As Integer
  492 
  493 ' Открыть файл XML
  494 Xml.Open("pokus.xml")
  495 ' Потомки индексируются через [i], так как это массив
  496 For I = 0 To Xml.Root.Children.Count - 1
  497   'Атрибуты зацикливаются через For Each, так как это коллекция
  498   For Each Node In Xml.Root.Children[i].Attributes
  499     Print Node.Name;; Node.Value
  500   Next
  501 Next</pre>
  502 
  503 
  504 [ICON]
  505 
  506 <h3>Значки по умолчанию</h3>
  507 
  508 <p>Вы можете использовать встроенные значки для более приятного графического
  509 интерфейса вашего приложения, которые доступны в нескольких предопределённых
  510 размерах (<tt>«маленький/small»</tt>, <tt>«средний/medium»</tt>, <tt>«большой/large»</tt>, ...) или абсолютных размерах (от 16x16 до 256x256).</p>
  511 
  512 <p>Например:</p>
  513 
  514 <pre>Image1.Picture = Picture["icon:/32/warning"]
  515 Image2.Picture = Picture["icon:/small/error"]</pre>
  516 
  517 <p><b>Предупреждение:</b> требуется компонент <tt>gb.form</tt>.</p>
  518 
  519 
  520 [SETTINGS]
  521 
  522 <h3>Параметры</h3>
  523 
  524 <p>Если вам нужно сохранить конфигурацию вашей программы (например, геометрию
  525 ваших форм), то вы счастливчик. Это очень легко и элегантно в <b>Gambas</b>. :-)</p>
  526 
  527 <p>Чтобы сохранить положение формы:</p>
  528 <pre>Settings.Write(TheForm)</pre>
  529 
  530 <p>Для того, чтобы вспомнить:</p>
  531 <pre>Settings.Read(TheForm)</pre>
  532 
  533 Чтобы сохранить любые настройки:
  534 <pre>Settings["Slot/Key"] = Value</pre>
  535 
  536 И прочитать настройки обратно:
  537 <pre>Value = Settings["Slot/Key", DefaultValue]</pre>
  538 
  539 Эти настройки хранятся в файле <tt>~/.config/gambas3/&lt;MyApplication&gt;.conf</tt>,
  540 где <tt>&lt;MyApplication&gt;</tt> -  это название вашего проекта.
  541 
  542 <p><b>Предупреждение:</b> требуется компонент <tt>gb.settings</tt>.</p>
  543 
  544 
  545 [EDITOR]
  546 
  547 <p>Вот несколько советов по редактору...</p>
  548 
  549 <h3>Два типа комментариев</h3>
  550 
  551 <pre>' Нормальный комментарий</pre>
  552 <b><pre>'' Жирный комментарий</pre></b>
  553 
  554 <p>Жирные комментарии используются для документирования вашего кода.</p>
  555 
  556 <h3>Как использовать фрагменты кода</h3>
  557 
  558 <p>Давайте напечатаем <tt>main</tt>, затем нажмём клавишу <b>TAB</b>. Статическая
  559 публичная функция запуска <tt>Main</tt> автоматически вставляется в ваш код.</p>
  560 
  561 <p>Давайте напечатаем <tt>ds</tt>, затем нажмём клавишу <b>TAB</b>. Объявление
  562 локальной строковой переменной вставляется автоматически, и вы можете сразу же ввести имя переменной.</p>
  563 
  564 <p>Фрагменты кода полностью настраиваются в диалоговом окне «Предпочтения» меню «Инструменты» среды IDE.</p>
  565 
  566 
  567 [END]
  568 
  569 <h3>Это всё, друзья!</h3>
  570 
  571 <p>Вы прочитали все полезные советы. Я надеюсь, что теперь вы
  572 стали экспертом <b>Gambas</b>! :-)</p>
  573 
  574 <p>Если вы хотите внести свой вклад, отправьте новые советы по следующему
  575 адресу:</p>
  576 <p><u>user@lists.gambas-basic.org</u></p>
  577 
  578 <p>Заранее спасибо!</p>