Code
; Эта процедура загружает текст из файла в редактор
Procedure LoadFile(Gadget,FileName.s)
Text.s="" ; Очищаем строковую переменную
If ReadFile(1,FileName) ; Открываем файл
Size=Lof(1) ; Узнаём размер файла
If Size>0
Text=Space(Size) ; Заполняем переменную числом пробелов, равным размеру файла
ReadData(1,@Text,Size) ; Читаем данные из файла в строковую переменную "Text"
EndIf
SetGadgetText(Gadget,Text) ; Помещаем данные из переменной "Text" в редактор
CloseFile(1) ; Закрываем файл
Else
MessageRequester("Ошибка","Не удалось открыть файл!")
EndIf
EndProcedure
; Эта процедура сохраняет текст из редактора в файле
Procedure SaveFile(Gadget,FileName.s)
If CreateFile(2,FileName) ; Создаём пустой файл
Text.s=GetGadgetText(Gadget) ; Считываем данные из редактора в строковую переменную "Text"
WriteString(2,Text) ; и сохраняем их как одну большую строку
CloseFile(2) ; Закрываем файл
Else
MessageRequester("Ошибка","Не удалось сохранить файл!")
EndIf
EndProcedure
; Открываем невидимое окно
If OpenWindow(0, 200, 200, 550, 400,"Текстовый редактор",#PB_Window_MinimizeGadget |#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered | #PB_Window_Invisible | #PB_Window_SizeGadget)
If CreateGadgetList(WindowID(0))
EditorGadget(1,2,30,548,360) ; Создаём редактор
SetGadgetFont(1,LoadFont(0,"Arial",10) ) ; Устанавливаем шрифт "Arial" с размером 10
; Создаём меню
If CreateMenu(0,WindowID(0))
; Создаём новый заголовок меню
MenuTitle("Файл")
; Создаём пункты меню
MenuItem(0,"Открыть")
MenuItem(1,"Сохранить")
; Разделитель между меню
MenuBar()
MenuItem(2,"Выход")
; Создаём новый заголовок меню
MenuTitle("Справка")
MenuItem(3,"О программе")
EndIf
; Создаём панель инструментов
If CreateToolBar(1, WindowID(0) )
; Добавляем две кнопки, дублирующие пункты "Открыть" и "Сохранить" меню
ToolBarStandardButton(0,#PB_ToolBarIcon_Open)
ToolBarStandardButton(1,#PB_ToolBarIcon_Save)
; Добавляем всплывающие подсказки к кнопкам
ToolBarToolTip(1, 0, "Открыть")
ToolBarToolTip(1, 1, "Сохранить")
EndIf
; Создаём всплывающее (контекстное) меню
If CreatePopupMenu(1)
; Добавляем пункты меню, дублирующие основное меню.
MenuItem(0, "Открыть файл")
MenuItem(1,"Сохранить файл")
EndIf
HideWindow(0,0) ; Разрешаем отображение невидимого окна
SmartWindowRefresh(0, 1) ; Эта функция уменьшает мерцания окна при изменении его размеров
Repeat ; Начало главного цикла
Event=WaitWindowEvent() ; Узнаём текущее событие в программе
Menu=EventMenu() ; Получаем идентификатор активного пункта меню
Gadget=EventGadget() ; Узнаём в каком гаджете произошло событие
Window=EventWindow() ; Узнаём идентификатор активного окна
If window=0 ; Обработка событий от окна с идентификатором 0
If Event=#PB_Event_SizeWindow ; Условие будет выполнено при изменении размера окна
; Изменяем размер редактора
ResizeGadget(1, #PB_Ignore , #PB_Ignore , WindowWidth(0)-4,WindowHeight(0)-52)
EndIf
If Event=516 ; Условие будет выполнено при щелчке правой кнопкой мыши
DisplayPopupMenu(1, WindowID(0)) ; Отображаем контекстное меню
EndIf
If Event=#PB_Event_Menu ; Условие будет выполнено, если произойдёт событие в меню
Select Menu ; Запоминаем идентификатор меню для последующего сравнения в операторах Case
; Событие в пункте "Открыть" меню
Case 0
; Отображаем окно выбора открываемого файла
File.s=OpenFileRequester("Открыть файл", "", "*.txt|*.txt|All Files|*.*", 0)
If File<>"" ; Условие будет выполнено, если в строковой переменной "File" будет какой-либо текст
LoadFile(1,File) ; Вызываем процедуру, открывающую файл
EndIf
; Событие в пункте "Сохранить" меню
Case 1
; Отображаем окно выбора сохраняемого файла
File.s=SaveFileRequester("Сохранение файла", "", "*.txt|*.txt;|All Files|*.*", 0)
If File<>""
If GetExtensionPart(File)="" ; Условие будет выполнено при отсутствии расширения у файла
File=File+".txt" ; Добавляем расширение
EndIf
SaveFile(1,File) ; Сохраняем файл
EndIf
; Событие в пункте "Выход" меню
Case 2
Exit=1 ; Записываем в переменную "Exit" число 1. Это прервёт цикл и программа закроется
; Событие в пункте "О программе" меню
Case 3
If IsWindow(1)<>0 ; Проверяем, существует ли окно с идентификатором 1
SetActiveWindow(1) ; Если окно существует, отображаем его
Else ; Если окна нет, создаём его
If OpenWindow(1,0,0,200,80,"О программе",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(1) )
TextGadget(2,40,10,150,15,"Текстовый редактор")
ButtonGadget(3,50,40,80,25,"Ok")
EndIf
EndIf
EndIf
EndSelect ; Этот оператор завершает операцию выбора, начатую оператором Select
EndIf
If Event=#PB_Event_CloseWindow ; При попытке закрыть главное окно, записываем в переменную "Exit" число 1
Exit=1
EndIf
EndIf
If window=1 ; Обработка событий от окна с идентификатором 1 (окно "О программе")
If Event=#PB_Event_CloseWindow ; Закрываем окно
CloseWindow(1)
EndIf
If Event=#PB_Event_Gadget And Gadget=3 ; При щелчке по экранной кнопке "Ok", закрываем окно
CloseWindow(1)
EndIf
EndIf
Until Exit=1 ; Прерываем главный цикл если в переменной "Exit" число 1
EndIf
EndIf
End