Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 784

•  TDictionary Custom Sort  5 899

•  Fast Watermark Sources  5 695

•  3D Designer  8 469

•  Sik Screen Capture  6 031

•  Patch Maker  6 476

•  Айболит (remote control)  6 470

•  ListBox Drag & Drop  5 333

•  Доска для игры Реверси  94 932

•  Графические эффекты  6 675

•  Рисование по маске  5 792

•  Перетаскивание изображений  4 856

•  Canvas Drawing  5 231

•  Рисование Луны  4 954

•  Поворот изображения  4 501

•  Рисование стержней  3 186

•  Paint on Shape  2 431

•  Генератор кроссвордов  3 305

•  Головоломка Paletto  2 616

•  Теорема Монжа об окружностях  3 400

•  Пазл Numbrix  2 248

•  Заборы и коммивояжеры  2 908

•  Игра HIP  1 877

•  Игра Go (Го)  1 792

•  Симулятор лифта  2 126

•  Программа укладки плитки  1 857

•  Генератор лабиринта  2 296

•  Проверка числового ввода  1 983

•  HEX View  2 291

•  Физический маятник  1 955

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Возможные проблемы при работе с TCanvas больших размеров



Автор: Тимофей Загуренко

Проблема.
Так получилось, что передо мной встала задачи работы с канвой (TCanvas) больших размеров (от 2000 и более точек в одном измерении). Через достаточно короткое время работы я обнаружил, что методы TCanvas иногда ведут себя некорректно. Некорректность поведения заключалась в том, что при определенных условиях графические примитивы, например, прямые линии, либо отображались неправильно, либо просто исчезали. Проверка и перепроверка текста программы ничего не дала. Попытка найти какую-либо информацию о возможных особенностях работы с канвой таких размеров также ни дала положительного результата (может быть, просто плохо искал). Пришлось разбираться самому, а затем и обратиться за советом к некоторым жителям Королевства.

Результат.
В ходе работы удалось некоторым образом локализовать условия возникновения изложенной выше ситуации.
  • 1. Проблемы возникают только под Win9x. Под Windows NT или 2000 подобные ошибки обнаружить не удалось.
  • 2. Графические примитивы могут отображаться неправильно, если их размер в одном измерении более 1000 точек. Например, при отрисовки линии:
     MoveTo(0, 0); LineTo(0, 2000);
  • 3. Самый надежный метод TCanvas - Rectangle, рисуется корректно всегда. Менее надежные - методы рисования прямых линий, например, PolyLine или MoveTo, LineTo.
Поскольку большое значение имеет платформа, а именно Windows 9x, возникло предположение, что возникающие проблемы являются не глюком или не ошибкой TCanvas. Просто именно под этой платформой возможности графики ограничены.

Напрашивающиеся выводы по использованию TCanvas больших размеров.
  • 1. Не пытайтесь рисовать все сразу, а отображайте только то что, действительно необходимо. Если по каким-либо причинам это невозможно, и вам просто необходимо перерисовывать сразу весь TCanvas, используйте графические примитивы, принудительно ограничивая их размер, допустим 1500 точек.
  • 2. Может быть, воспользоваться советом Рустама Кафарова:
    "Итак, решение одно (во всяком случае, одно я нашел, может решений больше) - используйте платформу NT. Под Windows 2000 все работает НАМНОГО ЛУЧШЕ! Советую просто поменять систему. Если в вашей программе будет ремарка "разработана специально под NT", то это не будет минусом для программы"

P.S.
В качестве примера я предлагаю вашему вниманию небольшой проект TCanvas.zip, в котором возникают изложенные выше проблемы. Суть проекта - отрисовка разными методами сетки с шагом 40 точек.

К сожалению, мне не удалось подобрать такой режим, чтобы проблема возникало на любой машине, на которой стоит Windows 9x. Поэтому я хотел бы попросить сразу не забрасывать меня помидорами тех, у кого под Windows 9x все будет работать корректно. Возможно, что все вышеописанное является неким частным случаем, и автор хотел бы получить отклик от тех, кому интересна эта тема.

Особая благодарность Кафарову Рустаму за оказанную помощь.




Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid

База предприятий и менеджеров 0.99

 

Консольное DOS приложение

Работа с принтером

Локализация приложений




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте