Полезности с брошенного сайта (часть 2)
Данный материал был опубликован на другом сайте, но сайт долгое время не развивался и в конце-концов был брошен и закрыт. Выборочно информацию из той которая на данный момент еще доступна в архиве, я решил выложить здесь, польза я думаю будет. Я умышленно старался не менять пояснения операторов, оставляя авторскую мысль. Хотя были те, которые попали под редактирование по разным причинам.
Команды, небольшие пояснения к ним и примеры:
BLOAD
Оператор загрузки изображений. Допустим, нам нужно отобразить в окне рисунок 1.bmp. Помещаем этот файл c рисунком (1.bmp) в папку, где находится наша откомпилированная программа на freebasic вида .exe. Для этого чтобы отобразить в нашей программе этот файл, мы можем применить оператор BLOAD:
Screen 18, 32 Dim myImage As Any Ptr = Imagecreate( 48, 48 ) Bload "1.bmp", myImage Put (10,10), myImage Imagedestroy( myImage ) Sleep
BSAVE
Оператор сохранения изображений. Для того, что бы сохранить экран, на котором мы что-то нарисовали можно применить оператор BSAVE. В котором указываем имя файла и расширение BMP. А так же ставим '0' через запятую, подразумевая что сохранять нужно картинку с нашего текущего экрана. Можно также через запятую указать размер сохраняемого нашего файла в байтах, но это не обязательно, freebasic прекрасно сохранит файл и без этих 'примочек'. Вобщем вид оператора имеет следующий:
BSAVE "имя файла.bmp",адресс(откуда нужно сохранить рисунок, если с текущего
экрана-ставим 0), длина сохраняемого файла в байтах(можно не
писать).
или:
BSAVE "имя файла.bmp",0
Напишем программу, которая рисует эллипс в центре экрана, закрашивает его, и сохраняет этот эллипс в точечный рисунок bmp:
Screen 13 Circle (155,95),100,2,,,0.8 Paint (155,95),3,2 Bsave "рисунок.bmp", 0
Запускаем программу, и видим, что freebasic с помощью оператора BSAVE
создал и сохранил рисунок "рисунок.bmp" в нашей текущей папке.
MID
Оператор для вырезания части строки. С помощью MID'а можно вырезать любую часть строки. Всё это нужно делать в соответствии с форматом записи функции MID:
MID("Строка",начало выреза, конец выреза).
При этом, третий параметр ("конец выреза") можно не писать,и тогда он будет соответствовать номеру последней буквы строки.
Пример использования функции MID:
Screen 13 'режим экрана Dim As String a,b 'объявляем что a,b - строковые переменные a="I DON'T LOVE FREEBASIC!" 'присваиваем переменной a нашу строку b=Mid(a,1,1) 'вырезаем букву ": XABSC += 1": XABSC += 1I b=b+Mid(a,8) 'вырезаем фразу ": XABSC += 1LOVE ": XABSC += 1FREEBASIC! Locate 10,10 'устанавливаем курсор, куда нам надо Print b 'вывод нашей новой строки Sleep 'ожидание нажатия клавиши
BIN
Если вам нужно перевести число из десятичной системы счисления в двоичную, можно воспользоваться оператором BIN. Ниже программа, показывает перевод 15 десятичных чисел в двоичную систему:
Dim i As Integer Screen 13 For i=1 To 15 Print i;"=";Bin(i) Next Sleep
HEX
Если вам нужно перевести число из десятичной системы счисления в шестнадцатиричную, можно воспользоваться оператором HEX. Ниже программа, показывает перевод 15 десятичных чисел в шестнадцатиричную систему:
Dim i As Integer Screen 13 For i=1 To 15 Print i;"=";Hex(i) Next Sleep
OCT
Если вам нужно перевести число из десятичной системы счисления в восьмеричную, можно воспользоваться оператором OCT. Ниже программа, показывает перевод 15 десятичных чисел в восьмеричную систему:
Dim i As Integer Screen 13 For i=1 To 15 Print i;"=";Oct(i) Next Sleep
INSTR
Для поиска позиции символа (или части строки) в строке используется функция INSTR:
INSTR(начало поиска , строка , искомый символ или часть строки).
Если параметр "начало поиска" опускается, то поиск начинается с начала строки.
Dim a As String Screen 13 a="HELLO WORLD!" Print Instr(a,"W") Print Instr(1,a,"H") Print Instr(a,"LLO") Sleep
EXEC
Коротко про этот оператор: EXEC - запускает программу, на вашем компьютере в
указанной директории. Через запятую указываем то, что мы передаём этой
программе. Это может быть какой-то файл, переменная, http-адресс.
Если всё
нормально, ваша программа запустит другую программу и по закрытии второй
программы вернётся в вашу основную программу. Но, если искомой программы не
найдётся, то ваша программа будет продолжатся дальше, а результат работы команды
EXEC будет "-1".
Пример:
Screen 17 Dim result As Integer result = Exec( "C:\Program Files\Internet Explorer\IEXPLORE.EXE",_ "http://users.freebasic-portal.de/freebasicru/" ) If result=-1 Then Print "Error, not IE" Print "privet eshe raz!" Sleep
В результате выполнения программы откроется INTERNET EXPLORER по адресу
free-basic.ru, а когда пользователь закроет INTERNET EXPLORER то он вернётся в
программу на бейсике. В том случае, если по указанному адресу(C:\Program
Files\Internet Explorer\IEXPLORE.EXE) нет INTERNET EXPLORERа, то появиться
надпись про ошибку "Error, not IE".
PUT
Оператор - вывод спрайта на экран, пример:
Screen 13 'экран 'создаём объект im, размером 80х40 и цветом 3 Dim im As Any Ptr = Imagecreate( 80, 40, 3 ) 'нарисуем в объекте im - окружность Circle im,(10,10),5,1 'нарисуем в объекте im - квадрат Line im,(3,3)-(20,18),0,b 'Помещаем объект img в координату 160,100; Trans-прозрачный фон Put (160, 100), im, Trans 'Помещаем im в 80,50 Put (80, 50), im, Trans Sleep Imagedestroy im 'освобождаем память изображения
SIN , COS
Да, да - вы не ошиблись. Это всё те же, знакомые со школы синусы и косинусы. Рассмотрим пример использования в freebasic функций SIN, COS:
'заголовок окна Windowtitle "SIN - COS" 'режим экрана 13 Screen 13 'объявим о переменных Dim As Integer koef,nn 'объявим и создадим функцию с именем circ Function circ(koef As Integer) As Integer 'объявим о переменных функции circ Dim As Integer cc,c,rx,ry,xc,yc,redOnTop,lastSign,_ lastScale,tRad,x1,y1,x2,y2,sign,scale Dim a As String Dim t As Single 'singlе - это тип не целых чисел ' начальные параметры переменных t = 0 ' шаг цикла rx = 80 ' радиус окружности ry = 80 ' -//- xc = 140 ' центр фигур, x yc = 100 ' центр фигур, y mm:' метка в программе ' увеличиваем шаги t=t+0.025 ' собственно говоря наши функции, (из за них и была написана эта программа) x2 = xc - rx*Cos(t*koef) y2 = yc - ry*Sin(t) ' рисуем линию: одна точка постоянная, другая меняется Line (140,100)-(x2,y2),t ' перестрахуемся-а вдруг пользователь захочет выйти из программы? Выход-ESC a=Inkey:If Asc(a)=27 Then End ' условный переход к метке mm If t<7 Then Goto mm ' конец описания функции circ End Function 'Отсюда начинается основное тело программы For nn=1 To 20 ' начало цикла koef=nn ' готовим переменную для функции circ 'вызываем функцию circ, при этом переменная koef изменяется от 1 до 20 circ(koef) ' задержка 500 миллисекунд Sleep 500 ' очистка экрана Cls ' переход к следующему nn Next nn ' ожидание нажатия клавиши Sleep
VIEW
Определяет область экрана для рисования.
Screen 13 '' определяем видимую область View ( 80, 80 ) - ( 140, 140 ), 3, 15 Circle (10,10),10,4 'выводим в этой области круг Circle (140,14),10,4 'попытаемся вывести круг вне зоны VIEW Sleep
Что мы сделали этой программой?
Первое - это определили видимую
область графики с помощью View ( 80, 80 ) - ( 140, 140 ), 3, 15;
Второе - это
вывели круг в этой области circle (10,10),10,4 . И это у нас получилось.
Но
когда мы попытались вывести круг с координатами определенными вне зоны VIEW
(это-circle (140,14),10,4) , то наш круг не был нарисован.
DRAW STRING
Есть еще альтернативный способ вывода текста в графическом режиме - это оператор DRAW STRING. Вот, простой пример вывода нашей избитой фразы в окно 320 на 200, установленное с помощью ScreenRes 320,200
Screenres 320,200 'графическое окно 320 на 200 Draw String (100, 100),"HELLO WORLD" ' пишем в координатах текст Sleep ' ожидание нажатия клавиши
Для того что бы задать цвет текста пишем после текста через запятую :
Screenres 320, 200, 8 Draw String (10, 10), "ABCDEF",1 Draw String (10, 20), "ABCDEF",2 Draw String (10, 30), "ABCDEF",3 Draw String (10, 40), "ABCDEF",4 Draw String (10, 50), "ABCDEF",5 Sleep
PCopy
Pcopy - копирует одну страницу видео памяти в другую. В данном случае, в примере ниже мы копируем со первой видео страницы в нулевую. В начале программы, с помощью SCREENRES 320,240,8,2 мы установили размер экрана 320x240, глубиной цвета - 8 бит, и с двумя видео страницами. Далее во второй странице с помощью ScreenSet 1,1 мы запоминаем закрашенный круг, включаем первую видеостраницу с помощью ScreenSet 0,1. И делаем копию с помощью PCopy.
' экран 320x240,8-битный,2 видео страницы Screenres 320,240,8,2 ' x - целого типа Dim As Integer x For x=1 To 200 Screenset 1,1 ' 1-я видео страница Cls Circle (x,100),80,3 Paint (x,100),3,3 Screenset 0,1 ' 0-я видео страница Pcopy 1,0 ' копируем из 1 страницы в 0-ю Sleep 25 Next Sleep
DECLARE
В qbasic был такой оператор DECLARE, который декларировал функции. Так вот в freebasic этот оператор практически аналогичен. Он так же описывает процедуру, которая есть в программе и начинается с имени FUNCTION. Так же с помощью оператора DECLARE можно описать процедуру с именем SUB. Что значит декларировать? Ничего сложного. Это значит описывать, выполнять проверку эллементов функции на соответствие типов данных. Что бы нам было понятно - давайте рассмотрим пример сложения двух слов с помощью DECLARE и FUNCTION:
'включим режим экрана Screen 13 'декларируем функцию FRAZA (два строковых типа, выход строковый тип) Declare Function FRAZA( As String, As String ) As String 'вызывам функция с 2-мя строковыми переменными Print FRAZA("HELLO"," WORLD") 'непосредственно сама функция FRAZA Function FRAZA( A As String, B As String ) As String Return A + B End Function 'конец описания функции,далее ожидание нажатия Sleep
Вобщем то, что хотели, то и получили. Наша задекларированная функция
FRAZA сложила две переменные строкового типа "HELLO" и "WORLD".
Естественно, типы переменных, которые декларируются в функциях, могут
быть различными. Но есть свои ньюансы. Пока вы с этим не столкнётесь, вам эти
ньюансы, я думаю не интересны. А когда столкнётесь, то догадаетесь сами.
TYPE
Freebasic, как и qbasic предоставляет пользователю создавать свой тип
переменных. Это значит, что помимо стандартных типов бейсика можно создать свой
пользовательский тип.
Пользовательский тип создаётся с помощью оператора
TYPE. Смотрим ниже пример создания нового типа , с описанием:
'включим режим экрана Screen 13 'создадим свой тип - moytyp Type moytyp 'в котором две переменные строкового типа one As String two As String 'конец описания типа End Type 'объявим о переменной c типа moytyp Dim c As moytyp 'наше первое значение переменной с - HELLO c.one = "HELLO" 'наше второе значение переменной с - WORLD c.two = " WORLD" 'а давайте-ка посмотрим что они из себя представляют Print c.one;c.two Sleep
Маленькие ньюансы. Когда мы создали свой тип. Далее при использовании
этого типа нужно писать точку между переменной, описанной с помощью DIM и
переменными, описанными между TYPE - END TYPE. Например, в примере выше это
переменные: c.one, c.two.
REDIM
ReDim - описывает, или изменяет размер массива. Далее, если нам нужно изменить размер массива, но при этом нужно что бы данные в массиве не стерлись - используем оператор ReDim Preserve:
Screen 13 'создадим массив m Redim m(1 To 5) As Integer m(1)=10 m(2)=5 m(3)=23 m(4)=78 m(5)=4 For i As Integer=1 To 5 Print i;" = ";m(i) Next i Print 'изменим размер массива m Redim Preserve m(1 To 10) As Integer For i As Integer=1 To 10 Print i;" = ";m(i) Next i Sleep