|
|
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
В общем рисую я OpenGl. Пока рисовал в основной форме и создавал/освобождал конрол через Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Всё хорошо.Но мне удобнее упаковать все рисование в свой класс - наследник панели, далее подключая модуль и рисовать в любом приложении, но код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. выдает ошибку (см. картинку) смысл текста я понимаю, причину - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 13:41 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревичпричину - нет. В момент Create у твоей панели ещё нет хэндла. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:09 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, Если хочешь кешировать DC, то делай это в CreateHandle или CreateWnd, которые нужно перекрыть. И имей ввиду, что Handle может быть пересоздан в процесс работы приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:15 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Андрей Игоревичпричину - нет. В момент Create у твоей панели ещё нет хэндла. Я думал после inherited Create (AOwner); (вызов create панели) он создается. Да и, как мне кажется, GetDC не сработал бы без корректного хендла.. Хотя вот при просмотре хендла в destroy выдал ошибку... Где же я его потерял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:16 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичГде же я его потерял... См. выше. Создание панели объекта панели и создание окна панели - две большие разницы, разнесённые по времени. И таки да, кэшировать DC затея дурная. Оно предназначено работать так: получил-нарисовал-отдал. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:20 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov И таки да, кэшировать DC затея дурная. Оно предназначено работать так: получил-нарисовал-отдал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:34 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov И таки да, кэшировать DC затея дурная. Оно предназначено работать так: получил-нарисовал-отдал. Почему так? Все примеры, статьи и прочее по OpenGL вызывали GetDC в конструкторе и освобождали в деструкторе. Там ведь рисование непрерывно происходит по Х-раз в секунду. И я не очень понимаю что именно происходит в системе при GetDC. Моё представление таково - мы у системы берём уникальный указатель на область в которой рисуем, система выделяет какую-то память под это (кеширует?), после рисования - указатель и выделенную память освобождаем. Если рисование идет постоянно - зачем освобождать память? Или я совершенно неправильно всё понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:34 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич Почему так? Kazantsev Alexey Если хочешь кешировать DC, то делай это в CreateHandle или CreateWnd, которые нужно перекрыть. И имей ввиду, что Handle может быть пересоздан в процесс работы приложения . Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:45 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Андрей Игоревич, Если хочешь кешировать DC, то делай это в CreateHandle или CreateWnd, которые нужно перекрыть. И имей ввиду, что Handle может быть пересоздан в процесс работы приложения. Ага, понял, сделал, действительно CreateHandle вызывалось уже после Create. Но на момент Destroy - handle уже не существует. При том перекрытие DestroyHandle, DestroyWindowHandle,DestroyWnd - результатов не дало, они не вызываются. На каком этапе у нас handle уничтожается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:51 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Андрей Игоревич Почему так? Kazantsev Alexey Если хочешь кешировать DC, то делай это в CreateHandle или CreateWnd, которые нужно перекрыть. И имей ввиду, что Handle может быть пересоздан в процесс работы приложения . Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: pascal 1. 2. 3. Ни на одном не останавливается :(. Ну и обнулять FDC при уничтожении компонента, по мне, как-то излишне :). Или важно придерживаться принципа: "после нас только нули"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:56 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
а, код Код: pascal 1. 2. 3. 4. 5. Работает, чем Handle отличается от WindowHandle А, не WindowHandle=0, это я поспешил. Но зато не вылетело :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 14:58 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичИ я не очень понимаю что именно происходит в системе при GetDC. Ну так читай до просветления: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:01 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич а, код Код: pascal 1. 2. 3. 4. 5. Работает, чем Handle отличается от WindowHandle А, не WindowHandle=0, это я на радостях поспешил. Но зато не вылетело (шутка если что) :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:06 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Андрей ИгоревичИ я не очень понимаю что именно происходит в системе при GetDC. Ну так читай до просветления: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc Это всё, что я нашел про помятьмайкрософт The device context is an opaque data structure, whose values are used internally by GDI. Так я правильно понимаю про память? Просто я в этих мануалах с большим трудом понимаю суть. Тут больше про контекст windows читать надо, чем про GetDC. Просто с нахрапу я не очень понял всю суть, а пишут там много (да и, если честно, мне это не особо и надо-то, мне бы сделать корректно и забыть, ибо постоянно использовать не буду, а что не использую, увы, забываю). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:12 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич На каком этапе у нас handle уничтожается? Код: pascal 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. 44. 45. Андрей Игоревич Ни на одном не останавливается :( Андрей Игоревич . Ну и обнулять FDC при уничтожении компонента, по мне, как-то излишне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:15 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
[quot _Vasilisk_#22083109] Андрей Игоревич [/src][/spoiler] Андрей Игоревич Ни на одном не останавливается :( Андрей Игоревич . Ну и обнулять FDC при уничтожении компонента, по мне, как-то излишне Нашел, я не вызывал Destroy своего объекта в Destroy формы (много всего туда сюда гонял и закоментил, он как бы всё равно срабатывал, но, судя по всему, куда позже), при вызове Destroy из формы - DestroyWindowHandle срабатывает. Спасибо большое. А уничтожение хендла возможно без вызова уничтожения объекта? Процедуры уничтожения хендла же недоступны извне и, как я понимаю, вызываются при уничтожении объекта (только в процедуре TWinControl.Destroy)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:25 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич А уничтожение хендла возможно без вызова уничтожения объекта? Процедуры уничтожения же недоступны извне и, как я понимаю, вызываются при уничтожении объекта (только в процедуре TWinControl.Destroy)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:30 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич При том перекрытие DestroyHandle, DestroyWindowHandle,DestroyWnd - результатов не дало, они не вызываются. На каком этапе у нас handle уничтожается? Ловить сообщение WM_DESTROY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:38 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич А уничтожение хендла возможно без вызова уничтожения объекта? Процедуры уничтожения хендла же недоступны извне и, как я понимаю, вызываются при уничтожении объекта (только в процедуре TWinControl.Destroy)? Еще есть RecreateWindow() или как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 15:50 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
alekcvp Еще есть RecreateWindow() или как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 16:30 |
|
||
|
GetDC, ReleaseDC и ошибка 'has no parent windows'
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Андрей Игоревичпричину - нет. В момент Create у твоей панели ещё нет хэндла. Еще нет. Но разве хендл не будет создан по запросу? Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2020, 17:02 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39928435&tid=2038577]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 512ms |

| 0 / 0 |
