Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 108

Что вызывает критическую ошибку и закрытие программы?

28.04.2020, 22:09. Показов 5073. Ответов 34

Студворк — интернет-сервис помощи студентам
Почему программа крашится? Подскажите, пожалуйста.
Хочу создать скринсейвер, т.е. создать полноэкранное приложение. Предполагаю, что крашится в обработке таймера.
Для начала пробую так:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Global Width.i = 800                   ;Ширина окна программы
Global Heght.i = 600                   ;Высота окна программы
Global CenterX.i = Width/2                   ;Ширина окна программы
Global CenterY.i = Heght/2                   ;Высота окна программы
Global Radius.i = CenterX
 
#win=0
 
Procedure DrawClock()
  xm=WindowWidth(#win)/2 : ym=WindowHeight(#win)/2
  If ym<xm : Radius=ym*0.98 : Else : Radius=xm*0.98 : EndIf 
EndProcedure
 
 
ExamineDesktops() ; Определяем текущее разрешение экрана
Width = DesktopWidth(0)
Heght = DesktopHeight(0)
If OpenWindow(#win, 0, 0, Width, Heght, "Clock acco Example", #PB_Window_BorderLess | #PB_Window_ScreenCentered | #PB_Window_Maximize) ;  | #PB_Window_Maximize
  AddWindowTimer(#win, 123, 500)
  If CreateImage(0, Width, Heght) And StartDrawing(ImageOutput(0))
    Box(0, 0, Width, Heght, RGB(5, 13, 96))
    StopDrawing() 
    ImageGadget(0, 0, 0, Width, Heght, ImageID(0))
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Timer And EventTimer() = 123
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(1))
        DrawText(CenterX-TextWidth("12")/2,4,"12")
        DrawText(CenterX - Radius,CenterY-TextHeight("9")/2,"9")
        DrawText(CenterX+Radius-TextWidth("3"),CenterY-TextHeight("3")/2,"3")
        DrawText(CenterX-TextWidth("6")/2,Heght-40,"6")
      ElseIf Event = #PB_Event_LeftClick Or Event = #WM_CHAR
         End
      EndIf    
    Until Event = #PB_Event_CloseWindow
  EndIf
  RemoveWindowTimer(0,123)
EndIf
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2020, 22:09
Ответы с готовыми решениями:

Закрытие дочернего окна вызывает закрытие программы
Здравствуйте! Не могу никак разобраться, как сделать так, чтобы дочернее окно при его закрытии не закрывало всю программу. Я читал похожие...

Закрытие файла вызывает падение программы
Подскажите, в чём дело. Создаю два двоичных файла со списками слов, перед каждым словом - пишу количество символов в слове. Потом считываю...

еременная которой нигде нет(не описана) не вызывает ошибку в большом инете, а на локале вызывает ошибку
Совсем я ничего не понимаю. Переменная которой нигде нет(не описана) не вызывает ошибку в большом инете, а на локале вызывает ошибку. ЧТО...

34
Эксперт по электронике
7225 / 3404 / 347
Регистрация: 28.10.2011
Сообщений: 13,387
Записей в блоге: 7
15.05.2020, 01:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от dimajak Посмотреть сообщение
вывод на экран получал только ImageGadget() после CreateImage()
Если картинки нет, что должно быть показано на экране?
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 108
15.05.2020, 04:08  [ТС]
В примерах сперва стоит ImageGadget(), а потом CreateImage()
Даже в том же Help`е пример:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
If OpenWindow(0, 0, 0, 256, 256, "CreateImage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ImageGadget(0, 0, 0, 256, 256, 0)
    
    If CreateImage(0, 256, 256, 32, RGB(255,255,255))
      StartDrawing(ImageOutput(0))
      Ellipse(70, 50, 30, 10, RGB(0,0,255))
      Ellipse(186, 50, 30, 10, RGB(0,0,255))
      LineXY(128, 80, 128, 150, RGB(255, 0, 255))
      RoundBox(70, 200, 110, 30, 20, 20, RGB(255, 0, 0))
      StopDrawing()
    EndIf
    
    SetGadgetState(0, ImageID(0)) ; Просмотр
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
   EndIf
Поэтому и запутался.
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,532
15.05.2020, 06:02
Цитата Сообщение от dimajak Посмотреть сообщение
Поэтому и запутался.
надо полагать гаджет проще поставить в нужное место при создании морды, а не потом впихивать картинку
так что просто логичней сначала гаджет, потом картинку, и только потом готовую картинку ложить в гаджет

Цитата Сообщение от dimajak Посмотреть сообщение
Разве бывает такое при использовании Line ?
нет конечно, сам расчитаешь и сам нарисуешь, в инете есть расчёты
редакторы как то линию создают со сглаживанием, верно? и прочие фигуры тоже

Цитата Сообщение от dimajak Посмотреть сообщение
Думаю, что сложновато в вычислениях
не так страшен чёрт как его малюют, можно на определённые части поделить
но в этом случае грабёж не удобен, кстати грабежей два
GrabDrawingImage()
GrabImage()

Цитата Сообщение от dimajak Посмотреть сообщение
Не дочистил. Экспериментировал с таймером. Нашёл ещё один метод организации таймера.
а запустить перед упаковкой?
Цитата Сообщение от dimajak Посмотреть сообщение
Любую картинку можно воткнуть. Это не принципиально, считаю. Загружается в DataSection
неправильно мыслишь, чел запустил, не заработало, может и плюнуть, зачем людям твои проблемы, тем более ты их спецом создаёшь
хочешь помощи, сделай так чтобы людям было удобно, а не тебе
согласен, не?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.05.2020, 13:49
Часы хорошие, как уже говорил, но если написаны на Qbasic, для DOS, когда разбирал сборник кодов, то да, тогда писали подобное. Сейчас при современном железе и графических возможностях можно гораздо интереснее делать.
Вот к примеру эти же часы, но полностью на спрайтах, в 2D графике. Дольше в интернете картинки искать. чем код написать, а смотрится как то бодрее. Для интерактивности добавил прогноз погоды с сайта Гисметео, код честно списал на рус. форуме Пурика
0
Эксперт по электронике
7225 / 3404 / 347
Регистрация: 28.10.2011
Сообщений: 13,387
Записей в блоге: 7
15.05.2020, 14:09
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Вот к примеру эти же часы, но полностью на спрайтах, в 2D графике.
Вместо фоновой картинки лучше видео, транслируемое с красной площади в режиме реального времени.
1
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.05.2020, 17:03
Цитата Сообщение от locm Посмотреть сообщение
Вместо фоновой картинки лучше видео
Тоже вариант!
А что, 21 век, везде интерактив, а мы всё на синем экране стрелки при помощи Line рисуем.
Можно изображение курантов в реальном времени с видеокамер на экран!
1
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 108
17.05.2020, 00:49  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
а мы всё на синем экране стрелки при помощи Line рисуем
Не забываем, что это моя первая программа на PureBasic и что я любитель, а не профи, специализирующийся?

Как и думал, что подтянутся "профи", которые посоветуют и 3D, и OpenGL, и код в 3 Гб со спецэффектами и что уж там мелочиться, VR реализуем в ламерском вопросе.
А по делу, то никто изначально, кроме доброго человека, который терпеливо объяснял на протяжении нескольких недель и не удосужился вклиниться и подробно объяснить.
А теперь начали флуд и срач (((
Зачем?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
17.05.2020, 06:24
Цитата Сообщение от dimajak Посмотреть сообщение
первая программа на PureBasic и что я любитель
По сути я вам и подсказываю, как сделать проще и красивее. Вот посмотрите на код тут
Простые графические часы в 2D

Код реально на много проще. По сути там всего 3 команды: загрузить спрайт в память из готового изображения LoadSprite, вставить на экран в нужное место, именно в центр экрана DisplayTransparentSprite и повернуть стрелку на нужный угол RotateSprite. Нужный угол ищется из текущего времени, т.е. даже отдельный таймер не нужен, 60 секунд относится к 360 градусам как 360/60=6. Вот такая математика для начальной школы, и ни каких радиан.
Ну, а хорошая шутка ещё ни когда в работе не мешала!
1
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 108
21.05.2020, 21:53  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
По сути я вам и подсказываю, как сделать проще и красивее.
Получается мне надо создать фоновую картинку с моим логотипом, картинку с циферблатом, картинки стрелок. А потом в бесконечном цикле
PureBasic
1
Repeat ... Until пока_не_нажата_клавиша_Esc
постоянно высчитывать углы и выводить спрайты стрелок?
Сколько длится цикл Repeat ... Until ? Сколько таких циклов в секунду?
Вы считаете такой подход оптимизированным?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
22.05.2020, 06:16
Цитата Сообщение от dimajak Посмотреть сообщение
Сколько длится цикл Repeat ... Until ?
Пока работает программа, условие выхода на ваше усмотрение, это может быть любое стандартное поведение скринсейфа, выход по нажатию любой клавиши и движение мышки или её клик.
Цитата Сообщение от dimajak Посмотреть сообщение
Сколько таких циклов в секунду?
По умолчанию зависит от возможностей вашего монитора обновляться в данном режиме работы. Это режим игровой, и тут актуально понятие FPS.
Ожидание синхронизации Экрана позволяет сделать переключение идеальным (без 'разрывов' и других видимых артефактов), потому что переключение выполняется, когда Экран полностью прорисован (и когда поверхность вывода Экрана находится за пределами видимой области Экрана). Это также связывает частоту переключения с фактическим обновлением Экрана, то есть: для Экрана с частотой 60 Гц оно может составлять не более 60 раз в секунду и т.д.
см. в справке OpenScreen(Width, Height, Depth, Title$ [, FlipMode [, RefreshRate]])
FlipMode и RefreshRate могут поменять скорость обновления экрана.
Цитата Сообщение от dimajak Посмотреть сообщение
Вы считаете такой подход оптимизированным?
Конечно да. Это совершенно естественный режим, который позволяет одновременно в реальном времени управлять тысячами спрайтов. Нормальный принцип построения 2D игр, который позволяет объединить качественную графику и звук.
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 108
28.05.2020, 02:28  [ТС]
Спасибо за знакомство со спрайтами. Буду ковырять данный вариант.
Могу ли я полный экран залить определённым цветом, расположить логотип в нужном месте экрана, нарисовать циферблат в виде точек и коротких линий у цифр 3, 6, 9 и 12, а потом поверх располагать спрайты стрелок?
Либо мне нужно фон с логотипом и циферблат поместить предварительно в спрайты?
Как мне предварительно созданные в ФШ спрайты внедрить в конечный .exe файл?
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.05.2020, 08:22
Цитата Сообщение от dimajak Посмотреть сообщение
Могу ли я полный экран залить определённым цветом, расположить логотип в нужном месте экрана, нарисовать циферблат в виде точек и коротких линий у цифр 3, 6, 9 и 12, а потом поверх располагать спрайты стрелок?
да все точно так же как и у вас было, только рисуем сразу на экран, без промежуточного CreateImage.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
InitSprite():InitKeyboard():InitSound():InitMouse()
; Параметры экрана
ExamineDesktops() ; Определяем текущее разрешение экрана
Width = DesktopWidth(0)
Height = DesktopHeight(0)
CenterX.i = Width/2                    ;Ширина окна программы
CenterY.i = Height/2                   ;Высота окна программы
Radius.i = CenterY                     ; для монитора центр по высоте
LoadFont (0, "Courier", 10)            ; Загрузка шрифта Courrier, размер 15
LoadFont (1, "Arial", 30)              ; Загрузка шрифта Arial, размер 30
 
OpenScreen(Width, Height,32,"The Clock")
Repeat
    FlipBuffers()
    ClearScreen(RGB(5, 13, 96)) ; цвет заливки
 ; Рисование всякой графики и текста 
    StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawingFont(FontID(1))
    DrawText(CenterX-TextWidth("12")/2,4,"12")
    DrawText(CenterX - Radius,CenterY-TextHeight("9")/2,"9")
    DrawText(CenterX+Radius-TextWidth("3"),CenterY-TextHeight("3")/2,"3")
    DrawText(CenterX-TextWidth("6")/2,Height-50,"6")
  
    ; Рисуем по окружности метки часов и минут циферблата
    ;     xn = x + Cos(u) * r
    ;     yn = y - Sin(u) * r
    
    For a = 0 To 60
      angle.f = Radian(a * 6) 
      Plot(CenterX + Cos(angle)*(CenterY-55), CenterY - Sin(angle)*(CenterY-55), #White)
      
      If a % 5 = 0
        Box(CenterX + Cos(angle)*(CenterY-55), CenterY - Sin(angle)*(CenterY-55),7,7,#White) ; можно так
        ;Circle(CenterX + Cos(angle)*(CenterY-55), CenterY - Sin(angle)*(CenterY-55),4,#White) ; или так
      EndIf
    Next a
    DrawingFont(FontID(0))
    DrawText(10, Height-20, "Текущее разрешение = "+Str(DesktopWidth(0))+"x"+Str(DesktopHeight(0))+"x"+Str(DesktopDepth(0)))
    StopDrawing()
    
ExamineKeyboard()
Until KeyboardReleased(#PB_Key_Escape)

Но смысл напрягать программу, и получить средний результат, если всё это можно заранее нарисовать красиво, сразу с логотипом и т.п. а потом уже 1 раз вставить в качестве спрайта? Выбор очевиден лично для меня, для вас не знаю...
Цитата Сообщение от dimajak Посмотреть сообщение
Как мне предварительно созданные в ФШ спрайты внедрить в конечный .exe файл?
Сохранить в png, bmp и прикрепить к программе таким образом:

PureBasic
1
2
3
4
5
6
7
8
CatchImage(0, ?Logo)
; тут код программы
End
 
  DataSection
    Logo: 
      IncludeBinary "Logo.bmp"
  EndDataSection
После компиляции все изображения будут внутри exe, распространять отдельно от программы их уже не надо.
Смотреть в справке по CatchImage
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 108
29.05.2020, 22:12  [ТС]
С CatchImage я уже знаком.Думал может что для спрайтов особенное.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
только рисуем сразу на экран, без промежуточного CreateImage
Сложность в рисовании )))
Пробовал свои стрелки рисовать на основе ваших спрайтов - полная шляпа выходит уродливая )
Буду пробовать.
Вариант с Box мне больше нравится. Спасибо!

Добавлено через 10 минут
У меня стрелки белые, а у вас в качестве альфа канала указывается белый цвет, то мне следует рисовать стрелки на прозрачном фоне без указания альфа канала?
0
Эксперт по электронике
7225 / 3404 / 347
Регистрация: 28.10.2011
Сообщений: 13,387
Записей в блоге: 7
29.05.2020, 22:54
Цитата Сообщение от dimajak Посмотреть сообщение
Думал может что для спрайтов особенное.
Есть CatchSprite.
1
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
30.05.2020, 05:44
Цитата Сообщение от locm Посмотреть сообщение
Есть CatchSprite.
Ну да, конечно же CatchSprite, я что то тормознул.
CatchImage можно использовать для вставки фонового изображения, там не нужна ни прозрачность, не вращение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2020, 05:44

DateTime имеет формат MM.MM.yyyy H:mm:ss, что и вызывает ошибку
Проблема в том, что при вводе даты в формате 13.05.2014 16:13:34 появляется ошибка: При вводе даты в формате 05.13.2014 16:13:34 и...

Ms Word 2003 генерирует критическую ошибку.
При вставке веб-контента из IE появляется критическая ошибка, Word зависает и предлагает отправить отчет. Office 2003 переустанавливался,...

При установке tinycore plus выдает критическую ошибку
как сказано в заголовке, при установке tinycore на virtualbox &quot;выпрыгивает&quot; критическая ошибка. с вм работаю впервые, ейчас это нужно для...

СМА Bosch WFO1642OE, уходит в критическую ошибку
Bosch WFO1642OE уходит в критическую ошибку, при включении программы работает десять прим. минут потом выключается дисплей, начинается слив...

Selenium chromedriver выдает критическую ошибку в headless режиме
Без headless все работает без ошибок. Как только добавлю --headless, вылетает критическая ошибка: Exception in thread Thread0: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru