только почемуто высота этого поля слишком маленькая. А при изменении значений
EditorGadget(1,2,30,548,360)
ничего не происходит
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка
только почемуто высота этого поля слишком маленькая. А при изменении значений
EditorGadget(1,2,30,548,360)
ничего не происходит
Попробуй так
EditorGadget(1,2,2,548,360)
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
EndIf
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.PS.
Здесь можно найти пример текстового редактора http://pure-basic.narod.ru/docs/MultiOS.html
Теперь все ок
Как теперь окно открыти создать под клик "Открыть"? В справке написано Result = OpenWindow(#Window, x, y, InnerWidth, InnerHeight, Title$ [, Flags [, ParentWindowID]])
Отредактировано daiomik (31.01.2010 17:42:29)
Посмотри справку на функции OpenFileRequester и SaveFileRequester (раздел Requester справки)
Хм.. снова проблема. Не знаю че писать в данной функции:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
EndIf
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
OpenFileRequester(Title$, DefaultFile$, Pattern$, PatternPosition [, Flags])
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.Вот. Заодно добавил процедуру загрузки файла
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.А для сохранения это нужно использовать
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
SaveFile(File)Да, но лучше добавить проверку наличия расширения у сохраняемого файла и его его нет, то добавить.
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIfПишет ошибка:"Строка 97.SaveFile() не Функция, Массив,Макрос или связной поток"
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
ElseIf Menu=#MENU_2
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.Добавь процедуру с таким именем, которая будет сохранять данные в файле.
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
; Эта процедура сохраняет данные из редактора в файл.
Procedure SaveFile(File.s)
If CreateFile(0,File) ; Создание файла на диске
Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text
WriteString(0, Text) ; Запись текста в файл
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось сохранить файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
ElseIf Menu=#MENU_2
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.С этим разобрался
Вот теперь хочу добавить надпись во втором окне Опрограмме. Ввожу так, но выводит Синтаксическая ошибка:
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
TextGadget(0, 10, 10, 250, 20, ""Это окно О программе (Left)")
EndIf
EndIf
EndProcedureВ начале надписи Это окно О программе (Left) есть лишняя кавычка.
АА, точно. Ток вот опять не могу закрыть окно О программе. Знаю что нужно вставить этот код, но не знаю куда
If window=1 ; Обработка событий от окна с идентификатором 1 (окно "О программе")
If Event=#PB_Event_CloseWindow ; Закрываем окно
CloseWindow(1)
EndIfБыла проблема с закрывающими олператорами EndIf. Один из операторов располагался не там где надо.
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
TextGadget(0, 10, 10, 250, 20, "Это окно О программе (Left)")
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
; Эта процедура сохраняет данные из редактора в файл.
Procedure SaveFile(File.s)
If CreateFile(0,File) ; Создание файла на диске
Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text
WriteString(0, Text) ; Запись текста в файл
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось сохранить файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
ElseIf Menu=#MENU_2
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIf
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.С блокнотом разобрался полностью. Давайте о другом. В просторах инета нашел примерчик с отображением времени. Объясните зачем тут идет объявление процедуры? И как она потом вызывается? и зачем "Открываем файл "user32.dll""?
; Эта процедура вызывается по таймеру два раза в секунду.
Procedure DateStatusBar()
Time.s = FormatDate("%hh:%ii:%ss", Date() ) ; Узнаём текущее время
StatusBarText(0, 0,Time) ; Выводим его на строку состояния
EndProcedure
; Открываем окно
If OpenWindow(0,0,0,200,100,"Строка состояния",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
; Создаём строку состояния
CreateStatusBar(0, WindowID(0))
; Делим её на области
AddStatusBarField(80)
AddStatusBarField(120)
StatusBarText(0, 1, " Текущее время") ; Выводим строку в область с идентификатором 1.
OpenLibrary(0,"user32.dll") ; Открываем файл "user32.dll"
CallFunction(0,"SetTimer",WindowID(0), 1, 500, @DateStatusBar() ) ; Вызываем функцию "SetTimer"
Repeat
Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow
; Вызываем функцию "KillTimer"
CallFunction(0,"KillTimer",WindowID(0),1)
; Закрываем файл "user32.dll".
CloseLibrary(0)
EndIf
EndIf
EndОбъясните зачем тут идет объявление процедуры
Где? Там нет объявления процедуры. Процедура объявляется с помощью оператора Declare если она в исходнике находится ниже чем вызывается (это связанно с использованием однопроходового компилятора).
И как она потом вызывается?
Вызывается периодически по таймеру , который создаётся строкой
CallFunction(0,"SetTimer",WindowID(0), 1, 500, @DateStatusBar() )
При этом, API функции SetTimer передаётся указатель на процедуру ("собака" в начале её имени).
и зачем "Открываем файл "user32.dll""?
Это для доступа к API функции SetTimer.
Дело в том, что демо версии PureBasic напрямую не поддерживают API, вот и приходится так извращяться.
А полная версия PureBasic непосредственно поддерживает API, поэтому нет необходимости разбиратся в системными DLLками.
; Эта процедура вызывается по таймеру два раза в секунду.
Procedure DateStatusBar()
Time.s = FormatDate("%hh:%ii:%ss", Date() ) ; Узнаём текущее время
StatusBarText(0, 0,Time) ; Выводим его на строку состояния
EndProcedure
; Открываем окно
If OpenWindow(0,0,0,200,100,"Строка состояния",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
; Создаём строку состояния
CreateStatusBar(0, WindowID(0))
; Делим её на области
AddStatusBarField(80)
AddStatusBarField(120)
StatusBarText(0, 1, " Текущее время") ; Выводим строку в область с идентификатором 1.
SetTimer_(WindowID(0), 1, 500, @DateStatusBar() ) ; Вызываем функцию "SetTimer"
Repeat
Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow
; Вызываем функцию "KillTimer"
KillTimer_(WindowID(0),1)
EndIf
EndIf
EndДавайте уж, что бы завершить и логически закончить тему доделаем наш редактор и добавим некоторые функции, типа копировать, вставить, работа с мышью и тп... У кого какие есть предложения?
Сразу говорю это код Петра!
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(re,pt\x|(pt\y<<32))
EndProcedure
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
If CreatePopupMenu(1)
MenuItem(1,"Отменить")
MenuItem(2,"Повторить")
MenuBar()
MenuItem(3,"Вырезать")
MenuItem(4,"Копировать")
MenuItem(5,"Вставить")
MenuItem(6,"Удалить")
MenuBar()
MenuItem(7,"Выделить всё")
EndIf
Repeat
Event=WaitWindowEvent()
If Event=#WM_RBUTTONUP
If IsMouseOver(GadgetID(0))
DisplayPopupMenu(1,WindowID(0))
EndIf
EndIf
If Event=#PB_Event_Menu
Menu=EventMenu()
Select Menu
Case 1 ; "Отменить"
SendMessage_(GadgetID(0), #EM_UNDO, #Null, #Null)
Case 2 ; "Повторить"
SendMessage_(GadgetID(0), #EM_REDO, #Null, #Null)
Case 3, 4 ; "Вырезать", "Копировать"
SendMessage_(GadgetID(0), #EM_GETSEL, @Min,@Max)
If Min<>Max
If Min<Max
xx=Max-Min
Else
xx=Min-Max
EndIf
lpText.s=Space(xx)
SendMessage_(GadgetID(0), #EM_GETSELTEXT, #Null, @lpText)
SetClipboardText(lpText)
If Menu=3 ; "Вырезать"
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")
EndIf
EndIf
Case 5 ; "Вставить"
Text.s=GetClipboardText()
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@Text)
Case 6 ; "Удалить"
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")
Case 7 ; "Выделить всё"
SendMessage_(GadgetID(0),#EM_SETSEL,0,99999999)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIfОтредактировано haav (31.01.2010 20:05:34)
мм. давольно таки интересно. Надо будет его мне включить в вышенаписанный редактор. Если не сложно объясните значение первой процедуры
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(re,pt\x|(pt\y<<32))
EndProcedure
Эта процедура позволяет узнать находится ли курсор мышки над окном или гаджетом.
Если находится, то процедура возращает число 1, а иначе - 0.
PS.
daiomik, у тебя есть опыт работы с API функциями винды?
daiomik, у тебя есть опыт работы с API функциями винды?
Увы нет.
Вроде все соединил, но вылазит ошибка при нажатии RightButton. Вот код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(re,pt\x|(pt\y<<32))
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
TextGadget(0, 10, 10, 250, 20, "Это окно О программе (Left)")
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
; Эта процедура сохраняет данные из редактора в файл.
Procedure SaveFile(File.s)
If CreateFile(0,File) ; Создание файла на диске
Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text
WriteString(0, Text) ; Запись текста в файл
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось сохранить файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
If CreatePopupMenu(1)
MenuItem(1,"Отменить")
MenuItem(2,"Повторить")
MenuBar()
MenuItem(3,"Вырезать")
MenuItem(4,"Копировать")
MenuItem(5,"Вставить")
MenuItem(6,"Удалить")
MenuBar()
MenuItem(7,"Выделить всё")
EndIf
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Event=#WM_RBUTTONUP
If IsMouseOver(GadgetID(0))
DisplayPopupMenu(1,WindowID(0))
EndIf
EndIf
If Event=#PB_Event_Menu
Menu=EventMenu()
Select Menu
Case 1 ; "Отменить"
SendMessage_(GadgetID(0), #EM_UNDO, #Null, #Null)
Case 2 ; "Повторить"
SendMessage_(GadgetID(0), #EM_REDO, #Null, #Null)
Case 3, 4 ; "Вырезать", "Копировать"
SendMessage_(GadgetID(0), #EM_GETSEL, @Min,@Max)
If Min<>Max
If Min<Max
xx=Max-Min
Else
xx=Min-Max
EndIf
lpText.s=Space(xx)
SendMessage_(GadgetID(0), #EM_GETSELTEXT, #Null, @lpText)
SetClipboardText(lpText)
If Menu=3 ; "Вырезать"
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")
EndIf
EndIf
Case 5 ; "Вставить"
Text.s=GetClipboardText()
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@Text)
Case 6 ; "Удалить"
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")
Case 7 ; "Выделить всё"
SendMessage_(GadgetID(0),#EM_SETSEL,0,99999999)
EndSelect
EndIf
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
ElseIf Menu=#MENU_2
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIf
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.Отредактировано daiomik (31.01.2010 20:27:33)
Вот так вроде правильно
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(re,pt\x|(pt\y<<32))
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
TextGadget(0, 10, 10, 250, 20, "Это окно О программе (Left)")
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
; Эта процедура сохраняет данные из редактора в файл.
Procedure SaveFile(File.s)
If CreateFile(0,File) ; Создание файла на диске
Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text
WriteString(0, Text) ; Запись текста в файл
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось сохранить файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
If CreatePopupMenu(1)
MenuItem(1,"Отменить")
MenuItem(2,"Повторить")
MenuBar()
MenuItem(3,"Вырезать")
MenuItem(4,"Копировать")
MenuItem(5,"Вставить")
MenuItem(6,"Удалить")
MenuBar()
MenuItem(7,"Выделить всё")
EndIf
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Event=#WM_RBUTTONUP
If IsMouseOver(GadgetID(1))
DisplayPopupMenu(1,WindowID(#Window_0))
EndIf
EndIf
If Event=#PB_Event_Menu
Menu=EventMenu()
Select Menu
Case 1 ; "Отменить"
SendMessage_(GadgetID(1), #EM_UNDO, #Null, #Null)
Case 2 ; "Повторить"
SendMessage_(GadgetID(1), #EM_REDO, #Null, #Null)
Case 3, 4 ; "Вырезать", "Копировать"
SendMessage_(GadgetID(1), #EM_GETSEL, @Min,@Max)
If Min<>Max
If Min<Max
xx=Max-Min
Else
xx=Min-Max
EndIf
lpText.s=Space(xx)
SendMessage_(GadgetID(1), #EM_GETSELTEXT, #Null, @lpText)
SetClipboardText(lpText)
If Menu=3 ; "Вырезать"
SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")
EndIf
EndIf
Case 5 ; "Вставить"
Text.s=GetClipboardText()
SendMessage_(GadgetID(1),#EM_REPLACESEL,0,@Text)
Case 6 ; "Удалить"
SendMessage_(GadgetID(1),#EM_REPLACESEL,0,@"")
Case 7 ; "Выделить всё"
SendMessage_(GadgetID(1),#EM_SETSEL,0,99999999)
EndSelect
EndIf
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
ElseIf Menu=#MENU_2
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIf
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.Отредактировано haav (31.01.2010 20:36:21)
Так то оно правильно, но вот ошибки всеравно выводит, если на пункты этого меню жать
Подправил. Да там похоже еще баги остались.....
Отредактировано haav (31.01.2010 20:38:31)
хм.. странно. При нажатии отменить появляется окно открытия, а при нажатии повторить прога вылетает
Ошибка потому, что у редактора идентификатор 1, а добавленый код обращался к гаджету с идентификатором 0, которого не существует в проге.
Кроме того, добавил меню "Правка".
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
#Window_1
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration 20
#MENU_1
#MENU_2
#MENU_4
#MENU_6
#MENU_3
#MENU_8
#MENU_9
EndEnumeration
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
ProcedureReturn PtInRect_(re,pt\x|(pt\y<<32))
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(#MENU_1, "Открыть")
MenuItem(#MENU_2, "Сохранить")
MenuBar()
MenuItem(#MENU_4, "Выход")
MenuTitle("Правка")
MenuItem(1,"Отменить")
MenuItem(2,"Повторить")
MenuBar()
MenuItem(3,"Вырезать")
MenuItem(4,"Копировать")
MenuItem(5,"Вставить")
MenuItem(6,"Удалить")
MenuBar()
MenuItem(7,"Выделить всё")
MenuTitle("Помощь")
MenuItem(#MENU_8, "О программе")
EndIf
If CreateGadgetList(WindowID(#Window_0))
EndIf
EndIf
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_1))
TextGadget(0, 10, 10, 250, 20, "Это окно О программе (Left)")
EndIf
EndIf
EndProcedure
; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
If ReadFile(0, File) ; Открытие файла.
FileSize=Lof(0) ; Определение размера файла в байтах.
*mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
SetGadgetText(1, PeekS(*mem)) ; Загрузка текста в редактор.
FreeMemory(*mem) ; Освобождение памяти.
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось открыть файл")
EndIf
EndProcedure
; Эта процедура сохраняет данные из редактора в файл.
Procedure SaveFile(File.s)
If CreateFile(0,File) ; Создание файла на диске
Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text
WriteString(0, Text) ; Запись текста в файл
CloseFile(0) ; Закрытие файла.
Else
MessageRequester("Ошибка", "Не удалось сохранить файл")
EndIf
EndProcedure
Open_Window_0()
EditorGadget(1,2,2,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров
If CreatePopupMenu(1)
MenuItem(1,"Отменить")
MenuItem(2,"Повторить")
MenuBar()
MenuItem(3,"Вырезать")
MenuItem(4,"Копировать")
MenuItem(5,"Вставить")
MenuItem(6,"Удалить")
MenuBar()
MenuItem(7,"Выделить всё")
EndIf
Repeat ; Начало главного цикла Repeat-Until.
Event=WaitWindowEvent() ; Получаем идентификатор события.
Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
Menu=EventMenu()
If Event=#WM_RBUTTONUP
If IsMouseOver(GadgetID(1))
DisplayPopupMenu(1,WindowID(#Window_0))
EndIf
EndIf
If Event=#PB_Event_Menu
Select Menu
Case 1 ; "Отменить"
SendMessage_(GadgetID(1), #EM_UNDO, #Null, #Null)
Case 2 ; "Повторить"
SendMessage_(GadgetID(1), #EM_REDO, #Null, #Null)
Case 3, 4 ; "Вырезать", "Копировать"
SendMessage_(GadgetID(1), #EM_GETSEL, @Min,@Max)
If Min<>Max
If Min<Max
xx=Max-Min
Else
xx=Min-Max
EndIf
lpText.s=Space(xx)
SendMessage_(GadgetID(1), #EM_GETSELTEXT, #Null, @lpText)
SetClipboardText(lpText)
If Menu=3 ; "Вырезать"
SendMessage_(GadgetID(1),#EM_REPLACESEL,0,@"")
EndIf
EndIf
Case 5 ; "Вставить"
Text.s=GetClipboardText()
SendMessage_(GadgetID(1),#EM_REPLACESEL,0,@Text)
Case 6 ; "Удалить"
SendMessage_(GadgetID(1),#EM_REPLACESEL,0,@"")
Case 7 ; "Выделить всё"
SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)
EndSelect
EndIf
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
If Event=#PB_Event_Menu ; Произошло событие в меню
If Menu=#MENU_8 ; Пункт меню "О программе".
Open_Window_1()
ElseIf Menu=#MENU_4
End
ElseIf Menu=#MENU_1
File.s=OpenFileRequester("Открыть файл", "", "Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
LoadFile(File)
EndIf
ElseIf Menu=#MENU_2
File.s=SaveFileRequester("Сохранить файл", "","Текстовые файлы|*.txt|Все файлы|*.*", 0)
If File<>""
If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
File=File+".txt" ; добавляем его
EndIf
SaveFile(File)
EndIf
EndIf
EndIf
If Event=#PB_Event_SizeWindow
ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-MenuHeight()-4)
EndIf
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
If Event = #PB_Event_CloseWindow
CloseWindow(#Window_1)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.хм.. странно. При нажатии отменить появляется окно открытия, а при нажатии повторить прога вылетает
А там просто совпали идентификаторы у пунктов меню созданых визуальным редактором и вновь добавленных.
Чтобы избавится от этого с минимумом переделок, сделал так
Enumeration 20 #MENU_1 #MENU_2 #MENU_4 #MENU_6 #MENU_3 #MENU_8 #MENU_9 EndEnumeration
При этом нумирация начинается с 20 и конфликтов нет.
Теперь все четко. Думаю редактор можно назвать оконченным. Все ясно главное
Сравнил этот редактор по скорости с блокнотом:
При размере текстового файла 1 мб, блокнот проигрывает.
При размере текстового файла 22 мб, редактор виснет, а блокнот открывает где то через 30-40 секунд
Интересно почему он виснет?
При размере текстового файла 22 мб, редактор виснет
Вот набросал прогу, создающую такие гиганские текстовые файлы.
If CreateFile(1,"E:\test.txt")
*mem=AllocateMemory(20000001)
For i=0 To 20000000
x1:
x.a=Random(255)
If x<32 And (x<>13 Or x<>10)
Goto x1
EndIf
PokeA(*mem+i, x)
Next i
WriteData(1,*mem,20000000)
CloseFile(1)
FreeMemory(*mem)
MessageRequester("", "Файл создан", #MB_OK|#MB_ICONINFORMATION)
EndIfЗапускать нужно с отключённым отладчиком, а то нужно будет долго ждать.
Так вот, при открытии таких массивых файлов, виснет также Notepad++, SciTE и редактор пурика.
Так что возможно это как-то с виндой связанно.
| Вопросы новичка (продолжение…) | Вопросы по PureBasic | 29.06.2024 |
| Скорее, это теоретический вопрос о правах в директории. | OffTop | 16.09.2022 |
| Вопрос по отладке | Вопросы по PureBasic | 26.01.2017 |
| Три вопроса по созданию браузера. | Вопросы по PureBasic | 01.11.2010 |
| вопрос о точности типов данных | Вопросы по PureBasic | 20.05.2021 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка