PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка


Вопросы новичка

Сообщений 511 страница 540 из 1000

511

Спасибо!

0

512

Такая ситуация: в программе есть окно настроек. Как грамотно сделать так, что бы когда пользователь изменил настройки и нажал сохранить их, то при последующем открытии этого окна настроек (само окно представлено в виде процедуры) все изменения не стирались, а оставались? Не уж то нужно делать файл iniдля этого77

0

513

daiomik написал(а):

daiomik

либо файл с записями настроек, либо запись в реестр в свою же созданную ветку......

0

514

daiomik написал(а):

Как грамотно сделать так, что бы когда пользователь изменил настройки и нажал сохранить их, то при последующем открытии этого окна настроек (само окно представлено в виде процедуры) все изменения не стирались, а оставались?

При закрытии окна, нужно копировать данные с гаджетов в перемнные.
Если гаджетов много, то лучше использовать структуру чтобы не "забивать" программу глобальными переменными.

Код:
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
daiomik написал(а):

Не уж то нужно делать файл ini для этого

Да, если нужно сохранить настройки при завершении работы программы.

0

515

Код:
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

0

516

Петр, mirashic спасибо!

0

517

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

В твоём варианте, при закрытии окна, данные записываются в структуру, а при следующем открытии читаются из файла и игнорируются из структуры.

0

518

Наверно так лучше...
Может при закрытии программы, перед If OpenPreferences("inform.ini") убрать
оператор If и далее End ...
Если был удалён или потерян,  случайно, файл настройки - он будет вновь создан
и можно благополучно дальше работать...

0

519

mirashic написал(а):

Может при закрытии программы, перед If OpenPreferences("inform.ini") убрать
оператор If и далее End ...

Наверно имелось в виду при открытии программы?
Убрал.
А при закрытии лучше не убирать, ведь если нет доступа к файлу, то туда всё равно ничего не запишешь.

0

520

Поддерживается ли работа с документами doc в PB? То есть могу ли я применять все операции и команды string  к doc файлам?

0

521

Непосредственно работа с DOC не поддерживается, но можно схитрить использовав браузер. Но в том случае, должен быть установлен Word.
Есть непосредственная поддержка документов в формате RTF. Устроит?

0

522

эммм..немного не понял. Давай лучше объясню задумку: есть неопределенное колличество doc файлов в какой-то определенной папке. Нужно что бы программа открывала каждый файл по отдельности и выполняла в нем некие манипуляции и при чем это все происходило со всеми файлами по порядку в цикле. С txt проблем нет. А вот с doc не знаю что делать :dontknow:

0

523

Нужно изучать структуру doc файлов...

0

524

мне нужно просто тупа с одного doc файла скопировать текст в другой doc файл. Ну ладно, пусть останется только txt

0

525

Скопировать полностью или только частично?

0

526

Смотри: есть список файлов doc (от 0 до +беск). Мне нужно что бы текст из всех этих файлов вставлялся в один файл например через какой!нибудь разделитель:
текст файла 1
------------------
текст файла 2
------------------
текст файла 3
------------------
текст файла 4
------------------
текст файла 5
------------------
и тд

С txt я проблем в этом не вижу: команд string вполне хватит

0

527

Можно попробовать тупо дописывать в конец файла....

0

528

Пётр написал(а):

Можно попробовать тупо дописывать в конец файла....

ммм. а какой командой?

Отредактировано daiomik (13.07.2010 16:22:01)

0

529

daiomik написал(а):

ммм. а какой командой?

Так же как и с TXT

Код:
If OpenFile(0, "Test.doc")    ; Открываем файл для чтения и записи
    FileSeek(0, Lof(0))         ; Переходим в конец файла
    WriteStringN(0, String.s)   ; В переменной String должен быть текст из предыдущего файла.
    CloseFile(0)
EndIf

0

530

Спасибо, буду пробовать

0

531

Можно ли увеличить ТОЛЩИНУ сплитера между двумя гаджетами? Что то не нашел такого атрибуту там

0

532

daiomik написал(а):

Можно ли увеличить ТОЛЩИНУ сплитера между двумя гаджетами? Что то не нашел такого атрибуту там

Можно один из гаджетов поместить в контейнер с небольшим отступом. Тогда визуально, толщина сплиттера увеличится.

0

533

ясно

0

534

Не могу понять почему не работают эти строчки:

Код:
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)

0

535

Вот так

Код:
chas1.l=Val(GetGadgetText(#Spin_1))
Debug chas1

или так

Код:
chas1.l=GetGadgetState(#Spin_1)
Debug chas1

будет работать как надо.

0

536

Можно ли как нибудь сделать, что бы в SpinGadget были числа от 00 до 23?? То есть 01,02,03,04,05,06,07,08,09,10,.....23. А то приходится громадные условия писать, что бы там где от 0 до 9 прибавляю 0 спереди :dontknow:

0

537

Функция RSet как раз для этого.

Код:
String.s=RSet("8",2,"0")
Debug String

Хотя с условиями тоже не сложно

Код:
String.s="8"
If Val(String)<10
  String="0"+String
EndIf
Debug String

0

538

Пётр написал(а):

Функция RSet как раз для этого.

хорошая функция..
То то и оно, что условий много будет, так как у меня SpinGadget-ов 4. Так можно или нет создать в нем текст от 00 до 23??

0

539

PS: мне это все нужно для часов, где я таким способом указываю время: часы: от 00 до 23 и минуты: от 00 до 59

0

540

daiomik написал(а):

можно или нет создать в нем текст от 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

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка