Полезности с брошенного сайта (часть 3)
Данный материал был опубликован на другом сайте, но сайт долгое время не развивался и в конце-концов был брошен и закрыт. Выборочно информацию из той которая на данный момент еще доступна в архиве, я решил выложить здесь, польза я думаю будет. Я умышленно старался не менять пояснения операторов, оставляя авторскую мысль. Хотя были те, которые попали под редактирование по разным причинам.
Команды, небольшие пояснения к ним и примеры:
RUN
В отличие от старых версий всеми давно известных бейсиков, в которых оператор RUN применялся для того , что бы запустить саму программу написанную на бейсике, в freebasic применение команды RUN немного другое. Но принцип тот же. Вы можете написать в вашей программа команду RUN для того что бы запустить любую другую, которая есть у вас на компьютере, будь-то Internet Exploer , или какая другая программа. Запускать нужно название этой программы с расширением exe.
Формат оператора RUN:
RUN "название программы.exe"
В "название программы.ехе" пишем полный путь с указание папки, где находится
эта программа. Например:
C:\Program Files\Internet Explorer\IEXPLORE.EXE
Screen 13 Print "dlya zapuska Internet Explorera nazhmite lubuy klavishu " Sleep Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Запускаем программу, выводится надпись 'нажмите любую клавишу для запуска
интернет эксплорера'. Нажимаем, ждём пока программа запустится, и IE
запускается, а наша программа останавливается...
SLEEP
Бывает, иногда, что в программе для того чтобы её отладить, или ещё для чего
либо нужно сделать паузу. Что для этого предоставляет freebasic ? Для этого есть
оператор SLEEP. Формат оператора паузы: SLEEP время в миллисекундах. Вобщем
понятно, что если нам нужно осуществить в программе паузу в течении 1000
миллисекунд , мы пишем: SLEEP 1000.
Если по какой то причине, мы забыли
написать время в операторе SLEEP, то программа остановиться и будет ждать
нажатия любой клавиши. После нажатия любой клавиши, программа будет продолжаться
далее, т.е. всё то,что идёт после оператора SLEEP.
Screen 14 Locate 10,10 Print "nazhmite lubyu klavishu" Sleep Cls Locate 10,10 Print "spasibo !" Sleep 5000
POKE
Записывает нужные данные в ячейки памяти. Наглядный пример записи в память описан в английской версии справочника freebasic'a. С помощью оператора POKE мы записываем байт в область памяти экрана. Формат оператора: POKE адресс,байт
Screen 13 Dim framebuffer As Byte Ptr framebuffer = Screenptr 'находим адресс текущей страницы Screenlock 'запирает текущую страницу Poke framebuffer + (100 * 320) + 160, 15 'рисуем точку Poke framebuffer + (100 * 320) + 170, 15 'рисуем точку Screenunlock 'отпирает текущую страницу Sleep
PEEK
Для чтения из ячеек памяти применяется оператор PEEK.
Screen 13 'режим экрана Dim x As Integer, addr As Integer ' объявляем про переменные addr = Varptr(x) ' находим адрес памяти переменной x = 5 ' присваем переменной х значение 5 Locate 10,10 ' координаты курсора Print Peek( Integer, addr ) ' читаем из памяти значение Sleep 'ожидаем нажатие клавиши
В результате, выводится значение переменной x, считывая её из памяти с
помощью PEEK
RND
Оператор RND генерирует случайные числа от 0 до 1. С первого взгляда , ну сколько можно сгенерить чисел от 0 до 1? Две? Нет это не так. А как же десятые, сотые, тысячные? Можно получить любое число, умножив случайное число от 0 до 1 на 10,100,1000 и т.д. Для нормальной работы оператора RND нужно 'сбрасывать' генератор случайных чисел с помощью оператора RANDOMIZE, записав его перед оператором RND
Формат оператора RND:
Имя переменной=RND(1), где имя переменной - типа INTEGER или DOUBLE
Пример программы с RND :
Screen 13 Dim x As Integer,y As Integer, i As Integer Randomize For i=1 To 150 x=Int(Rnd(1)*280):y=Int(Rnd(1)*180) Line(x,y)-(x+10,y),i:Line -(x+15,y-10),i Line -(x+20,y),i:Line -(x+30,y),i Line -(x+20,y+5),i:Line -(x+30,y+15),i Line -(x+15,y+9),i:Line -(x,y+15),i Line -(x+10,y+5),i:Line -(x,y),i Paint(x+10,y+10),i,i Next i Sleep
В результате работы оператора RND, на экран выводятся звёздочки со
случайными координатами.
REM
Для того, что бы в программе сделать примечание, можно использовать оператор REM. После этого оператора можно писать любое примечание в этой строке. Так же для примечания в программе можно использовать значок ', после которого можно писать примечание. Например:
Rem БЛА БЛА БЛА ' БЛА БЛА БЛА '''''''''''' БЛА БЛА БЛА '''''''''''''
GETMOUSE
Для контроля за состоянием мышки, её положение, контроль кнопок, колёсика, в freebasic применяется оператор GETMOUSE. Формат оператора GETMOUSE:
GETMOUSE координата x, координата y,, кнопки buttons
переменные x, y, кнопки buttons , должны быть типа INTEGER
Пример:
Dim x As Integer, y As Integer, buttons As Integer Screen 13 Do Cls Getmouse x, y,, buttons If x < 0 Then Print "Myshka vne okna" Else Print Using "Poziciya myshki: ###:### Buttons: "; x; y; If buttons And 1 Then Print "Levaya"; If buttons And 2 Then Print "Pravaya"; If buttons And 4 Then Print "Kolesiko"; Print " " End If Loop While InKey$ = "" End
Так же мышку можно контролировать по другому:
#INCLUDE "fbgfx.bi" 'включить fbgfx.bi Using FB 'использовать freebasic Dim e As EVENT 'переменная e как событие Screen 13 Do If (Screenevent(@e)) Then If e.type=EVENT_MOUSE_MOVE Then Cls:Locate 10,10 Print e.x,e.y ' координаты x,y Endif If e.type=EVENT_MOUSE_DOUBLE_CLICK Then End 'если двойное нажатие - ВЫХОД Endif End If Loop
Программа контролирует с помощью SCREENEVENT состояние мышки, если
переменная e.type принимает значение EVENT_MOUSE_CLICK, то значит изменились
координаты мышки e.x и e.y. А если переменная e.type принимает значение
EVENT_MOUSE_DOUBLE_CLICK, значит пользователь сделал двойное нажатие кнопки
мышки.
GETKEY
Если нужно определить в freebasic , какая клавиша была нажата пользователем, можно воспользоваться оператором GETKEY , который возвращает код последней нажатой клавиши(только английская раскладка):
Пример:
Dim a As Integer Screen 13 Print "press ESC to end" Do a=getkey Print a Loop Until a=27
Всё очень просто. Объявляем переменную а типа INTEGER, и вылавливаем
нажатие клавиши с помощью GETKEY. Для того , что бы выйти из программы,
используем контроль кода asc клавиши ESC. При нажатии ESC выход из цикла DO-LOOP
.
LEN
Если Вы хотите определить, например, длину строки "Hello world!", Вы можете для этого написать : PRINT LEN("Hello world!"). И в результате оператор LEN посчитает и выдаст число 12. Тем самым определив количество символов в строке (вместе с пробелом и восклицательным знаком). Это если ваша строка или переменная типа STRING, если другой тип , то оператор LEN выдаст число байтов переменной.
Например:
Print Len("hello world") ' вернёт число "11" Print Len(Integer) ' вернёт число 4, имея ввиду 4 байта Type xyz 'объявим тип переменной a As Integer b As Integer End Type ' конец объявления типа Print Len(xyz) ' вернёт 8 байт - длина переменной Sleep
INT
Оператор INT возвращает целое число, округляя. Формат оператора очень прост и не нуждается в особом описании. Если вы хотите найти целое число, допустим числа 4.9, и напишите INT (4.9) , то freebasic вам после обработки оператором INT вернёт вам число 5.0. А если Вы хотите найти целое число от -1.3 , то freebasic вам вернёт после обработки INT число -1.0. Вобщем и так всё понятно . Как это выглядит в программе? Вот так:
Dim a As Integer Input a a=Int(a) Print a Sleep
В результате, какое бы число не вводил пользователь, программа с помощью
INT преобразует его в целое. Иногда полезная вещь...
OPEN
Если нужно открыть файл, используем оператор OPEN. Для записи в файл используем оператор PUT. Например:
Dim buffer As String Dim f As Integer buffer = "Hello World vmeste s etim failom!" ' Найти первый свободный файл. f = Freefile ' свободный файл ' Откроем файл "file.ext" для двоичного использования, 'используя указатель переменной "f" Open "file.ext" For Binary As #f ' Разместим нашу строку в файл, 'используя указатель переменной "f". Put #f, , buffer ' Закрываем файл Close '(Выясните характер файла "file.ext" , 'чтобы увидеть его содержимое. 'Или переименуйте в txt и просмотрите ) End 'конец программы
В результате, мы запишем в file.ext фразу "Hello World vmeste s etim
failom!". Если такого файла нет, он создатся автоматически. Чтоб просмотреть
этот созданный файл, переименуйте его в txt и просмотрите в любом текстовом
редакторе.
Так же с помощью команды OPEN можно открыть серийный порт
компьютера, позволяя послать или получить данные, используя команды файлов:
PRINT#, INPUT#,GET# и.т.д.
'OPEN A COM PORT Open Com "COM1:9600,N,8,1" As #1 'COM1, 9600 BAUD, NO PARITY BIT, EIGHT DATA BITS, ONE STOP Bit
где 9600 boud - скорость в бодах, NO PARITY BIT - нет четн. бит, EIGHT
DATA BITS - восемь разрядов данных, ONE STOP BIT - один бит остановки.
READ - DATA
Оператор READ прост до безумия. Что бы он нормально работал, нужен оператор DATA, в котором через запятую указываем данные. При чтении оператором READ из DATA нужно что бы тип переменной совпадал. Т.е если переменная типа INTEGER, то так и объявляем об этом с помощью DIM. Если переменная типа STRING, то тоже об этом не молчим. Иначе возникнет ошибка.
Вот пример использования операторов READ и DATA :
Screen 13 ' Создадим массив из 5 (h(4)) целых, 'и одно (hs) строковое значение Dim h(4) As Integer Dim hs As String Dim Read_Data As Integer ' объявим переменную массива ' Будем читать 5 раз For Read_Data = 0 To 4 ' Читаем целые числа Read h(Read_Data) ' Печатаем это на экран Print "Nomer"; Read_Data;" = "; h(Read_Data) Next ' Пустая строка Print ' Читаем строковые данные Read hs ' Печатаем это Print "Sstrokovaya = " + hs ' Ожидаем нажатие Sleep ' Выход из программы End ' Блок с датой Data 6, 469, 8345, 46866, 954566, "Do svidanya!"
DRAW
Рисование ломанных линий и не только. С помощью DRAW можно: рисовать, масштабировать, поварачивать, менять цвет... Это лучше увидеть в программе с подробным описанием действий оператора DRAW :
Screen 13 Draw "C7" ' ЦВЕТ БЕЛЫЙ Draw "F50" ' РИСУЕМ ВПРАВО - ВНИЗ Draw "L5" ' ВЛЕВО НА 5 ЕДИНИЦ Draw "H10" ' ВЛЕВО-ВВЕРХ НА 10 ЕДИНИЦ Draw "R30" ' ВПРАВО НА 30 ЕДИНИЦ Draw "D15" ' ВНИЗ НА 15 ЕДИНИЦ Draw "G20" ' ВЛЕВО-ВНИЗ НА 20 ЕДИНИЦ 'РИСУЕМ ОТ НАШЕЙ ТОЧКИ +30,40 ЕДИНИЦ, 'ЕСЛИ '-' ТО ВЫЧИТАЕМ,ЕСЛИ 'НЕТ ЗНАКА '+' ИЛИ '-', 'ТО ПРОСТО ПЕРЕМЕЩАЕМ В НУЖНУЮ ТОЧКУ: Draw "M+30,40" Draw "E15" ' ВПРАВО-ВВЕРХ НА 15 ЕДИНИЦ Draw "U30" ' ВВЕРХ НА 30 ЕДИНИЦ '--ТЕПЕРЬ ВСЁ ТОЖЕ , НО В ОДНОЙ СТРОКЕ -- ' УМЕНЬШИЛИ МАСШТАБ РИСУНКА НА 2 ("S2") Draw "S2 C3 F50 L5 H10 R30 D15 G20 M+30,40 E15 U 30 " Draw "B R30" ' ПЕРЕМЕСТИЛИ ВПРАВО НА 30, НО НЕ РИСОВАЛИ("B") 'ВЕРНУЛИ МАСШТАБ("S4"), 'РАЗВЕРНУЛИ ВЕСЬ ОБЪЕКТ НА 45 ГРАДУСОВ ("A45"): Draw "S4 A45 C5 F50 L5 H10 R30 D15 G20 M+30,40 E15 U 30 " ' ПОВОРОТ 45 ГРАДУСОВ (TA45) Draw "TA45 C1 F50 L5 H10 R30 D15 G20 M+30,40 E15 U 30 " Sleep
TIME
Функция TIME возвращает текущее системное время в Вашем компьютере в формате чч:мм:сс.
Вот, пример использования функции TIME:
Screen 13 Locate 10,10 Print "VREMYA:";Time Sleep
А с помощью оператора SETTIME можно установить текущее время, например
написав SETTIME "08:00:20", мы установим 8 часов, 20 секунд на компьютере.
TRIM
С помощью "ТРИМА" можно вырезать любую часть строки. Посмотрите как легко справляется оператор TRIM с нашей строчкой:
Screen 13 Dim t As String t = "BaaBaaaaB Privet! aaBBaaBaa" Print Trim(t, "Baa") ' вырезаем только "Ваа" Print Trim(t, Any "Ba") ' вырезаем любую из букв В или а Sleep
ASC
Чтобы определить код ASCII символа, необходима команда ASC. Например, если мы хотим определить код ASCII буквы А, то мы пишем ASC ("A"), а если у нас слово из нескольких букв, то необходимо указать код какой именно буквы нам нужен. Например в слове "MIR" , нам нужно определить код буквы I. Мы пишем: ASC ("MIR",2). В результате мы определим код ASCII буквы I, который равен 73.
Как это выглядит в freebasic? Вот так:
Screen 13 Print Asc("MIR",2) Sleep
Или можно это сделать так:
Screen 13 Print Asc("I") Sleep
CHR
CHR - возвращает символ кода ASCII. Очень простое действие, иногда незаменимое, и очень простое использование в freeebasic. Достаточно всего лишь написать: print chr(97) и freeebasic напечатает вам символ, которому принадлежит код ASCII = 97 , а это символ - буква 'а'. Вот пример программы с использованием CHR и результатом:
Screen 13 Locate 10,10 Print Chr(97),' 97 - это код ASCII буквы 'a' Print Chr(67,73,78) ' 67,73,78 - код ASCII букв 'C, I, N' Sleep ' спать
SELECT CASE
Select Case - выбирает какие-либо нужно сделать действия, в зависимости от значения некоторой переменной. Т.е мы пишем: SELECT CASE i, подразумевая, что переменная i будет менятся . И в зависимости от значения переменной i мы будем что-то делать с помощью команды: CASE i-где i это или числовое значение или строковое и т.д.
Смотрим на нашем примере:
Dim i As Integer ' объявим, переменная i целого типа Screen 13 'включим экран ' предлагаем сделать выбор Input "Vyberite: 1-krug, 2-kvadrat, 3-treugolnik, 4-vyhod ";i Select Case i 'объявляем, что будет выбор Case 1 ' если i=1, то рисуем круг Circle (50,50),40,3 Case 2 ' если i=2, то рисуем квадрат Line(30,40)-(60,80),2,b Case 3 ' если i=3, то рисуем треугольник Draw "C0 M50,50 C3 E20 F20 L40" Case 4 ' если i=4, то очищаем экран и выход Cls Case Else ' если i<>1,2,3,4 , то так и пишем... Print "Vy ne vybrali nichego !" End Select ' конец выбора Sleep ' тсс,спим...
В конце окончания выбора пишем END SELECT, подчеркивая конец выбора с
помощью оператора SELECT CASE. Смотрим результат работы оператора SELECT
CASE:
RMDIR
Если вам необходимо удалить папку , то пишем RMDIR "имя папки" . И удаляем...
Rmdir "1" ' удаляем папку с именем "1"
В результате, с помощью RMDIR "1" мы удаляем папку "1" из нашего текущего
каталога.
FUNCTION
Создание функций. Полезная вещь эти функции... Они позволяют намного упростить программу. Создав и назвав своим именем функцию, её можно вызывать из любого места программы - назвав по имени(как человека). Но еще при вызове нужно указать так сказать, входные параметры функции, например - имя переменной. В freebasice описание функции начинают со слова FUNCTION. Далее идёт имя функции: Moyafunkciya, или One, или funkciyaOne.
Например:
FUNCTION Moyafunkciya(a as string) as string
Где a - это входная переменная которая используется вашей программой и функцией. Это важно, так как функция - это вроде как отдельная программа, в которой свои переменные, которые необходимо вначале объявить, прежде чем использовать. Необходимо понимать, что переменные в вашей программе и в функции не связаны, а наша переменная a общая для функции и основного тела программы, но объявляется она в основном теле программы. В функции её объявлять не нужно. Заканчиваем объявление нашей функции оператором END FUNCTION.
Screen 17 Dim stroka As String ''''''''''''''' функция ''''''''''''''''''''''''' Function rus(stroka As String) As String ' объявим о функции с именем rus stroka=stroka+" DRUG !" Locate 10,10 Print stroka End Function '''''''''''' основное тело программы '''''''''''' stroka="PRIVET" Print rus(stroka) ' вызовем функцию Sleep ''''''''''''''''''''''''''''''''''''''''''''''''
CURDIR
Про эту функцию даже нечего рассказать - всё просто как 2х2. Для определения текущей папки просто пишем: PRINT CURDIR. И выводится текущая директория вида:"C:\Documents and Settings\User\Local Settings\Temporary Internet Files".
Для надёжности понимания пример:
Screen 13 Print Curdir Sleep
WINDOWTITLE
Для того чтобы сделать заголовок нашему окну, достаточно написать фразу WINDOWTITLE "НАЗВАНИЕ НАШЕГО ОКНА". Обычно windowtitle пишется вначале программы перед оператором SCREEN, но его можно писать в любом месте программы, если нам нужно вывести заголовок. Удобная вещь, так как можно выводить сообщения на русском языке :
Windowtitle "ПРИВЕТ МИР!" Screen 13 Sleep
Как видим freebasic разрешает использовать в заголовке русские буквы. И
замечательно их выводит. Так же, естественно, можно использовать в заголовке и
английские буквы.
POINT
Для того чтобы определить цвет точки на экране можно применить POINT. Формат записи которого не отличается от старого известного qbasic'a. Это запись вида: POINT (координата x,координата y). Пример:
Screen 13 Paint (20,20),2,2 Print Point (20,20) Sleep
Как видим POINT возвратил нам атрибуты точки координаты (20,20). В нашем
случае - это 2 , зелёный цвет.
VAL
Очень нужная функция, скажем так, полезная. Функция преобразования строки в число: VAL. Проста в использовании. Преобразует строку в число, если у нас в строке есть число. Например:
Screen 13 Dim a As String Dim b As Integer a="123456789abcd" Print Val(a) Sleep
Что бы преобразовать число в строку, применяем функцию STR. Формат записи
STR такой же как VAL
NAME
Если у вас есть файл, и его нужно переименовать, то пишем:
NAME "старое имя","новое имя"
Расширение файла может быть любое. Как это выглядит в программе? Вот так:
Name "file1.txt","file2.txt"
В результате файл с именем file1.txt переименуется в файл file2.txt
KILL
Если у вас есть файл, и его нужно удалить, то пишем:
KILL "имя файла"
Как это выглядит в программе? Вот так:
Kill "file1.txt"
В результате файл будет удалён.
ARRAY
Array - это не команда! Если вы хотите создать массив в Freebasic, то для этого достаточно объявить про это оператором DIM. Как это сделать? Ну например: DIM moyarray(10) as integer. Этим вы объявляете, что появился массив с именем moyarray в котором 10 эллементов целого типа (integer). Далее пользуемся переменной, допустим, присвоив moyarray(1)=100 или moyarray(34)=21. Ну и так далее. Пример:
Windowtitle "ПРИМЕР ИСПОЛЬЗОВАНИЯ МАССИВОВ В FREEBASIC" Screen 13 Dim moyarray(10) As Integer 'объявление про массив Dim i As Integer 'переменная для цикла moyarray(1)=6 'присваеваем первому эллемента массива значение 6 moyarray(2)=7 'ну и так далее... moyarray(3)=2 moyarray(4)=1 moyarray(5)=3 moyarray(6)=5 moyarray(7)=4 moyarray(8)=9 moyarray(9)=10 moyarray(10)=9 For i=1 To 10 Print "moyarray(";i;")=";moyarray(i)'выводим весь массив на экран Next i Sleep
В результате у нас получилось:
moyarray(1)=6
moyarray(2)=7
moyarray(3)=2
moyarray(4)=1
moyarray(5)=3
moyarray(6)=5
moyarray(7)=4
moyarray(8)=9
moyarray(9)=10
moyarray(10)=9
SUB
Для упрощения программирования, для уменьшения исходного кода, сокращения программы можно использовать оператор подпрограммы SUB. Приемущество этого оператора-функции очевидно: можно заменить однотипные повторения кода вызовом подпрограммы описанной с помощью SUB. Но есть свои тонкости...
Во-первых подпрограмма должна находиться в рамках: SUB - END
SUB.
Во-вторых подпрограмма должна иметь имя(любое): SUB
ИМЯ_ПОДПРОГРАММЫ
В-третьих в описании подпрограммы можно указать параметры с
помощью ByVal,ByRef (пример ниже программы):
Sub NAMESUB (Byval cvet As Integer , Byref c As String) Color cvet Print "color=";c End Sub Screen 13 Locate 12 NAMESUB (1,"goluboi") ' вызываем нашу подпрограмму NAMESUB (2,"zelenij") ' тоже самое NAMESUB (4,"krasnij") ' - // - Sleep
CONST
Если в программе нужно использовать какую то постоянную переменную, неважно
какого типа, просто пишем: CONST имя_переменной=значение
Если это
переменная число, то пишем: CONST имя_переменной=число
Если это
символы, то пишем: CONST имя_переменной="значение"
Const a="Welcome" Const b=" to the " Const c="FREEBASIC " Const d=2008 Screen 13 Print a;b;c;d Sleep
Константы строкового типа a,b,c и константа численного типа d вывелись
без проблем с помощью оператора PRINT.
WINDOW
Если вам нужно задать свою систему координат, используйте оператор WINDOW. С помощью которого можно задать свою систему координат в области просмотра. Вот, например, ниже программа рисует звёздочку, меняет систему координат случайным образом с помощью RND и WINDOW , и немного увеличивает эту звёздочку в размере.
''включим режим экрана 640x400 Screen 17 ''сделаем описание используемых переменных Dim As Integer i,j,c Dim As Double x,y,k ''цикл DO-LOOP выход клавиша ESC(код 27) Do Until Asc(Inkey)=27 ''x,y- случайные координаты для window x=(Rnd(1)*(Rnd(1)*15)) y=(Rnd(1)*(Rnd(1)*15)) ''цикл для увеличения размера звезды For i = 1 To 15 ''с-случайный цвет c=Int(Rnd(1)*8) ''зададим свою систему координат Window (-160/ i+x, -100 / i+y)-(160 / i+x, 100 / i+y) Sleep 10 Cls ''рисуем звёздочку Line(2,7)-(4,1),c Line -(6,7),c Line -(1,3),c Line -(7,3),c Line -(2,7),c ''следующее i Next i ''наш главный цикл Loop
Напоминаю, что для нормальной работы программы её нужно скомпилировать. Что такое скомпилировать? Это либо запустить пакетный файл make.bat, который находиться в части этого материала, либо скомпилировать командной строкой, запустив freebasic и введя имя freebasic файла. Для выхода из программы используйте клавишу Escape (строчка do until asc(inkey)=27 в программе)
В операторе WINDOW мы случайным образом меняем систему координат, тем самым увеличиваем наш рисунок в цикле от 1 до 15 (for i=1 to 15). Используйте этот оператор, если вы хотите упростить работу с графикой. Кстати, этот оператор был в qbasic'e. Что бы блокировать изменение координат используйте оператор WINDOW без аргументов (без цифр).