I want to Draw a Screenshot from the entire screen to a TForm1 Canvas.
This code works well in Delphi XE3
procedure TForm1.Button1Click(Sender: TObject);
var
c,scr: TCanvas;
r,r2: TRect;
begin
c := TCanvas.Create;
scr := TCanvas.Create;
c.Handle := GetWindowDC(GetDesktopWindow);
try
r := Rect(0, 0, 200, 200);
form1.Canvas.CopyRect(r, c, r);
finally
ReleaseDC(0, c.Handle);
c.Free;
end;
Now I want to copy the screenshot to another canvas first.
Is there a way to do this without getting this error?
procedure TForm1.Button1Click(Sender: TObject);
var
c,scr: TCanvas;
r,r2: TRect;
begin
c := TCanvas.Create;
scr := TCanvas.Create;
c.Handle := GetWindowDC(GetDesktopWindow);
try
r := Rect(0, 0, 200, 200);
scr.CopyRect(r,c,r); <-- Error, canvas does not allow drawing
form1.Canvas.CopyRect(r, scr, r); <-- Error, canvas does not allow drawing
finally
ReleaseDC(0, c.Handle);
c.Free;
end;
В чем вопрос-то? Куда нажать, чтобы увидеть? На свежей альфе? Знаете-ка что…. Этой ошибке ТРИСТА ЛЕТ! Посмотрите на дату исходного сообщения – март 2006 года.
Никуда не нажать. Эта ошибка возникает сама по себе и непредсказуемо. И чем дальше бат деградирует (с увеличением номера версии) – тем чаще.
Я ж сказал – на форумах по дельфи про такую проблему знают, знают про ее причины и знают, что надо делать, чтобы она не возникала. И всяких новичков терпеливо учат, как надо программировать многопоточные приложения.
Также, когда я искал информацию об этой ошибке, я видел много релизов РАЗНЫХ программ, в описании к которым было указано, что в этой версии “исправлена ошибка, приводящая к Canvas does not allow drawing и к Acsess violation at address”.
Отрицать очевидное бессмысленно – ошибка в Бате есть, и причина ее – корявое программирование, рассинхронизация процессов, утечки памяти.
Беда в том, что эту ошибку в Бате уже НИКОГДА не исправить!!! Слишком все запущено. Я представляю, сколько кода надо перелопатить. А код уже давно такой, что в одном месте тронешь – в трех других сразу рассыпается.
Ошибка – Canvas does not allow drawing |
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|||||
|
|
|
Windows 8.1 |
|
Популярное |
|
Содержание
- Ошибка: Canvas does not allow drawing
- Решение
- Ошибка с классом (Canvas does not allow drawing)
- Canvas does not allow drawing как исправить
- Кто сейчас на форуме
- Canvas does not allow drawing как исправить
Ошибка: Canvas does not allow drawing
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Потоки, ошибка «Canvas does not allow drawing»
учусь работать с потоками..запускаю потоки все нормально, но иногда вылазить ошибка (прикрепил к.
Ошибка «Canvas does not allow drawing»
Здравствуйте, у меня такая проблема. При попытки скачать картинку через: TFileStream *fsjpg =.
Canvas does not allow drawing
Используя потоки + скин на программу, у меня выдает такую ошибку Canvas does not allow drawing.
Это логически не может быть из-за показанного кода. Вы там ничего не рисуете. В другом месте наверное что-то делается.
Добавлено через 22 секунды
Почему все так любят GetDesktopWindow? Ноль там должен быть, ноль.
Решение
Помощь в написании контрольных, курсовых и дипломных работ здесь.
canvas does not allow drawing
программа предназначена для стандартизации записи телефонных номеров. При запуске через раз получаю.
Нарисовать сферу на форме в пространстве имен System.Drawing и System.Drawing.Drawing2D
Задача нарисовать сферу на форме в пространстве имен System.Drawing и System.Drawing.Drawing2D. С.
Ошибка в System.Drawing.dll (Недопустимый параметр)
Ро таймеру отрисовываю экран в пикчербокс. Примерно через 3-5 секунд возникает ошибка в строке bmp.
Drawing operation was attempted when there was no current window. Что за ошибка?
Пытаюсь запустить програмку из конспекта, который дали для изучения материала, а она не хочет.
Источник
BB-код ссылки (для форумов):
Добрый день, установил 10 на свой комп и пакет локализации 0.8 Все бы хорошо да вот только винду дико кроет и за одного бага природу которого я не могу понять. Когда он происходит пропадает кнопка пуск, сбиваются шрифты, вместо названий становятся крякозябрики, все тексты становятся жирными, хотел бы показать скриншот но сообщение об ошибке мешает их сохранить.
ChangeBtnPos, err:Canvas does not allow drawing
И за этого приходится перезаходить каждые 2 часа, если честно уже порядком достало. Но иногда комп просто виснет при повторном логине.
довольно таки мощный fx 8320@ 4.2, 8gb, gtx570. Сейчас набираю опять этот баг начался.
BB-код ссылки (для форумов):
Добавлено (11.01.2015, 18:17)
———————————————
Все жалобы на это сообщение относятся именно к подобным приложениям, причем в среде XP, очень старые. В отдельных случаях помогает запуск приложения от администратора.
BB-код ссылки (для форумов):
BB-код ссылки (для форумов):
Ну в общем так, играю в Star Trek Online, Star Conflict, Word of Warkraft 5.4.8.
Установлен Eset Smart Security 8.0, торрент клиент, рк, тим спик, Adobe Photoshop CS3.
Поставил был PerfectDisk но у него не было доступа к жд. Удалил, поставил Smart Defrag последний.
Конвертирую видео в XvidPSP, установлены последние кодеки, DirectX 9 и С++ все версии. Как то раз автоматом на комп поставился анти спай от Iobit комп намертво повис когда оно открылось, удалил.
Фиг его знает как понять по чему меню пуск превращается в кашу и система либо перезапукает рабочий стол, либо самому на выход, и то потом бывает зависание намертво, а вчера вообще было зависание 7 раз подряд при загрузке рабочего стола.. стало последней каплей.
Как то раз был вылет в синий экран, тогда посмотрел логи а там chkdsk.exe+8470
DPC_WATCHDOG_VIOLATION как то так.
Вот только что ради интереса нажал сменить аватар в меню пуск и сразу
опять пошли эти глюки.
BB-код ссылки (для форумов):
BB-код ссылки (для форумов):
BB-код ссылки (для форумов):
Без антивируса тож не вариант.. нет никакой антивир защиты у провайдера, часто происходят сканирования портов, мдс и проч гадость. У меня стоит майл ру агент последняя версия. Опера.
На 7 тоже откат не хочу, прирост производительности уже очень ощутимый, загружается очень быстро.
Вопрос еще гаджеты от 8.1 могут быть причиной таких провалов? Из гаджетов стоит ток монитор системы 2, и погодка.
Да вот еще что замечали ли вы проблемы с файлом подкачки? Система поставила на С и размер аж 9 ГБ, убрал в ручную выставил 2 ГБ макс, и переместил на другой диск. Один раз было такое что комп стал дико тормозить при конвертировании, посмотрел на монитор, файл подкачки заполнен 100%, а память свободно 60%. Что это может быть?
Из приложений времен Хр стоит ток XvidPSP 5.3 ибо только им можно нормально делать рипы.
Источник
Ошибка с классом (Canvas does not allow drawing)
Вообщем написал класс и для удобства поместил его в отдельный модуль
Но когда из основного приложения вызываю функцию DrawMap то вылетает ошибка
Canvas does not allow drawing
Благодарен за любую помощь
Добавлено через 11 минут
Проблема решилась удалением can:= TCanvas.Create;
Объясните нубу про эти классы плиз
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Ошибка: Canvas does not allow drawing
после N запусков вот этой функции function GetGPixelColor(X, Y: Integer): BYTE; var c.
Потоки, ошибка «Canvas does not allow drawing»
учусь работать с потоками..запускаю потоки все нормально, но иногда вылазить ошибка (прикрепил к.
Ошибка «Canvas does not allow drawing»
Здравствуйте, у меня такая проблема. При попытки скачать картинку через: TFileStream *fsjpg =.
Canvas does not allow drawing
Используя потоки + скин на программу, у меня выдает такую ошибку Canvas does not allow drawing.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
canvas does not allow drawing
программа предназначена для стандартизации записи телефонных номеров. При запуске через раз получаю.
Нарисовать сферу на форме в пространстве имен System.Drawing и System.Drawing.Drawing2D
Задача нарисовать сферу на форме в пространстве имен System.Drawing и System.Drawing.Drawing2D. С.
Ошибка в System.Drawing.dll (Недопустимый параметр)
Ро таймеру отрисовываю экран в пикчербокс. Примерно через 3-5 секунд возникает ошибка в строке bmp.
Drawing operation was attempted when there was no current window. Что за ошибка?
Пытаюсь запустить програмку из конспекта, который дали для изучения материала, а она не хочет.
Источник
Canvas does not allow drawing как исправить
_________________
Если бы на станции «Мир» стояли Винды, она бы еще висела и висела.
Мурик | |||
Карма: 3 |
Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc |
||
paskal | |||
Зарегистрирован: Пн сен 05, 2011 10:03:06 |
_________________ |
||
ДанилКоржов | |
Зарегистрирован: Вт янв 16, 2018 23:18:46 |
Продуктовая линейка компании KLS на складе Компэл пополнилась модульными соединителями типа RJ. Ассортимент представлен неэкранированными соединителями RJ11, RJ12 и RJ45 для построения базовых информационных сетей, а также экранированными RJ45 с трансформатором для реализации систем передачи данных межу узлами ЛВС. |
SIM31 | |||
Карма: 17 |
Вебинар пройдет 16/09/2021 и будет посвящен особенностям работы высокопроизводительных микроконтроллеров STM32H7. На вебинаре разберем ключевые особенности линеек STM32H72/3 и проведем практическую работу с оценкой производительности с использованием ускорителей и кэш-буфера при чтении инструкций из внутренней и из зашифрованной внешней памяти. Для отображения результатов будет использоваться программная среда STM32CubeMonitor. |
||
Часовой пояс: UTC + 3 часа
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Источник
Canvas does not allow drawing как исправить
← →
WondeRu © ( 2005-03-11 17:17 ) [1]
self.PB.Canvas.Lock;
try
.
здесь рисуем.
..
finally
self.PB.Canvas.UnLock;
end;
← →
MBo © ( 2005-03-11 17:31 ) [2]
>Данный код написан в обработчике событий onMouseMove
Может он начинает выполняться, когда еще не кончился
предыдущий вывод, тогда может быть что угодно.
Надо помечать что выполняется и обходить.
>В однопоточных приложениях два события не могут выполняться одновременно.
Верно, одно из них будет остановлено в случайном месте
и если второе это тоже самое onMouseMove то тот же код
начнет рисовать недорисованный canvas, а это ни к чему
хорошему не приведет.
>пока не отработае onTime событие onMouseMove не возникнет!
С таким убеждением вас ждут сюрпризы, когда
переменные будут внезапно меняться вроде как сами по себе.
А как же тогда по вашему можно остановить работающую программу
нажатием кнопки?
Вот пример показывает что все события запускается независимо
от того закончилась ли обработка предыдущего:
procedure TForm1.Button1Click(Sender: TObject);
var i:dWord;
begin
i:=GetTickCount+20000;
while GetTickCount
>Ttimer не создаёт нового потока для обработки событий
Потоки это участки кода переключаемые windows по времени.
События запускаются и преключаются внешними причинами
потоков им не надо, но запускаться и работать
они обязаны когда эти причины произойдут,
а все остальное будет стоять пока не закончится
последнее возникшее или не возникнет новое.
← →
wicked © ( 2005-03-14 10:53 ) [6]
> Верно, одно из них будет остановлено в случайном месте
> и если второе это тоже самое onMouseMove то тот же код
> начнет рисовать недорисованный canvas, а это ни к чему
> хорошему не приведет.
бред.
← →
Анонимщик1 ( 2005-03-14 11:52 ) [7]
Darklight
Ты уверен, что приложение однопоточное? Что оно из себя представляет? Какие классы (особенно не свои и не-борландовские) используешь?
← →
Анонимщик1 ( 2005-03-14 13:33 ) [9]
Тогда посмотри какой-нибудь утилитой утечку графических ресурсов.
Какой?
Никода о них не слышал?
← →
WondeRu © ( 2005-03-14 14:51 ) [11]
← →
Анонимщик1 ( 2005-03-14 14:57 ) [12]
Посмотреть можно хотя бы с помощью диспетчера задач, только нужно выбрать столбцы нужные.
И см., например, http://www.delphikingdom.com/tower/index.asp?CategoryID=6
← →
Анонимщик1 ( 2005-03-14 14:59 ) [13]
Обломись, VTune тебе не нужен
[12] Что значит обломись?
VTune не нужен?
Почему?
Возможно, но Именно так работает приведенный пример
при многократном нажатии на button1
>Анонимщик1
>Ты же своим ProcessMessages насильно выбираешь и обрабатываешь сообщение из очереди
Я просто показал что повторное выполнение события обычная вещь
и если выводить на экран какими-то системными процедурами
то никто не гарантирует что произойдет то же самое.
>Но ведь тогда пришлось бы синхронизировать функции, вызванные в контексте одного (скажем, главного)
>потока, в плане разделения ресурсов. Ты сам-то так когда-нибудь делал? Короче, думай, что говоришь.
Я просто не допускаю повторного выполнения кода.
Иначе могут выскакивать произвольные ошибки в произвольное время. И говорю я на основе своего горького опыта:
Хотя никто не запрещает делать в Button1Click, MouseMove все что угодно,
но если возникают случайные ошибки мне не раз помогало
вынесение обработки в timer.
← →
Анонимщик1 ( 2005-03-15 11:01 ) [16]
Darklight
VTune слишком крут для твоей (видимо, не очень сложной) проблемы.
programania
Извини, но разгребать кашу в твоей голове сил, наверное, нет ни у кого. Кроме стандартных пожеланий читай MSDN и Рихтера у меня для тебя ничего больше нет.
Источник
kessor 4 / 4 / 2 Регистрация: 27.10.2014 Сообщений: 90 |
||||
1 |
||||
15.02.2016, 13:09. Показов 9674. Ответов 6 Метки нет (Все метки)
после N запусков вот этой функции
программа вылетает с ошибкой canvas does not allow drawing
0 |
Пишу на Delphi…иногда 1423 / 1278 / 286 Регистрация: 03.12.2012 Сообщений: 3,914 Записей в блоге: 5 |
|
15.02.2016, 13:25 |
2 |
как исправить? GetWindowDC After painting is complete, the ReleaseDC function must be called to release the device context. Not releasing the window device context has serious effects on painting requested by applications.
0 |
kessor 4 / 4 / 2 Регистрация: 27.10.2014 Сообщений: 90 |
||||
15.02.2016, 14:06 [ТС] |
3 |
|||
то есть просто добавить строчку
?
0 |
588 / 455 / 147 Регистрация: 09.12.2013 Сообщений: 2,385 Записей в блоге: 2 |
|
15.02.2016, 16:20 |
4 |
Зачем вообще TCanvas? Просто HDC возьмите. И да, освобождать надо.
canvas does not allow drawing Это логически не может быть из-за показанного кода. Вы там ничего не рисуете. В другом месте наверное что-то делается. Добавлено через 22 секунды
0 |
kessor 4 / 4 / 2 Регистрация: 27.10.2014 Сообщений: 90 |
||||
15.02.2016, 17:27 [ТС] |
5 |
|||
а так можно цвет пикселя получать?
0 |
BOGG ART 588 / 455 / 147 Регистрация: 09.12.2013 Сообщений: 2,385 Записей в блоге: 2 |
||||
15.02.2016, 18:40 |
6 |
|||
Сообщение было отмечено kessor как решение РешениеЯ же говорю – возьмите переменную HDC, освобождайте.
1 |
4 / 4 / 2 Регистрация: 27.10.2014 Сообщений: 90 |
|
18.02.2016, 17:03 [ТС] |
7 |
после ~100 итераций начинает выдавать всегда одно и то же значение(для G – 255)
0 |