Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 028

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Непонятки с DrawGrid
У меня на форме Image и DrawGrid.
1. Вначале я заполняю Image рисунком из буфера обмена, DrawGrid программно - шахматкой. Когда сворачиваю программу в трей а затем разворачиваю, рисунок на месте, а DrawGrid'а нет вообще.
2. Когда патаюсь вывести на DrawGrid битовую карту, получается непонятно что (см.рис.)
Плюнул бы на DrawGrid , но я не умею рисовать на Image закрашенные прямоугольники в заданных координатах. Всю свою библиотеку по Delphi перелопатил ( обе книги ), а никак. Не пинайте чайника, помогите добрым советом.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. procedure TForm1.VisQuad(param:integer );
  2. var i,j,k,lt,n : integer ;
  3. begin
  4. k := param ;
  5. for i := 0 to 31 do
  6. for j := 0 to 39 do
  7. begin
  8. Area := Pole.CellRect(i,j) ;
  9. if (BitMas[k,i,j] and $7F) >0 then
  10. Pole.Canvas.Brush.Color := clGreen
  11. else Pole.Canvas.Brush.Color := clWhite ;
  12. Form1.Pole.Canvas.FillRect(Area)
  13. end
  14. end;
  15. 0000000000000000000000000000000000000000000000000000000000000000
  16. 0000000000111000000000000000000000000000000000000000000000000000
  17. 0000000001111100000000000000000000000000000000000000000000000000
  18. 0000000011111100000000000000000000000000000000000000000000000000
  19. 0000000111111100000000000000000000000000000000000000000000000000
  20. 0000001111111100000000000000000000000000000000000000000000000000
  21. 0000011111111100000000000000000000000000000000000000000000000000
  22. 0000111111111100000000000000000000000000000000000000000000000000
  23. 0001111111111100000000000000000000000000000000000000000000000000
  24. 0011111111111100000000000000000000000000000000000000000000000000
  25. 0111111111111100000000000000000000000000000000000000000000000000
  26. 0111111111111100000000000000000000000000000000000000000000000000
  27. 0111110011111100000000000000000000000000000000000000000000000000
  28. 0111000011111100000000000000000000000000000000000000000000000000
  29. 0000000011111100000000000000000000000000000000000000000000000000
  30. 0000000011111100000000000000000000000000000000000000000000000000
  31. 0000000011111100000000000000000000000000000000000000000000000000
  32. 0000000011111100000000000000000000000000000000000000000000000000
  33. 0000000011111100000000000000000000000000000000000000000000000000
  34. 0000000011111100000000000000000000000000000000000000000000000000
  35. 0000000011111100000000000000000000000000000000000000000000000000
  36. 0000000011111100000000000000000000000000000000000000000000000000
  37. 0000000011111100000000000000000000000000000000000000000000000000
  38. 0000000011111100000000000000000000000000000000000000000000000000
  39. 0000000011111100000000000000000000000000000000000000000000000000
  40. 0000000011111100000000000000000000000000000000000000000000000000
  41. 0000000011111100000000000000000000000000000000000000000000000000
  42. 0000000011111100000000000000000000000000000000000000000000000000
  43. 0000000011111100000000000000000000000000000000000000000000000000
  44. 0000000011111100000000000000000000000000000000000000000000000000
  45. 0000000011111100000000000000000000000000000000000000000000000000
  46. 0000000011111100000000000000000000000000000000000000000000000000
  47. 0000000001111100000000000000000000000000000000000000000000000000
  48. 0000000000000000000000000000000000000000000000000000000000000000
  49. 0000000000000000000000000000000000000000000000000000000000000000
  50. 0000000000000000000000000000000000000000000000000000000000000000
  51. 0000000000000000000000000000000000000000000000000000000000000000
  52. 0000000000000000000000000000000000000000000000000000000000000000
  53. 0000000000000000000000000000000000000000000000000000000000000000
  54. 0000000000000000000000000000000000000000000000000000000000000000
  55. 0000000000000000000000000000000000000000000000000000000000000000
  56. 0000000000000000000000000000000000000000000000000000000000000000
  57. 0000000000000000000000000000000000000000000000000000000000000000
  58. 0000000000000000000000000000000000000000000000000000000000000000
  59. 0000000000000000000000000000000000000000000000000000000000000000
  60. 0000000000000000000000000000000000000000000000000000000000000000
  61. 0000000000000000000000000000000000000000000000000000000000000000
  62. 0000000000000000000000000000000000000000000000000000000000000000
  63. 0000000000000000000000000000000000000000000000000000000000000000
  64. 0000000000000000000000000000000000000000000000000000000000000000
  65. 0000000000000000000000000000000000000000000000000000000000000000
  66. 0000000000000000000000000000000000000000000000000000000000000000
  67. 0000000000000000000000000000000000000000000000000000000000000000
  68. 0000000000000000000000000000000000000000000000000000000000000000
  69. 0000000000000000000000000000000000000000000000000000000000000000
  70. 0000000000000000000000000000000000000000000000000000000000000000
  71. 0000000000000000000000000000000000000000000000000000000000000000
  72. 0000000000000000000000000000000000000000000000000000000000000000
  73. 0000000000000000000000000000000000000000000000000000000000000000
  74. 0000000000000000000000000000000000000000000000000000000000000000
  75. 0000000000000000000000000000000000000000000000000000000000000000
  76. 0000000000000000000000000000000000000000000000000000000000000000
  77. 0000000000000000000000000000000000000000000000000000000000000000
  78. 0000000000000000000000000000000000000000000000000000000000000000
  79. ------------------------
  80.  
  81.  


Яуген Таляныч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Яуген Таляныч (статус: Посетитель)
Вопрос отправлен: 29 октября 2008, 23:08
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Гена Гутницкий!
Первая часть вопроса.
Так положено - потому что грид перерисовывается при разворачивания формы. И сотрёт всё, что Вы там нарисовали. Это нормальное поведение множества компонентов. Почему? Потому что они имеют свою процедуру отрисовки себя. Image умеет хранить и перерисовать картинку (у него такая процедура самоотрисовки). Если хочеться, что бы всё оставалось - всю прорисовку пишем в OnPaint формы или нужного компонента (так правильнее). Если прорисовка "тяжелая", то есть долгая и мучительная то саму прорисовку вначале надо сделать на TBitmap в памяти, а потом скопировать.
вторая часть вопроса.
Рисовать на самом деле просто. Рисовать можно на любом компоненте, который имеет свойство Canvas.
Вот пример, как нарисовать зелёный прямоугольник с желтой каёмкой.

  Image1.Canvas.Brush.Color := clGreen;
  Image1.Canvas.Pen.Color := clYellow;
  Image1.Canvas.Rectangle(1,1,20,20);
Функция Rectangle принимает такие параметры. первые два - координаты x и y верхнего левого угла, два других - ширина и высота.
Если знать хоть немного английский, то для многих других фунций можно понять их назначение. В хелпе они подробно описаны, поэтому я даю названия, а параметры ищите сами
Circle (круг/эллипс), MoveTo/LineTo (перенести перо в заданую точку/рисовать линию до заданной точки). TextOut - вывод текста в заданной позиции.
Pixels[x,y] := цвет - выставить цвет заданного пикселя. можно также и узнать цвет пикселя - этим же своством. Но не надо забывать, что это достаточно медленная функция.
Arc, Pie - рисование различных сегментов и секторов.
Попробуйне порисовать что нибудь. А потом, когда сформируются вопросы поточнее - пишите.

P.S. Не надо допускать брани в вопросах. Ну взрослые люди же. Я подредактировал вопрос.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 30 октября 2008, 00:36
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 1 ноября 2008, 12:38; участников в обсуждении: 1.
Яуген Таляныч

Яуген Таляныч (статус: Посетитель), 1 ноября 2008, 12:38 [#1]:

Не смог сразу ответить. Thanks. Когда отправил запрос, активизировал думалку, и она выдала вариант :
Area.Top := i*4 ; Area.Bottom := (i+1)*4 ;
Agea.Left :=j*4 ; Area.Right :=(j+1)*4 ;
Image2.Canvas.Rectangle(Area);

Но это длиннеее.
А почему неправильно выводит картинку, тоже сообразил : у меня битовая карта на самом деле байтовая 81*64*64 .
Расширенную память не использую, и хотя при компиляции ошибок не выдала, при заполнении конца массива портит начало. Сейчас перешел на истинно битовый массив, и все ОК.
Это на случай, если прочитает такой же чайник, как я, и не нужно будет наступать на те же грабли.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.