только почемуто высота этого поля слишком маленькая. А при изменении значений
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 » Вопросы новичка