Текстовое окно
+2
mishana
vbman
Участников: 6
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Текстовое окно
Кстати, есть у кого-то мнения насчет того, как делаются текстовые окна с подсветкой синтаксиса? Ну подсветка еще не страшно, а вот реализация самого текстового окна - похоже тайна за семью печатями: я в сети ничего так и не нашел (на любом языке программирования). Какие есть мнения? Хочу Ворд свой написать на ФриБейсике
vbman- Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 42
Откуда : Украина, Кировоград
Re: Текстовое окно
Насчет синтаксиса и ворда - это канешна даааа.......
Но сделать простое диалоговое окно с вводом текста - не проблема. Даже ж можна жеж написать функции обработки и форматирования для обычного EditText. API - справочников по этому поводу - уйма.
Но сделать простое диалоговое окно с вводом текста - не проблема. Даже ж можна жеж написать функции обработки и форматирования для обычного EditText. API - справочников по этому поводу - уйма.
mishana- Сообщения : 8
Дата регистрации : 2008-11-09
Возраст : 38
Откуда : Україна, Шепетівка
Re: Текстовое окно
- Код:
реализация самого текстового окна
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Re: Текстовое окно
А еще можно почитать на сайте wasm.ru статьи Iczelion, особенно последнюю. Правда они об асме, но сам принцип можно перенести и на ФБ. Но работы, я вам скажу... Дохрена. Проще покопаться в инете и найти готовую библитеку, есть такие.
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Текстовое окно
А кстати да. Правда, если у кого есть наработки или более точные ссылки, скажите пожалуйста.
В идеале мне нужно поле редактирования RichTextBox, чтобы можно было выводить форматированный текст. Шрифты, картинки, подсветка.
Но для начала подойдёт и простой TextBox, с multiline.
И причём хочеться это сделать на winApi.
Я искал информацию на эту тему, но пока ничего особого не нашел.
В пакете masm32 есть парочка примеров, но я заблудился в лишнем коде.
Сей вопрос для меня сейчас не очень актуален. Но всё же если кто знает, подскажите пожалуйста. А А может кто выложит исходничек редактора на freebasic это будет вообще чудесно.
В идеале мне нужно поле редактирования RichTextBox, чтобы можно было выводить форматированный текст. Шрифты, картинки, подсветка.
Но для начала подойдёт и простой TextBox, с multiline.
И причём хочеться это сделать на winApi.
Я искал информацию на эту тему, но пока ничего особого не нашел.
В пакете masm32 есть парочка примеров, но я заблудился в лишнем коде.
Сей вопрос для меня сейчас не очень актуален. Но всё же если кто знает, подскажите пожалуйста. А А может кто выложит исходничек редактора на freebasic это будет вообще чудесно.
Re: Текстовое окно
Вот именно! Надо написать свой РичТекстБокс. Самому. Безо всяких там контролов и расширения их функциональности. Реализация с нуля.
Для Gena:
Если литература в электронном виде - помогите пожалуйста! А то ничего в сети как-то не вышло найти. На саурсфорже есть примеры, но там идет готовая ДЛЛ без исходника и все примеры работают с ней. Хотелось бы во внутренностях покопаться. Язык программирования не важен - хоть и ассемблер!
Для Gena:
Если литература в электронном виде - помогите пожалуйста! А то ничего в сети как-то не вышло найти. На саурсфорже есть примеры, но там идет готовая ДЛЛ без исходника и все примеры работают с ней. Хотелось бы во внутренностях покопаться. Язык программирования не важен - хоть и ассемблер!
vbman- Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 42
Откуда : Украина, Кировоград
Re: Текстовое окно
Ну... Я уже начал разбираться.
http://eric50.narod.ru/wgui/
правда сейчас больше другим занимаюсь.
Но обычный textbox уже сделал.
Причём это оказалось не так уж и сложно.
А что подразумеваеться, под "написать свой контрол"? Если писать его с нуля, то пупок развяжеться. А если реализовывать только часть функций. То нафиг оно такое убогое нужно?
http://eric50.narod.ru/wgui/
правда сейчас больше другим занимаюсь.
Но обычный textbox уже сделал.
Причём это оказалось не так уж и сложно.
А что подразумеваеться, под "написать свой контрол"? Если писать его с нуля, то пупок развяжеться. А если реализовывать только часть функций. То нафиг оно такое убогое нужно?
Re: Текстовое окно
На фрибацике писать что-то, что будет конкурировать с рич едитом, по крайней мере глупо. ФБ не оптимизирующий компилятор, поэтому быстродействием контрол отличаться не будет. А иначе зачем? Хотя грешен, сам начинал писать едит заново. На ассемблере. Почти рабочий получился.
Насчет исходников. Есть на си, библиотека Scintilla - http://scintilla.org/. Потом еще можно поискать в гугле по ключевым словам "RAEdit". Кажется, видел еще какие-то другие, но сейчас уже не помню.
Насчет исходников. Есть на си, библиотека Scintilla - http://scintilla.org/. Потом еще можно поискать в гугле по ключевым словам "RAEdit". Кажется, видел еще какие-то другие, но сейчас уже не помню.
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Текстовое окно
Ну и я писал редактор под дос. Причём даже несколько лет пользовался, пока где-то исходники не просрал.
Сам редактор ещё где-то на винте валяеться.
Но... Это всё же консоль, а не графика. И многих функций там просто небыло. Типа шрифтов, подсветки или картинок, про остальное уже молчу. Короче только текст.
Я тогда ещё учился кодить и вышло весьма коряво, почему особо и не жалею пропавшие исходники.
Писать же под винду... Чтобы был стандартный функционал, считаю незачем. Есть ведь win api и. Как мне кажеться с richEdit проблем не должно быть.
Я до этого ещё не добрался. Но видел, что Ицзелион этой теме отвёл два урока.
А на фрибэйсике это будет работать также как и на асме по скорости.
Сам редактор ещё где-то на винте валяеться.
Но... Это всё же консоль, а не графика. И многих функций там просто небыло. Типа шрифтов, подсветки или картинок, про остальное уже молчу. Короче только текст.
Я тогда ещё учился кодить и вышло весьма коряво, почему особо и не жалею пропавшие исходники.
Писать же под винду... Чтобы был стандартный функционал, считаю незачем. Есть ведь win api и. Как мне кажеться с richEdit проблем не должно быть.
Я до этого ещё не добрался. Но видел, что Ицзелион этой теме отвёл два урока.
А на фрибэйсике это будет работать также как и на асме по скорости.
scintilla
Вот пример со scintilla
OPEN "Play_List.txt" надо заменить на исходник basic какой-нибудь - тогда откроется с подсветкой синтаксиса.
Ну и dll SciLexer.dll скачать.
For freebasic
"All the files are included in this zip file (http://www.ejc-crypto.co.uk/Scintilla.zip)"
OPEN "Play_List.txt" надо заменить на исходник basic какой-нибудь - тогда откроется с подсветкой синтаксиса.
Ну и dll SciLexer.dll скачать.
For freebasic
"All the files are included in this zip file (http://www.ejc-crypto.co.uk/Scintilla.zip)"
- Код:
#include once "windows.bi"
#define PLAT_WIN 1
#include "scintilla.bi"
#include "scilexer.bi"
DyLibLoad("SciLexer.dll")
#DEFINE RGBX(r,g,b) RGBA(b,g,r,0)
const black = RGBX(0,0,0)
const white = RGBX(&hff,&hff,&hff)
const red = RGBX(&hFF, 0, 0)
const offWhite = RGBX(&hFF, &hFB, &hF0)
const darkGreen = RGBX(0, &h80, 0)
const darkBlue = RGBX(0, 0, &h80)
const lightBlue = RGBX(&hA6, &hCA, &hF0)
declare function WinMain( byval hInstance as HINSTANCE, byval hPrevInstance as HINSTANCE, byval iCmdShow as integer ) as integer
end WinMain( GetModuleHandle( null ), null, SW_NORMAL )
Dim Shared As HWND hwndScintilla
Sub SetAStyle(style As Integer, fore As COLORREF = NULL, back As COLORREF = white, size As Integer = -1)
SendMessage(hwndScintilla,SCI_STYLESETFORE, style, fore)
SendMessage(hwndScintilla,SCI_STYLESETBACK, style, back)
if size >= 1 then SendMessage(hwndScintilla,SCI_STYLESETSIZE, style, size)
End Sub
function WndProc ( byval hWnd as HWND, byval wMsg as UINT, byval wParam as WPARAM, byval lParam as LPARAM ) as LRESULT
function = 0
select case( wMsg )
case WM_CREATE
hwndScintilla = CreateWindowEx(0,"Scintilla","", WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or WS_CLIPCHILDREN,0,0,700,500,hWnd,NULL, GetModuleHandle(NULL),NULL)
SendMessage(hwndScintilla,SCI_SETLEXER, SCLEX_LUA, NULL)
SendMessage(hwndScintilla,SCI_SETSTYLEBITS, 7, NULL)
SendMessage(hwndScintilla,SCI_SETMARGINTYPEN,1,SC_MARGIN_NUMBER )
SendMessage(hwndScintilla,SCI_SETMARGINWIDTHN,1,48)
SendMessage(hwndScintilla,SCI_SETKEYWORDS,0,Cast(LPARAM,@"and break do else elseif end false for function if in local nil not or repeat return then true until while"))
SendMessage(hwndScintilla,SCI_SETKEYWORDS,1,Cast(LPARAM,@"_VERSION assert collectgarbage dofile error gcinfo loadfile loadstring print tonumber tostring type unpack _ALERT _ERRORMESSAGE _INPUT _PROMPT _OUTPUT _STDERR _STDIN _STDOUT call dostring foreach foreachi getn globals newtype rawget rawset require sort tinsert tremove _G getfenv getmetatable ipairs loadlib next pairs pcall rawegal rawget rawset require setfenv setmetatable xpcall string table math coroutine io os debug"))
SendMessage(hwndScintilla,SCI_SETKEYWORDS,2,Cast(LPARAM,@"abs acos asin atan atan2 ceil cos deg exp floor format frexp gsub ldexp log log10 max min mod rad random randomseed sin sqrt strbyte strchar strfind strlen strlower strrep strsub strupper tan string.byte string.char string.dump string.find string.len string.lower string.rep string.sub string.upper string.format string.gfind string.gsub table.concat table.foreach table.foreachi table.getn table.sort table.insert table.remove table.setn math.abs math.acos math.asin math.atan math.atan2 math.ceil math.cos math.deg math.exp math.floor math.frexp math.ldexp math.log math.log10 math.max math.min math.mod math.pi math.rad math.random math.randomseed math.sin math.sqrt math.tan"))
SendMessage(hwndScintilla,SCI_SETKEYWORDS,3,Cast(LPARAM,@"openfile closefile readfrom writeto appendto remove rename flush seek tmpfile tmpname read write clock date difftime execute exit getenv setlocale time coroutine.create coroutine.resume coroutine.status coroutine.wrap coroutine.yield io.close io.flush io.input io.lines io.open io.output io.read io.tmpfile io.type io.write io.stdin io.stdout io.stderr os.clock os.date os.difftime os.execute os.exit os.getenv os.remove os.rename os.setlocale os.time os.tmpname"))
SendMessage(hwndScintilla,SCI_SETKEYWORDS,4,Cast(LPARAM,@"AddBody3D AddBody CircularVelocity SetInterval CircularOrbit SetScale SetHistoryLog"))
SetAStyle(STYLE_DEFAULT, black, white, 12)
SendMessage(hwndScintilla,SCI_STYLESETFONT, STYLE_DEFAULT, Cast(LPARAM,@"Courier New"))
SendMessage(hwndScintilla,SCI_STYLECLEARALL, NULL, NULL) '// Copies global style to all others
SetAStyle(STYLE_LINENUMBER,white,RGBX(200,200,200),12)
SetAStyle(SCE_LUA_STRING, RGBX(255,0,0))
SetAStyle(SCE_LUA_OPERATOR, RGBX(0,128,192))
SendMessage(hwndScintilla,SCI_STYLESETBOLD, SCE_LUA_OPERATOR, 1)
SendMessage(hwndScintilla,SCI_STYLESETITALIC, SCE_LUA_COMMENT, 1)
SendMessage(hwndScintilla,SCI_STYLESETFORE, SCE_LUA_COMMENT, Cast(LPARAM,RGBX(100,100,100)))
SendMessage(hwndScintilla,SCI_STYLESETBACK, SCE_LUA_COMMENT, Cast(LPARAM,&HFFEFD0))
SendMessage(hwndScintilla,SCI_STYLESETEOLFILLED, SCE_LUA_COMMENT, 1)
SendMessage(hwndScintilla,SCI_STYLESETITALIC, SCE_LUA_COMMENTLINE, 1)
SendMessage(hwndScintilla,SCI_STYLESETFORE, SCE_LUA_COMMENTLINE, Cast(LPARAM,RGBX(100,100,100)))
SendMessage(hwndScintilla,SCI_STYLESETBACK, SCE_LUA_COMMENTLINE, Cast(LPARAM,&HFFEFD0))
SendMessage(hwndScintilla,SCI_STYLESETEOLFILLED, SCE_LUA_COMMENTLINE, 1)
SetAStyle(SCE_LUA_WORD, RGBX(0,0,255))
SetAStyle(SCE_LUA_WORD5, RGBX(0,128,0))
SendMessage(hwndScintilla,SCI_STYLESETBOLD, SCE_LUA_WORD, 1)
SendMessage(hwndScintilla,SCI_STYLESETBOLD, SCE_LUA_WORD2, 1)
SendMessage(hwndScintilla,SCI_STYLESETBOLD, SCE_LUA_WORD3, 1)
SendMessage(hwndScintilla,SCI_STYLESETBOLD, SCE_LUA_WORD4, 1)
SendMessage(hwndScintilla,SCI_STYLESETBOLD, SCE_LUA_WORD5, 1)
SetAStyle(SCE_LUA_NUMBER, RGBX(0,0,255))
Dim As Integer f = FREEFILE
OPEN "Play_List.txt" FOR BINARY AS #f
'Dim As String text = Space(LOF(f))
'dim helloworld as wstring * Space(LOF(f)) => !Space(LOF(f))
'dim text as wstring * 20 => !"\u4f60\u597d\uff0c\u4e16\u754c!"
GET #f, , text
CLOSE #f
SendMessage(hwndScintilla,SCI_SETTEXT,NULL,Cast(LPARAM,strptr(text)))
SendMessage(hwndScintilla,SCI_COLOURISE,0,-1)
case WM_SIZE
MoveWindow(hwndScintilla,0,0,loword(lparam),hiword(lparam),TRUE)
case WM_DESTROY
PostQuitMessage( 0 )
exit function
end select
function = DefWindowProc( hWnd, wMsg, wParam, lParam )
end function
'':::::
function WinMain ( byval hInstance as HINSTANCE, _
byval hPrevInstance as HINSTANCE, _
byval iCmdShow as integer ) as integer
dim wMsg as MSG
dim wcls as WNDCLASS
dim hWnd as HWND
function = 0
with wcls
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = @WndProc
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = hInstance
.hIcon = LoadIcon( NULL, IDI_APPLICATION )
.hCursor = LoadCursor( NULL, IDC_ARROW )
.hbrBackground = GetStockObject( WHITE_BRUSH )
.lpszMenuName = NULL
.lpszClassName = @"ScintillaDemo"
end with
if( RegisterClass( @wcls ) = FALSE ) then
MessageBox( null, "Failed to register wcls", "Error", MB_ICONERROR )
exit function
end if
hWnd = CreateWindowEx( 0, _
@"ScintillaDemo", _
"Scintilla Demo", _
WS_OVERLAPPEDWINDOW, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
NULL, _
NULL, _
hInstance, _
NULL )
ShowWindow( hWnd, iCmdShow )
UpdateWindow( hWnd )
while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE )
TranslateMessage( @wMsg )
DispatchMessage( @wMsg )
wend
function = wMsg.wParam
end function
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|