FreeBasic
Главная
Вход
Регистрация
Пятница, 29.03.2024, 14:15Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 8
  • 1
  • 2
  • 3
  • 7
  • 8
  • »
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Баги или ошибки библиотеки (Баги или ошибки библиотеки)
Баги или ошибки библиотеки
haavДата: Пятница, 21.12.2012, 06:52 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Баги или ошибки библиотеки



По совету ShadEx создаю данный топик , в который прошу отписываться обо всех ошибках в библиотеке.

Я прошу не писать сюда вопросы "как сделать то или как сделать это" . Для этого лучше создать отдельные темы.
Прикрепления: 7474650.jpg (86.7 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Суббота, 22.12.2012, 22:09 | Сообщение # 2
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Ну-с, начнём:

вот этот пример -
Код

#Include "window9.bi"

WindowStartDraw(GetDesktopWindow,,,,,1) 'начинаем рисование с прозрачным фоном
      CircleDraw(350,350,350,255,255) ' рисуем круг
StopDraw ' заканчиваем рисование

Do : Sleep(125) : Loop until GetAsyncKeyState(&h1B)<0 ' клавиша Esc для выхода

почемуто у меня на вин ХР (СП3) ничего не рисует...

Добавлено (22.12.2012, 22:09)
---------------------------------------------
в этом примере -
Код

Var hwnd=OpenWindow("пример",100,100,300,150)
'WindowColor(hwnd,&hd7d7d7)

WindowStartDraw(hwnd,0,0,300,80,1)
       fillrectdraw(0,0,&hff00ff)
       TextDraw(10,10,"DrawTEXT",&h000000,&h000001)
StopDraw

Do : Loop until  WaitEvent= EventClose

Во-первых, в мануале написано, что прозрачный цвет установить можно указав значение "-1", но при указании значения "&h000000" или "BGR(0,0,0)" тоже получаем прозрачность для текста или фона и лишь указав "&h000001" - получаем чёрный цвет...
Во-вторых, при минимизировании и последуюющем развертывании окна - никакой отрисовки уже видно не будет, а также, этот же эффект наблюдается при расскоментировании строки "WindowColor(hwnd,&hd7d7d7)", но уже при запуске приложения. Полагаю, что это как-то связано с посылкой сообщения WM_PAINT в основной функции обработки сообщений от окна.
Ну и в третьих - как видишь, на прозрачном фоне отрисовки текста виден основной цвет окна, а не фиолетового прямоугольника...

Ну и скриншот для наглядности:


П.С.: а пожелания и корректирования тоже сюда писать?
Прикрепления: 4788623.jpg (50.5 Kb)


Сообщение отредактировал ShadEx - Суббота, 22.12.2012, 22:22
 
haavДата: Суббота, 22.12.2012, 23:51 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата (ShadEx)
почемуто у меня на вин ХР (СП3) ничего не рисует...


Точно на XP не работает, буду смотреть.

Цитата
Во-первых, в мануале написано, что прозрачный цвет установить можно указав значение "-1", но при указании значения "&h000000" или "BGR(0,0,0)" тоже получаем прозрачность для текста или фона и лишь указав "&h000001" - получаем чёрный цвет...


Это я засранец спутал местами параметры в справке (при описании), поэтому скорее всего и путаница произошла, надо поправить:



Хотя пример нормально работает (может только трудно понимаем изначально):

У функции WindowStartDraw есть параметр ALPHA_VALUE , который будет учитываться, если параметр Alpha_FLAG = 1
Параметр ALPHA_VALUE устанавливает цвет фона для прозрачного пикселя. То есть если мы поставим значение например 255 , то все пиксели с цветом 255 отображаться не будут.
У функции TextDraw четвертый параметр , установленный в -1 , не рисует фон. Пятый параметр рисует текст нужным цветом .
Если мы берем цвет прозрачности у функции WindowStartDraw по умолчанию (0), то рисуя черным цветом (0) по окну , мы ничего не наблюдаем. Именно поэтому в примере ниже я цвет рисования текста поставил 1

Код
    

#Include "window9.bi"
Var hwnd=OpenWindow("",100,100,300,150)

WindowStartDraw(hwnd,0,0,300,80,1)
    fillrectdraw(0,0,&hff00ff)
    TextDraw(10,10,"DrawTEXT",-1,1)
StopDraw

Do : Loop until  WaitEvent= EventClose


Цитата
Во-вторых, при минимизировании и последуюющем развертывании окна - никакой отрисовки уже видно не будет, а также, этот же эффект наблюдается при расскоментировании строки "WindowColor(hwnd,&hd7d7d7)", но уже при запуске приложения. Полагаю, что это как-то связано с посылкой сообщения WM_PAINT в основной функции обработки сообщений от окна.


Это так задумано. Обработка рисования идет НЕ в процедуре с вызовами (beginPaint-EndPaint) , а вызывая контекст вручную GetDc...
Ведь это не DOS, Windows не сохраняет нарисованное сама при перекрывании окна. Об этом надо заботиться (да что я говорю , думаю ты и сам знаешь). Пример в справке был сделан простой для краткости , но по нормальному я рисую либо (по таймеру\в отдельном потоке) в процедуре, либо в самом цикле сообщений при использовании WindowEvent.

Цитата
П.С.: а пожелания и корректирования тоже сюда писать?


Закрепил еще одну тему.

Спасибо за баг-репорт
Прикрепления: 3649578.png (10.2 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Воскресенье, 23.12.2012, 16:33 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата
почемуто у меня на вин ХР (СП3) ничего не рисует...


Я исправил этот баг, хотя не знаю надо ли было... Я даже не знаю можно ли это назвать моим багом. Все функции в моих обертках WindowStartDraw и StopDraw не выдали ошибок, отработали правильно. Вся разница в том, что на системах ниже (win7 и может vista) надо для получения контекста рабочего стола использовать GetWindowDC вместо GetDC . Хотя если забить в гугле , то немалое кол-во кодов именно с GetDC для XP. Тут судя по всему все та же черная магия: у одних работает, у других нет.



Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Воскресенье, 23.12.2012, 16:48 | Сообщение # 5
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Цитата (haav)
У функции WindowStartDraw есть параметр ALPHA_VALUE...

Ага, да, с этот параметр я както пропустил мимо, теперь стал более понятен смысл отрисовки текста в функции TextDraw.

Цитата (haav)
Это так задумано. Обработка рисования идет НЕ в процедуре с вызовами (beginPaint-EndPaint) , а вызывая контекст вручную GetDc...

Понятно, короче для прозрачных и статических изображений лучше(и проще) использовать связку - Create_ImageA, ImageDrawA, CreateHBitmapFromGpBitmap и SetImageGadget в гаджет с изображением.
А WindowStartDraw использовать только для циклической анимации кадров или постояного вывода разных графических данных(графики, диаграммы) в цикле...



Сообщение отредактировал ShadEx - Воскресенье, 23.12.2012, 17:42
 
haavДата: Воскресенье, 23.12.2012, 18:01 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата
Понятно, короче для прозрачных и статических изображений лучше(и проще) использовать связку - Create_ImageA, ImageDrawA, CreateHBitmapFromGpBitmap и SetImageGadget в гаджет с изображением.
А WindowStartDraw использовать только для циклической анимации кадров или постояного вывода разных графических данных(графики, диаграммы) в цикле...


Ты все правильно понял



Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Среда, 13.08.2014, 14:58 | Сообщение # 7
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Продолжаю разбираться с функциями тулбара...
При нажатии на кнопку сообщение с номером этой кнопки не показывается,
EventNumberToolBar возвращает 0

Код
#Include "window9.bi"

Dim As Integer hwnd,hwToolBar

hwnd=OpenWindow("",10,10,185,100)
CenterWindow(hwnd)
hwToolBar=CreateToolBar(,TBSTYLE_LIST)
ToolBarStandardButton(hwToolBar,1,STD_FILEOPEN,"Open")
ToolBarStandardButton(hwToolBar,2,STD_CUT, "Cut")
ToolBarStandardButton(hwToolBar,3,STD_COPY, "Copy")

Do
  Var ev=WaitEvent
  If ev=EventClose Then
   End
  ElseIf ev=EventGadget Then
   Select Case EventNumberToolBar
    Case 1 To 3
     MessBox("","Кнопка с номером  " & EventNumberToolBar)
   End Select
  EndIf
Loop
 
haavДата: Среда, 13.08.2014, 16:30 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата
При нажатии на кнопку сообщение с номером этой кнопки не показывается,
EventNumberToolBar возвращает 0

Точно используется последняя версия библиотеки? У меня все нормально. Возможно конечно я исправлял что-то у себя уже после выпуска последней версии.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Среда, 13.08.2014, 16:57 | Сообщение # 9
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата haav ()
Точно используется последняя версия библиотеки? У меня все нормально. Возможно конечно я исправлял что-то у себя уже после выпуска последней версии.

Я использую эту сборку FreeBasic http://freebasic.ucoz.com/forum/4-176-1
Сейчас посмотрел - действительно, сама Window9 новее, перекачал и заменил - теперь работает. Спасибо!
 
AMAlexДата: Пятница, 22.08.2014, 21:07 | Сообщение # 10
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline


Координата Y барахлит.
Может причина не в библиотеке.

сборка FB 0.90 (82.5 мб)
http://free-basic.ru/user-files/FreeBasic_BUILD.exe
На двух других сборках все нормально.
Прикрепления: 3322065.png (13.5 Kb)


Сообщение отредактировал AMAlex - Пятница, 22.08.2014, 21:09
 
haavДата: Пятница, 22.08.2014, 21:39 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Да возможно, что в версии сборки 0.90 еще стоит старая версия библиотеки с данным багом. Я помню этот баг, но не помню когда его исправлял. Саму сборку после выпуска если и обновлял , то это было уже давно. С текущей версией библиотеки должно быть все в порядке.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
AMAlexДата: Пятница, 22.08.2014, 23:03 | Сообщение # 12
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Да, старая версия.
Заменил, работает!
 
CoBa31RusДата: Пятница, 24.04.2015, 23:45 | Сообщение # 13
Рядовой
Группа: Пользователи
Сообщений: 7
Репутация: 0
Статус: Offline
Баг или библиотека вообще не заточена под com порт, порт открывается пишется читается, не работает E_O_F и еще некоторые фичи именно с com портом
 
haavДата: Суббота, 25.04.2015, 07:14 | Сообщение # 14
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата CoBa31Rus ()
библиотека вообще не заточена под com порт


Конечно не заточена, я даже об этом не думал. У FB есть встроенные средства работы с COM.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
symarglДата: Суббота, 02.05.2015, 10:34 | Сообщение # 15
Сержант
Группа: Пользователи
Сообщений: 27
Репутация: 0
Статус: Offline
Интересный (и возможно дурацкий) вопрос у меня назрел, haav, не знаю, где спросить, спрошу здесь. А почему, если я сделал окно (со всякими  дочерними элементами) при помощи VISG'а, или же встроенным в FbEdit визуальным редактором диалогов, у меня не получается управлять этим окном операторами window9 ?  Ни по заданным ID, ни по полученным через ID_In_Number... Более того, почему-то окно , сделанное в VISG'е, даже на SetWindowText не реагирует! Почему так, и можно ли эту проблему как-нибудь решить?

Сообщение отредактировал symargl - Суббота, 02.05.2015, 10:34
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Баги или ошибки библиотеки (Баги или ошибки библиотеки)
  • Страница 1 из 8
  • 1
  • 2
  • 3
  • 7
  • 8
  • »
Поиск: