Полезности с брошенного сайта (часть 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


1 часть | 2 часть | 3 часть