Решил поделиться своей нароботкой.
Огромное СПАСИБО Grover за его статью в Blitz Et Cetera
В данном примере работают 2 команды
- help - выводит справку
- showfps true|false - отображение FPS (If shFPS=1 Then Text 0,0,"FPS: "+fps)
Для начала я об'являю переменные
; Консоль
Global ConsFlg=0
Const Kolcmd=9 ; количество отображаемых строк консоли
Dim cmdbuff$(Kolcmd) ; ? Кол-во строк
Global shFPS=0; 0 - не показывать FPS, 1- показывать
Создаем основные функции
Function InitConsole$()
cur_pos%=Len(s$)
view_text$=""
X1=4
gh=GraphicsHeight ()/2-8
fh=FontHeight() +1
strok%=(gh/fh)-1
While Not KeyHit (28)
Cls
Color 200,200,200
Rect 0,0,GraphicsWidth (),GraphicsHeight ()/2,1
Color 0,0,0
Rect 2,2,GraphicsWidth ()-4,GraphicsHeight ()/2-4,0
For i=0 To strok-1
Text 4,X1+(i*(FontHeight ()+1)),cmdbuff(i)
Next
view_text$=Left(s, cur_pos)
view_text$=view_text$+"|"
view_text$=view_text$+Right(s,Len (s)-cur_pos)
Text 4,GraphicsHeight ()/2-4-20,">"+view_text
Flip
k=WaitKey ()
Select True
Case (k>31) And (k<127)
temp$=s$
S$=Left (temp$,Cur_pos)+Chr(k)+Right (temp$,Len(temp$)-cur_pos)
cur_pos=cur_pos+1
Case k=8
If cur_pos<>0 Then
temp$=s$
s=Left (temp$,cur_pos-1)+Right (temp$,Len(temp$)-cur_pos)
cur_pos=cur_pos-1
EndIf
Case k=4
If cur_pos<>Len(s) Then
temp$=s$
s$=Left (temp$,cur_pos)+Right (temp$, Len(temp$)-cur_pos-1)
EndIf
Case k=31
cur_pos=cur_pos-1
If cur_pos<0 Then cur_pos=0
Case k=30
cur_pos=cur_pos+1
If cur_pos>Len (s$) Then cur_pos=Len(s)
Case k=1
cur_pos=0
Case k=2
cur_pos=Len(s)
End Select
Wend
Viewport 0,0,GraphicsWidth (),GraphicsHeight ()
Return s$
End Function
; Обрабатываем команду из консоли
Function CommandConsole(Cmd$)
For i=0 To Kolcmd
If cmdbuff(i)="" Then Exit
Next
If i>Kolcmd Then
Sdvig()
i=Kolcmd
EndIf
cmdbuff(i)=">"+Cmd$
; Обрабатываем команду
Com$=ConsoleCMD$(cmd$)
Param$=ConsoleCMDParam$(cmd$)
Select True
Case Com="help"
CommandConsole(">help, showfps")
Case Com="showfps"
If Param="true" Then
shFPS=1
CommandConsole(">FPS On")
ElseIf Param="false" Then
shFPS=0
CommandConsole(">FPS Off")
Else
CommandConsole(">Неверный параметр "+Param)
EndIf
End Select
End Function
; Сдвигаем матрицу команд
Function Sdvig()
For i=0 To Kolcmd-1
cmdbuff(i)=cmdbuff(i+1)
Next
cmdbuff(kolcmd)=""
End Function
; Вытаскиваем команду
Function ConsoleCMD$(cmd$)
l=Instr(cmd," ",1)
If l=0 Then
Return cmd
Else Return Left(cmd, l-1)
EndIf
End Function
; Вытаскиваем параметры
Function ConsoleCMDParam$(cmd$)
l=Instr(cmd," ",1)
If (l=0) Or (l=Len(cmd)) Then
Return ""
Else Return Right (cmd,Len(cmd)- l)
EndIf
End Function
В обработчике нажатия клавиш пишем следующую строку
If KeyDown (87)=1 Then CommandConsole(InitConsole$()); Отображаем консоль F11
Очень буду признателен за критику кода, но слишком на меня не нападайте плз.