PureBasic - форум

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

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


Вы здесь » PureBasic - форум » Вопросы по PureBasic » через поиск сайта не нашел, спрашиваю тут...


через поиск сайта не нашел, спрашиваю тут...

Сообщений 1 страница 14 из 14

1

Всем привет! У меня осенне-зимнее обострение по программированию )))
около года назад я уже пытался написать программу (кто-то может помнит, связанную с телеграфным аппаратом)
свою тему не нашел (да и бог с ней, уж больно специфическая)
но Вы будете смеяться... я её косвенно продолжаю...
вопрос собственно такой:
1. программа выдаёт ошибку что гаджет не инициализирован...
    SetGadgetText(1,TxtH$)

накопилось ещё вопросов... если не лень - помогите...

2. как правильно собрать программу?, а то налепил подпрограмм, а они между собой - не дружат (см. п.1)
3. есть некоторые вещи которые я просто недопонимаю...
    например   #PB_Any
4. Procedure - как я понимаю - это подпрограмма (относительно самостоятельная)

если нужно могу вывалить заготовку...

Отредактировано Юр Яр (02.12.2015 22:19:40)

0

2

Юр Яр написал(а):

1. программа выдаёт ошибку что гаджет не инициализирован...    SetGadgetText(1,TxtH$)

Значит гаджета с идентификатором 1 не существует на момент выполнения этой строки кода.

Юр Яр написал(а):

2. как правильно собрать программу?, а то налепил подпрограмм, а они между собой - не дружат (см. п.1)

Наверное нужно переделать прогу.

Юр Яр написал(а):

3. есть некоторые вещи которые я просто недопонимаю...    например   #PB_Any

Это генерация идентификатора функцией, а не явное его задание.

Юр Яр написал(а):

4. Procedure - как я понимаю - это подпрограмма (относительно самостоятельная)

В PureBasic это функция. https://ru.wikipedia.org/wiki/Функция_(программирование)

0

3

Юр Яр написал(а):

1. программа выдаёт ошибку что гаджет не инициализирован...
    SetGadgetText(1,TxtH$)


В процессе выполнения программы гаджет сначала нужно создать. А уж потом к нему обращаться.

Вопросы такого уровня что не знаю как отвечать (поскольку преподаватель из меня - никакой).
Может сначала учебник для начинающих почитаешь чтобы было что обсуждать?

0

4

Для начала нужно тут прочитать главы 2, 3 и 4. http://purebasic.info/Chapters/index.html
И это все прочитать. http://pure-basic.narod.ru/docs/books/contents.html

0

5

Приветствую! П(р)очитал... с некоторыми вещами разобрался, но... общего понимания пока не наступило...
Я так и не понял почему появляются сообщения про инициализацию, почему отсутствуют текущие листы гаджетов...
прошу либо разъяснить либо ткнуть в конкретные места для почитать...
краткое описание текущей проблемы:
- открываю окно, в нём есть TrackBarGadget и окошко показывающее цифрами его положение
- при его перемещении все работает (даже циферки в окошке) но !!!
- потом я открываю, закрываю окошко (справочку) из меню (всё работает)  и при попытке потаскать TrackBarGadget прога вылетает с ошибкой
что "отсутствует текущий список гаджетов"
вопрос: где вообще этот список? и почему он отсутствует...

Код:
Global Shirina = 60 


Procedure Spravka1 () ; окно "подсчет слов"         
  String.s="п.49 Количество слов, объявляемых в служебном заголовке телеграммы, служит    "+
           "     для контроля правильности передачи и приёма слов в телеграммах на        "+
           
  
  "Примеры:              15-го      -  1 слово                                   "+
"                      50-летием  -  1 слово                                     "
  If IsWindow(2)<>0 ; Проверяем, существует ли окно с идентификатором 1  
    SetActiveWindow(2) ; Если окно существует, отображаем его  
  Else                 ; Если окна нет, создаём его                 
    If LoadFont(2, "Courier New", 10,#PB_Font_Bold)
      SetGadgetFont(#PB_Default, FontID(2))   
      OpenWindow(2, 0, 0, 655, 400, "Руководство по СЭС на телеграфных станциях узлов связи МО СССР гласит:", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      EditorGadget(2, 0, 0, 645, 395)
      StringGadget(2, 5, 5, 645, 395, String,#PB_String_ReadOnly|#ES_AUTOVSCROLL|#WS_VSCROLL|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT|#ES_MULTILINE)
      SendMessage_(GadgetID(2),#EM_SETTARGETDEVICE, #Null, 0)
      Repeat :
      Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf
    CloseWindow(2) 
  EndIf  
EndProcedure

Procedure LoadFile(Gadget,FileName.s) ;загружает текст из файла 
  Text.s=""                           ; Очищаем строковую переменную  
  If ReadFile(1,FileName)             ; Открываем файл  
    Size=Lof(1)                       ; Узнаём размер файла  
    If Size>0  
      Text=Space(Size) ; Заполняем переменную числом пробелов, равным размеру файла  
      ReadData(1,@Text,Size) ; Читаем данные из файла в строковую переменную "Text"  
    EndIf  
    SetGadgetText(Gadget,Text) ; Помещаем данные из переменной "Text" в редактор  
    CloseFile(1)               ; Закрываем файл  
  Else  
    MessageRequester("Ошибка","Не удалось открыть файл!")  
  EndIf  
EndProcedure  

Procedure SaveFile(Gadget,FileName.s);сохраняет текст в файле  
  If CreateFile(2,FileName)          ; Создаём пустой файл  
    Text.s=GetGadgetText(Gadget)     ; Считываем данные из редактора в строковую переменную "Text"  
    WriteString(2,Text)              ; и сохраняем их как одну большую строку  
    CloseFile(2)                     ; Закрываем файл  
  Else  
    MessageRequester("Ошибка","Не удалось сохранить файл!")  
  EndIf  
EndProcedure  

Procedure Menu1(); Создаём меню  
  If CreateMenu(0,WindowID(0))  
    ; Создаём новый заголовок меню  
    ;MenuTitle("Файл")  
    ; Создаём пункты меню  
    MenuItem(0,"Открыть")  
    MenuItem(1,"Сохранить")  
    MenuItem(2,"Заменить")        
    MenuItem(3,"Выровнять")     
    MenuItem(4,"Шаблон")          
    ; Создаём новый заголовок меню  
    MenuTitle("Справка") 
    MenuItem(5,"Подсчет слов")     
    MenuBar()
    MenuItem(6,"Настройка порта")   
    MenuItem(7,"Схема подключения") 
    MenuBar()
    MenuItem(8,"О программе") 
    ;создаём кнопки
    ButtonGadget(9, 5, 5, 130, 20,   "пуншировать");:DisableGadget(9,1)
    GadgetToolTip(9, "отправляет текст на телеграфный аппарат") 
    ButtonGadget(10, 135, 5, 50, 20,   "пауза");:DisableGadget(10,1)
    GadgetToolTip(10, "приостанавливает отправку текста на телеграфный аппарат") 
    ButtonGadget(11, 185, 5, 50, 20,   "сброс");:DisableGadget(11,1)
    GadgetToolTip(11, "отменяет пуншировку") 
  EndIf 
EndProcedure

Procedure TrackBar1(Shirina)
  
  If TrackBarGadget(23, 1, 27, 767, 20, 1, 69, #PB_TrackBar_Ticks)
    SetGadgetState(23, Shirina)
    TextGadget    (22, 770, 25, 50, 20, StrU(Shirina), #PB_Text_Center)
    SetGadgetFont(22, LoadFont(0, "Courier New", 14)) ; Устанавливаем шрифт "Courier New" с размером 14
  EndIf  
EndProcedure

Procedure OKHO1()
  If IsWindow(1)<>0 ; Проверяем, существует ли окно с идентификатором 1  
    SetActiveWindow(1) ; Если окно существует, отображаем его  
  Else                 ; Если окна нет, создаём его  
    If OpenWindow(1,0,0,200,120,"О программе",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
      ;If CreateGadgetList(WindowID(1) )  
      TextGadget(2,70,10,150,15,"  ver. 24.3  ") 
      TextGadget(3,70,35,150,15,"08.12.2015 г.")
      ButtonGadget(4,60,70,80,25,"Ok")  
    EndIf  
  EndIf 
EndProcedure


;*********************************************************************
; Открываем невидимое окно  
If OpenWindow(0,0,0,825,630,"Редактор текста и пуншировщик", #PB_Window_SystemMenu |#PB_Window_ScreenCentered | #PB_Window_Invisible) 
  
  EditorGadget(1,2,50,55,16) ; Создаём редактор  
                             ;SetGadgetFont(1,LoadFont(0,"Arial",10) ) ; Устанавливаем шрифт "Arial" с размером 10  
  SetGadgetFont(1,LoadFont(0,"Courier New", 14))
  
  Menu1() 
  TrackBar1(Shirina)
  
  
  
  
  
  HideWindow(0,0) ; Разрешаем отображение невидимого окна  
  SmartWindowRefresh(0, 1) ; Эта функция уменьшает мерцания окна при изменении его размеров  
                           ;**********************************************************************
  
  Repeat ; Начало главного цикла  
    Event=WaitWindowEvent(); Узнаём текущее событие в программе  
    Menu=EventMenu()       ; Получаем идентификатор активного пункта меню  
    Gadget=EventGadget()   ; Узнаём в каком гаджете произошло событие  
    Window=EventWindow()   ; Узнаём идентификатор активного окна  
    
    If window=0 ; Обработка событий от окна с идентификатором 0  
      
      If Event=#PB_Event_SizeWindow ; Условие будет выполнено при изменении размера окна  
                                    ; Изменяем размер редактора  
        ResizeGadget(1, #PB_Ignore , #PB_Ignore , WindowWidth(0)-60,WindowHeight(0)-52)  
      EndIf  
      
      If Event=516 ; Условие будет выполнено при щелчке ПРАВОЙ кнопкой мыши  
        DisplayPopupMenu(1, WindowID(0)) ; Отображаем контекстное меню  
      EndIf  
      
      If Event = #PB_Event_Gadget And Gadget = 23; если движуха в отображаении позиции выравнивания 
        Shirina = GetGadgetState(23)             ; Узнаем текущую позицию курсора 
        
        Shirina1.s = StrU(GetGadgetState(23))
        TextGadget    (22, 770, 25, 50, 20,Shirina1.s , #PB_Text_Center);печатаем цифру позиции ОШИБКУ ВЫДАЁТ В ЭТОМ МЕСТЕ      SetActiveWindow(0)
        SetGadgetFont(22, LoadFont(0, "Courier New", 14))
      EndIf
      
      If Event=#PB_Event_Menu ; Условие будет выполнено, если произойдёт событие в меню  
        Select Menu           ; Запоминаем идентификатор меню для последующего сравнения в операторах Case  
                              ; Событие в пункте "Открыть" меню  
          Case 0  
            ; Отображаем окно выбора открываемого файла  
            File.s=OpenFileRequester("Открыть файл", "", "*.txt|*.txt|All Files|*.*", 0)  
            If File<>"" ; Условие будет выполнено, если в строковой переменной "File" будет какой-либо текст  
              LoadFile(1,File) ; Вызываем процедуру, открывающую файл  
            EndIf  
            ; Событие в пункте "Сохранить" меню  
          Case 1  
            ; Отображаем окно выбора сохраняемого файла  
            File.s=SaveFileRequester("Сохранение файла", "", "*.txt|*.txt;|All Files|*.*", 0)  
            If File<>""  
              If GetExtensionPart(File)="" ; Условие будет выполнено при отсутствии расширения у файла  
                File=File+".txt"           ; Добавляем расширение  
              EndIf  
              SaveFile(1,File) ; Сохраняем файл  
            EndIf 
          Case 2: OKHO1()  
            
          Case 3: OKHO1() 
            
          Case 4: OKHO1() 
            
          Case 5 :Spravka1 () ; окно "подсчет слов" 
            
          Case 6: Exit=1 
            
          Case 7: Exit=1  
            
          Case 8: OKHO1() ;окно о программе
            
            ; Событие в пункте "Выход" меню  
          Case 9  
            Exit=1 ; Записываем в переменную "Exit" число 1. Это прервёт цикл и программа закроется  
                   ; Событие в пункте "О программе" меню  
            
        EndSelect ; Этот оператор завершает операцию выбора, начатую оператором Select  
      EndIf  
      
      If Event=#PB_Event_CloseWindow ; При попытке закрыть главное окно, записываем в переменную "Exit" число 1  
        Exit=1  
      EndIf  
      
    EndIf  
    
    If window=1 ; Обработка событий от окна с идентификатором 1 (окно "О программе")  
      If Event=#PB_Event_CloseWindow ; Закрываем окно  
        CloseWindow(1)  
      EndIf  
      
      If Event=#PB_Event_Gadget And Gadget=4 ; При щелчке по экранной кнопке "Ok", закрываем окно  
        CloseWindow(1)  
      EndIf  
    EndIf  
    
  Until Exit=1 ; Прерываем главный цикл если в переменной "Exit" число 1  
  
  ;EndIf  
EndIf  
End

0

6

Зачем многократно пересоздавать гаджет? Обычно так не делают. В том месте где появляется ошибка нужно заменить строки

Код:
         TextGadget    (22, 770, 25, 50, 20,Shirina1.s , #PB_Text_Center);печатаем цифру позиции ОШИБКУ ВЫДАЁТ В ЭТОМ МЕСТЕ      SetActiveWindow(0)
         SetGadgetFont(22, LoadFont(0, "Courier New", 14))

На строку.

Код:
SetGadgetText(22, Shirina1)

0

7

Пётр спасибо за подсказку!
(Представляю  :rolleyes: сколько таких как я  :question: задают одни и те же вопросы изо дня в день... :tired: ) Памятник за терпение ставить надо!!! :flag:

Отредактировано Юр Яр (13.12.2015 22:22:39)

0

8

Приветствую! Вопросов несколько возникло...   :writing:
1. Нужно отправить на COM порт текст с возможностью его прервать/приостановить, при этом во время передачи в порт пользоваться основной прогой (редактирование другого текста)
Я предполагаю что нужен параллельный процесс - например оформить пердачу данных как отдельный EXE-файл, передать ему данные и его запускать параллельно...  или есть вариант попроще? в отдельном окне... например...???

0

9

http://www.purebasic.com/documentation/ … index.html

Разве передача через COM порт требует много времени? Какая скорость обмена?

0

10

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

http://www.purebasic.com/documentation/ … index.html

Разве передача через COM порт требует много времени? Какая скорость обмена?

самая низкая - 50, стоповый 1,5; это  примерно 400 символов в минуту  (1 лист примерно 10 минут кажется...)

Отредактировано Юр Яр (16.12.2015 19:44:40)

0

11

Приветствую! Возник такой вопрос, при создании редактора текста...
1. При открытии текстового файла .txt или .rtf кодировки могут быть разные (ASCII или Unicode и т.д.)
соответственно в редактор они попадают либо читаемыми либо абракадаброй иногда китайскими иероглифами...
как сделать так что бы разнообразные кодировки нормально читались?
2. при записи текста в файл и повторном его открытии - он уже другой (нечитаемый)...
3. как конвертнуть Unicod в ascii

где почитать + примеры

заранее благодарен!!!

Отредактировано Юр Яр (02.02.2016 21:20:34)

0

12

Юр Яр написал(а):

как сделать так что бы разнообразные кодировки нормально читались?

http://www.purebasic.com/documentation/ … ormat.html
http://www.purebasic.com/documentation/ … ormat.html
Пример. http://pure-basic.narod.ru/docs/MultiOS.html

Юр Яр написал(а):

3. как конвертнуть Unicod в ascii

http://www.purebasic.com/documentation/ … pokes.html

0

13

Приветствую! с кодировками вроде разобрался...
Сейчас подошел к работе с СОМ портом... демки которые нашел не работают - ошибки при компиляции
Есть что почитать, говорят какие-то Библиотеки есть...
Если не сложно конечно...))))

0

14

Юр Яр написал(а):

Сейчас подошел к работе с СОМ портом... демки которые нашел не работают - ошибки при компиляции

Функции для работы с портом. http://www.purebasic.com/documentation/ … index.html

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » через поиск сайта не нашел, спрашиваю тут...