Спасибо!
Вопросы новичка
Сообщений 511 страница 540 из 1000
Поделиться51211.07.2010 01:29:20
Такая ситуация: в программе есть окно настроек. Как грамотно сделать так, что бы когда пользователь изменил настройки и нажал сохранить их, то при последующем открытии этого окна настроек (само окно представлено в виде процедуры) все изменения не стирались, а оставались? Не уж то нужно делать файл iniдля этого77
Поделиться51311.07.2010 03:36:37
daiomik
либо файл с записями настроек, либо запись в реестр в свою же созданную ветку......
Поделиться51411.07.2010 14:05:23
Как грамотно сделать так, что бы когда пользователь изменил настройки и нажал сохранить их, то при последующем открытии этого окна настроек (само окно представлено в виде процедуры) все изменения не стирались, а оставались?
При закрытии окна, нужно копировать данные с гаджетов в перемнные.
Если гаджетов много, то лучше использовать структуру чтобы не "забивать" программу глобальными переменными.
Structure Pref String1.s String2.s String3.s String4.s CheckBox.l Spin.l TrackBar.l ComboBox.l EndStructure PrefWin.Pref Procedure Open_Window_0() Shared PrefWin If OpenWindow(1, 268, 254, 236, 170, "Настройки", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) StringGadget(1, 8, 12, 80, 20, PrefWin\String1) StringGadget(2, 112, 12, 108, 20, PrefWin\String2) StringGadget(3, 8, 44, 80, 20, PrefWin\String3) StringGadget(4, 112, 44, 108, 20, PrefWin\String4) CheckBoxGadget(5, 12, 76, 68, 16, "галочка") SetGadgetState(5, PrefWin\CheckBox) SpinGadget(6, 112, 72, 44, 20, 0, 10,#PB_Spin_Numeric) SetGadgetState(6, PrefWin\Spin) TrackBarGadget(7, 16, 108, 200, 20, 0, 10) SetGadgetState(7,PrefWin\TrackBar) ComboBoxGadget(8, 168, 72, 52, 20) For i=1 To 10 AddGadgetItem(8,-1,Str(i)) Next i SetGadgetState(8,PrefWin\ComboBox) ButtonGadget(9, 10, 140, 80,24,"Сохранить") ButtonGadget(10, 150, 140, 80,24,"Отмена") EndIf EndProcedure OpenWindow(0,0,0,200,100,"Главное окно",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ButtonGadget(0,50,36,100,24,"Ностройки") Repeat Event=WaitWindowEvent() Window=EventWindow() If Window=0 If Event=#PB_Event_Gadget And EventGadget()=0 Open_Window_0() EndIf ElseIf Window=1 If Event=#PB_Event_CloseWindow CloseWindow(1) ElseIf Event=#PB_Event_Gadget Select EventGadget() Case 9 PrefWin\String1=GetGadgetText(1) PrefWin\String2=GetGadgetText(2) PrefWin\String3=GetGadgetText(3) PrefWin\String4=GetGadgetText(4) PrefWin\CheckBox=GetGadgetState(5) PrefWin\Spin= GetGadgetState(6) PrefWin\TrackBar=GetGadgetState(7) PrefWin\ComboBox=GetGadgetState(8) CloseWindow(1) Case 10 CloseWindow(1) EndSelect EndIf EndIf Until Event=#PB_Event_CloseWindow And Window=0
Не уж то нужно делать файл ini для этого
Да, если нужно сохранить настройки при завершении работы программы.
Поделиться51511.07.2010 16:42:42
Structure Pref String1.s String2.s String3.s String4.s CheckBox.l Spin.l TrackBar.l ComboBox.l EndStructure PrefWin.Pref Procedure Open_Window_0() Shared PrefWin If OpenWindow(1, 268, 254, 236, 170, "Настройки", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) StringGadget(1, 8, 12, 80, 20, PrefWin\String1) StringGadget(2, 112, 12, 108, 20, PrefWin\String2) StringGadget(3, 8, 44, 80, 20, PrefWin\String3) StringGadget(4, 112, 44, 108, 20, PrefWin\String4) CheckBoxGadget(5, 12, 76, 68, 16, "галочка") SetGadgetState(5, PrefWin\CheckBox) SpinGadget(6, 112, 72, 44, 20, 0, 10,#PB_Spin_Numeric) SetGadgetState(6, PrefWin\Spin) TrackBarGadget(7, 16, 108, 200, 20, 0, 10) SetGadgetState(7,PrefWin\TrackBar) ComboBoxGadget(8, 168, 72, 52, 20) For i=1 To 10 AddGadgetItem(8,-1,Str(i)) Next i SetGadgetState(8,PrefWin\ComboBox) ButtonGadget(9, 10, 140, 80,24,"Сохранить") ButtonGadget(10, 150, 140, 80,24,"Отмена") ;-----Чтение параметров----------------- If OpenPreferences("inform.ini") PreferenceGroup("Настройки") SetGadgetText(1, ReadPreferenceString("Путь1", "")) SetGadgetText(2, ReadPreferenceString("Путь2", "")) SetGadgetText(3, ReadPreferenceString("Путь3", "")) SetGadgetText(4, ReadPreferenceString("Путь4", "")) SetGadgetState(5, Val(ReadPreferenceString("Путь5", ""))) SetGadgetState(6, Val(ReadPreferenceString("Путь6", ""))) SetGadgetState(7, Val(ReadPreferenceString("Путь7", ""))) SetGadgetState(8, Val(ReadPreferenceString("Путь8", ""))) ClosePreferences() EndIf ;---------------------------------------------------------------- EndIf EndProcedure OpenWindow(0,0,0,200,100,"Главное окно",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ButtonGadget(0,50,36,100,24,"Ностройки") Repeat Event=WaitWindowEvent() Window=EventWindow() If Window=0 If Event=#PB_Event_Gadget And EventGadget()=0 Open_Window_0() EndIf ElseIf Window=1 If Event=#PB_Event_CloseWindow CloseWindow(1) ElseIf Event=#PB_Event_Gadget Select EventGadget() Case 9 PrefWin\String1=GetGadgetText(1) PrefWin\String2=GetGadgetText(2) PrefWin\String3=GetGadgetText(3) PrefWin\String4=GetGadgetText(4) PrefWin\CheckBox=GetGadgetState(5) PrefWin\Spin= GetGadgetState(6) PrefWin\TrackBar=GetGadgetState(7) PrefWin\ComboBox=GetGadgetState(8) CloseWindow(1) Case 10 CloseWindow(1) EndSelect EndIf EndIf If Event = #PB_Event_CloseWindow And Window=0 ;----Запись параметров перед выходом----------- OpenPreferences("inform.ini") RemovePreferenceGroup("Настройки") PreferenceGroup("Настройки") WritePreferenceString("Путь1",PrefWin\String1) WritePreferenceString("Путь2",PrefWin\String2) WritePreferenceString("Путь3",PrefWin\String3) WritePreferenceString("Путь4",PrefWin\String4) WritePreferenceString("Путь5",Str(PrefWin\CheckBox)) WritePreferenceString("Путь6",Str(PrefWin\Spin)) WritePreferenceString("Путь7",Str(PrefWin\TrackBar)) WritePreferenceString("Путь8",Str(PrefWin\ComboBox)) ClosePreferences() ;--------------------------------------------- Break EndIf ForEver
Поделиться51611.07.2010 17:22:56
Петр, mirashic спасибо!
Поделиться51711.07.2010 17:31:12
mirashic
Тогда лучше так
Structure Pref String1.s String2.s String3.s String4.s CheckBox.l Spin.l TrackBar.l ComboBox.l EndStructure PrefWin.Pref ;-----Чтение параметров----------------- OpenPreferences("inform.ini") PreferenceGroup("Настройки") PrefWin\String1=ReadPreferenceString("Путь1", "") PrefWin\String2=ReadPreferenceString("Путь2", "") PrefWin\String3=ReadPreferenceString("Путь3", "") PrefWin\String4=ReadPreferenceString("Путь4", "") PrefWin\CheckBox=ReadPreferenceLong("Путь5", 0) PrefWin\Spin= ReadPreferenceLong("Путь6", 0) PrefWin\TrackBar=ReadPreferenceLong("Путь7", 0) PrefWin\ComboBox=ReadPreferenceLong("Путь8", 0) ClosePreferences() ;---------------------------------------------------------------- Procedure Open_Window_0() Shared PrefWin If OpenWindow(1, 268, 254, 236, 170, "Настройки", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) StringGadget(1, 8, 12, 80, 20, PrefWin\String1) StringGadget(2, 112, 12, 108, 20, PrefWin\String2) StringGadget(3, 8, 44, 80, 20, PrefWin\String3) StringGadget(4, 112, 44, 108, 20, PrefWin\String4) CheckBoxGadget(5, 12, 76, 68, 16, "галочка") SetGadgetState(5, PrefWin\CheckBox) SpinGadget(6, 112, 72, 44, 20, 0, 10,#PB_Spin_Numeric) SetGadgetState(6, PrefWin\Spin) TrackBarGadget(7, 16, 108, 200, 20, 0, 10) SetGadgetState(7,PrefWin\TrackBar) ComboBoxGadget(8, 168, 72, 52, 20) For i=1 To 10 AddGadgetItem(8,-1,Str(i)) Next i SetGadgetState(8,PrefWin\ComboBox) ButtonGadget(9, 10, 140, 80,24,"Сохранить") ButtonGadget(10, 150, 140, 80,24,"Отмена") EndIf EndProcedure OpenWindow(0,0,0,200,100,"Главное окно",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) ButtonGadget(0,50,36,100,24,"Ностройки") Repeat Event=WaitWindowEvent() Window=EventWindow() If Window=0 If Event=#PB_Event_Gadget And EventGadget()=0 Open_Window_0() EndIf ElseIf Window=1 If Event=#PB_Event_CloseWindow CloseWindow(1) ElseIf Event=#PB_Event_Gadget Select EventGadget() Case 9 PrefWin\String1=GetGadgetText(1) PrefWin\String2=GetGadgetText(2) PrefWin\String3=GetGadgetText(3) PrefWin\String4=GetGadgetText(4) PrefWin\CheckBox=GetGadgetState(5) PrefWin\Spin= GetGadgetState(6) PrefWin\TrackBar=GetGadgetState(7) PrefWin\ComboBox=GetGadgetState(8) CloseWindow(1) Case 10 CloseWindow(1) EndSelect EndIf EndIf If Event = #PB_Event_CloseWindow And Window=0 ;----Запись параметров перед выходом----------- If CreatePreferences("inform.ini") PreferenceGroup("Настройки") WritePreferenceString("Путь1",PrefWin\String1) WritePreferenceString("Путь2",PrefWin\String2) WritePreferenceString("Путь3",PrefWin\String3) WritePreferenceString("Путь4",PrefWin\String4) WritePreferenceLong("Путь5",PrefWin\CheckBox) WritePreferenceLong("Путь6",PrefWin\Spin) WritePreferenceLong("Путь7",PrefWin\TrackBar) WritePreferenceLong("Путь8",PrefWin\ComboBox) ClosePreferences() EndIf ;--------------------------------------------- Break EndIf ForEver
В твоём варианте, при закрытии окна, данные записываются в структуру, а при следующем открытии читаются из файла и игнорируются из структуры.
Поделиться51811.07.2010 19:21:02
Наверно так лучше...
Может при закрытии программы, перед If OpenPreferences("inform.ini") убрать
оператор If и далее End ...
Если был удалён или потерян, случайно, файл настройки - он будет вновь создан
и можно благополучно дальше работать...
Поделиться51911.07.2010 19:27:37
Может при закрытии программы, перед If OpenPreferences("inform.ini") убрать
оператор If и далее End ...
Наверно имелось в виду при открытии программы?
Убрал.
А при закрытии лучше не убирать, ведь если нет доступа к файлу, то туда всё равно ничего не запишешь.
Поделиться52013.07.2010 11:48:23
Поддерживается ли работа с документами doc в PB? То есть могу ли я применять все операции и команды string к doc файлам?
Поделиться52113.07.2010 12:55:37
Непосредственно работа с DOC не поддерживается, но можно схитрить использовав браузер. Но в том случае, должен быть установлен Word.
Есть непосредственная поддержка документов в формате RTF. Устроит?
Поделиться52213.07.2010 12:59:45
эммм..немного не понял. Давай лучше объясню задумку: есть неопределенное колличество doc файлов в какой-то определенной папке. Нужно что бы программа открывала каждый файл по отдельности и выполняла в нем некие манипуляции и при чем это все происходило со всеми файлами по порядку в цикле. С txt проблем нет. А вот с doc не знаю что делать
Поделиться52313.07.2010 13:04:49
Нужно изучать структуру doc файлов...
Поделиться52413.07.2010 13:58:56
мне нужно просто тупа с одного doc файла скопировать текст в другой doc файл. Ну ладно, пусть останется только txt
Поделиться52513.07.2010 14:07:06
Скопировать полностью или только частично?
Поделиться52613.07.2010 14:49:39
Смотри: есть список файлов doc (от 0 до +беск). Мне нужно что бы текст из всех этих файлов вставлялся в один файл например через какой!нибудь разделитель:
текст файла 1
------------------
текст файла 2
------------------
текст файла 3
------------------
текст файла 4
------------------
текст файла 5
------------------
и тд
С txt я проблем в этом не вижу: команд string вполне хватит
Поделиться52713.07.2010 15:04:05
Можно попробовать тупо дописывать в конец файла....
Поделиться52813.07.2010 16:21:29
Можно попробовать тупо дописывать в конец файла....
ммм. а какой командой?
Отредактировано daiomik (13.07.2010 16:22:01)
Поделиться52913.07.2010 16:33:24
ммм. а какой командой?
Так же как и с TXT
If OpenFile(0, "Test.doc") ; Открываем файл для чтения и записи FileSeek(0, Lof(0)) ; Переходим в конец файла WriteStringN(0, String.s) ; В переменной String должен быть текст из предыдущего файла. CloseFile(0) EndIf
Поделиться53013.07.2010 16:48:27
Спасибо, буду пробовать
Поделиться53127.07.2010 22:11:05
Можно ли увеличить ТОЛЩИНУ сплитера между двумя гаджетами? Что то не нашел такого атрибуту там
Поделиться53227.07.2010 22:49:04
Можно ли увеличить ТОЛЩИНУ сплитера между двумя гаджетами? Что то не нашел такого атрибуту там
Можно один из гаджетов поместить в контейнер с небольшим отступом. Тогда визуально, толщина сплиттера увеличится.
Поделиться53328.07.2010 08:41:17
ясно
Поделиться53428.07.2010 12:53:16
Не могу понять почему не работают эти строчки:
chas1.l=Str(GetGadgetText(#Spin_1)) Debug(chas1)
так тоже не выходит:
chas1.l=GetGadgetText(#Spin_1) Debug(chas1)
в #Spin_1 находятся числа от 0 до 23. Как я понимаю их нужно переводить для типа long..Что то я запутался с этими типами..
PS: забыл сказать, что все это находится в процедуре..возможно нужно поставить global. Пробовал,но какая то ошибка вылазит. Что то типа бат фарматы не подходят
Отредактировано daiomik (28.07.2010 13:10:06)
Поделиться53528.07.2010 13:12:24
Вот так
chas1.l=Val(GetGadgetText(#Spin_1)) Debug chas1
или так
chas1.l=GetGadgetState(#Spin_1) Debug chas1
будет работать как надо.
Поделиться53628.07.2010 15:12:53
Можно ли как нибудь сделать, что бы в SpinGadget были числа от 00 до 23?? То есть 01,02,03,04,05,06,07,08,09,10,.....23. А то приходится громадные условия писать, что бы там где от 0 до 9 прибавляю 0 спереди
Поделиться53728.07.2010 16:02:09
Функция RSet как раз для этого.
String.s=RSet("8",2,"0") Debug String
Хотя с условиями тоже не сложно
String.s="8" If Val(String)<10 String="0"+String EndIf Debug String
Поделиться53828.07.2010 16:05:27
Функция RSet как раз для этого.
хорошая функция..
То то и оно, что условий много будет, так как у меня SpinGadget-ов 4. Так можно или нет создать в нем текст от 00 до 23??
Поделиться53928.07.2010 16:16:58
PS: мне это все нужно для часов, где я таким способом указываю время: часы: от 00 до 23 и минуты: от 00 до 59
Поделиться54028.07.2010 16:22:13
можно или нет создать в нем текст от 00 до 23
If OpenWindow(0, 0, 0, 140, 70, "SpinGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) SpinGadget (0, 20, 20, 100, 25, 0, 23, #PB_Spin_ReadOnly) SetGadgetState (0, 4) : SetGadgetText(0, "04") Repeat Event = WaitWindowEvent() If Event = #PB_Event_Gadget If EventGadget() = 0 SetGadgetText(0,RSet(Str(GetGadgetState(0)),2,"0")) EndIf EndIf Until Event = #PB_Event_CloseWindow EndIf
Похожие темы
Вопросы новичка (продолжение…) | Вопросы по PureBasic | 29.06.2024 |
Скорее, это теоретический вопрос о правах в директории. | OffTop | 16.09.2022 |
Вопрос по отладке | Вопросы по PureBasic | 26.01.2017 |
Три вопроса по созданию браузера. | Вопросы по PureBasic | 01.11.2010 |
вопрос о точности типов данных | Вопросы по PureBasic | 20.05.2021 |