CompilerIf #PB_Compiler_OS =
#PB_OS_Windows здесь должен быть код специально для Windows CompilerElse здесь должен быть код для других платформ CompilerEndIf |
CompilerSelect #PB_Compiler_OS CompilerCase #PB_OS_Windows здесь должен быть код специально для Windows CompilerCase #PB_OS_Linux здесь должен быть код специально для Linux CompilerCase #PB_OS_MacOS здесь должен быть код специально для MacOS CompilerDefault здесь должен быть код для остальных платформ CompilerEndSelect |
; Эта процедура
открывает файл, указанный в переменной File и загружает данные из него в
редактор. Procedure LoadFile(File.s) If ReadFile(0, File) ; Открытие файла. FileSize=Lof(0) ; Определение размера файла в байтах. FormatFile=ReadStringFormat(0) ; Определение кодировки файла (Ascii, UTF8 или Unicode). *mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла. ReadData(0, *mem, FileSize) ; Копирование данных из файла в память. SetGadgetText(1, PeekS(*mem,FileSize, FormatFile)) ; Преобразование кодировки и загрузка текста в редактор. FreeMemory(*mem) ; Освобождение памяти. CloseFile(0) ; Закрытие файла. StatusBarText(1,0,File) ; Отображение пути к файлу в строке состояния. Else MessageRequester("Ошибка", "Не удалось открыть файл") EndIf EndProcedure ; Эта процедура сохраняет данные из редактора в файл. Procedure SaveFile() ; Создание стандартного окна сохранения файла. File.s=SaveFileRequester("Сохраняем файл","","Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*",0) If File<>"" If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла File=File+".txt" ; добавляем его EndIf If CreateFile(0,File) ; Создание файла на диске Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text CompilerIf #PB_Compiler_OS = #PB_OS_Linux ; Это код для операционки Linux WriteStringFormat(0, #PB_Unicode) ; Запись в файл специальной метки, сообщающей что кодировка Unicode FormatFile=#PB_Unicode CompilerElse ; Это код для операционок Windows, MacOS и AmigaOS FormatFile=#PB_Ascii CompilerEndIf WriteString(0, Text, FormatFile) ; Запись текста в файл в требуемой кодировке CloseFile(0) ; Закрытие файла. Else MessageRequester("Ошибка", "Не удалось сохранить файл") EndIf EndIf EndProcedure ProgPath.s=GetPathPart(ProgramFilename()) ; Получаем путь к исполняемому файлу Gosub LoadSetting ; Вызов подпрограммы, читающей настройки программы из файла SettingEdit.ini If Window_X<2 : Window_X=100 : EndIf If Window_Y<2 : Window_Y=100 : EndIf ; Открытие главного окна #flag = #PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_Invisible OpenWindow(1,Window_X,Window_Y,Window_Width,Window_Height,"Текстовый редактор",#flag) SmartWindowRefresh(1,1) ; Активация функции, уменьшающей мерцания окна при изменении его размеров If CreateMenu(0,WindowID(1)) ; Создание главного меню MenuTitle("Файл") MenuItem(1,"Открыть"+Chr(9)+"Ctrl+O") MenuItem(2,"Сохранить"+Chr(9)+"Ctrl+S") MenuBar() MenuItem(3,"Выход") MenuTitle("Формат") MenuItem(4,"Шрифт") MenuHeight=MenuHeight() ; Высота меню EndIf If CreateToolBar(1,WindowID(1)) ; Создание панели инструментов ToolBarStandardButton(1, #PB_ToolBarIcon_Open) ToolBarToolTip(1,1,"Открыть файл") ToolBarStandardButton(2, #PB_ToolBarIcon_Save) ToolBarToolTip(1,2,"Сохранить файл") ToolBarHeight=ToolBarHeight(1) ; Высота панели инструментов EndIf ; Регистрация "горячих клавиш", дублирующих меню AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_O, 1) AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_S, 2) If CreateStatusBar(1,WindowID(1)) ; Создание строки состояния AddStatusBarField(#PB_Ignore) ; Создание одного раздела на всю строку состояния StatusBarHeight = StatusBarHeight(1) ; Высота строки состояния EndIf CompilerIf #PB_Compiler_OS = #PB_OS_Linux ; Код для Linux EditorX=2 ; Верхняя позиция редактора в окне CompilerElse EditorX=ToolBarHeight+2 ; Верхней позиция редактора смещена вниз на высоту панели инструментов CompilerEndIf ; Собственно редактор текста EditorGadget(1,1,EditorX, Window_Width-2, Window_Height-StatusBarHeight-MenuHeight-ToolBarHeight-4) SetGadgetColor(1,#PB_Gadget_FrontColor, $950121) ; Цвет текста SetGadgetColor(1,#PB_Gadget_BackColor, RGB(237, 255, 246)) ; Фон LoadFont(1, FontName.s, FontSize, FontStyle) ; Шрифт для редактора SetGadgetFont(1,FontID(1)) File.s=ProgramParameter() ; Командная строка переданная программе при старте If File<>"" And FileSize(File)>=0 ; Передан путь к файлу LoadFile(File) ; Загружаем файл EndIf ; Активация функций, позволяющих открывать файл просто перетащив его в окно программы EnableWindowDrop(1, #PB_Drop_Files, #PB_Drag_Link) EnableGadgetDrop(1, #PB_Drop_Files, #PB_Drag_Link) HideWindow(1,0) ; Отображение окна Repeat ; Главный цикл Repeat - Until Event=WaitWindowEvent() ; Получаем идентификатор события в программе If Event=#PB_Event_SizeWindow ; Размер окна изменился ; Изменение размеров редактора ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(1)-2, WindowHeight(1)-StatusBarHeight-MenuHeight-ToolBarHeight-2) ElseIf Event=#PB_Event_WindowDrop Or Event=#PB_Event_GadgetDrop ; На окно перетащали файл If EventDropAction()=#PB_Drag_Link File=EventDropFiles() ; Получаем путь к файлу If FileSize(File)>=0 ; Файл существует LoadFile(File) ; Загружаем файл EndIf EndIf ElseIf Event=#PB_Event_Menu ; Событие в меню Menu=EventMenu() ; Определение выбранного пункта меню Select Menu Case 1 ; Пункт "Открыть" File.s=OpenFileRequester("Открываем файл","","Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*",0) If File<>"" LoadFile(File) EndIf Case 2 ; Пункт "Сохранить" SaveFile() Case 3 ; Пункт "Выход" Break Case 4 ; Пункт "Шрифт" If FontRequester(FontName.s, FontSize,0,0, FontStyle) FontName=SelectedFontName() FontSize=SelectedFontSize() FontStyle=SelectedFontStyle() LoadFont(1, FontName, FontSize, FontStyle) SetGadgetFont(1,FontID(1)) EndIf EndSelect EndIf Until Event=#PB_Event_CloseWindow ; Прерывание главного цикла при закрытии окна Gosub SaveSetting ; Вызов подпрограммы, сохраняющей настройки программы ф файле SettingEdit.ini End LoadSetting: ; Подпрограмма читающая из файла SettingEdit.ini настройки программы OpenPreferences(ProgPath+"SettingEdit.ini") PreferenceGroup("Window") Window_X=ReadPreferenceLong("Window_X", 200) Window_Y=ReadPreferenceLong("Window_Y", 200) Window_Width=ReadPreferenceLong("Window_Width", 500) Window_Height=ReadPreferenceLong("Window_Height", 400) PreferenceGroup("Editor") CompilerIf #PB_Compiler_OS = #PB_OS_Windows FontName.s=ReadPreferenceString("FontName","Lucida Console") CompilerElse FontName.s=ReadPreferenceString("FontName","Liberation Mono") CompilerEndIf FontSize=ReadPreferenceLong("FontSize", 10) FontStyle=ReadPreferenceLong("FontStyle", 0) ClosePreferences() Return SaveSetting: ; Подпрограмма сохраняющая в файле SettingEdit.ini настройки программы If CreatePreferences(ProgPath+"SettingEdit.ini") PreferenceGroup("Window") WritePreferenceLong("Window_X", WindowX(1)) WritePreferenceLong("Window_Y", WindowY(1)) WritePreferenceLong("Window_Width", WindowWidth(1)) WritePreferenceLong("Window_Height", WindowHeight(1)) PreferenceGroup("Editor") WritePreferenceString("FontName", FontName) WritePreferenceLong("FontSize", FontSize) WritePreferenceLong("FontStyle", FontStyle) ClosePreferences() EndIf Return |
File.s=ProgramParameter() ; Командная строка переданная программе при
старте If File<>"" And FileSize(File)>=0 ; Передан путь к файлу LoadFile(File) ; Загружаем файл EndIf |
EnableWindowDrop(1,
#PB_Drop_Files, #PB_Drag_Link) EnableGadgetDrop(1, #PB_Drop_Files, #PB_Drag_Link) |
If
EventDropAction()=#PB_Drag_Link File=EventDropFiles() ; Получаем путь к файлу If FileSize(File)>=0 ; Файл существует LoadFile(File) ; Загружаем файл EndIf EndIf |