|
Вопрос # 2 028/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Непонятки с DrawGrid
У меня на форме Image и DrawGrid.
1. Вначале я заполняю Image рисунком из буфера обмена, DrawGrid программно - шахматкой. Когда сворачиваю программу в трей а затем разворачиваю, рисунок на месте, а DrawGrid'а нет вообще.
2. Когда патаюсь вывести на DrawGrid битовую карту, получается непонятно что (см.рис.)
Плюнул бы на DrawGrid , но я не умею рисовать на Image закрашенные прямоугольники в заданных координатах. Всю свою библиотеку по Delphi перелопатил ( обе книги ), а никак. Не пинайте чайника, помогите добрым советом.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- procedure TForm1.VisQuad(param:integer );
- var i,j,k,lt,n : integer ;
- begin
- k := param ;
- for i := 0 to 31 do
- for j := 0 to 39 do
- begin
- Area := Pole.CellRect(i,j) ;
- if (BitMas[k,i,j] and $7F) >0 then
- Pole.Canvas.Brush.Color := clGreen
- else Pole.Canvas.Brush.Color := clWhite ;
- Form1.Pole.Canvas.FillRect(Area)
- end
- end;
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000111000000000000000000000000000000000000000000000000000
- 0000000001111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000111111100000000000000000000000000000000000000000000000000
- 0000001111111100000000000000000000000000000000000000000000000000
- 0000011111111100000000000000000000000000000000000000000000000000
- 0000111111111100000000000000000000000000000000000000000000000000
- 0001111111111100000000000000000000000000000000000000000000000000
- 0011111111111100000000000000000000000000000000000000000000000000
- 0111111111111100000000000000000000000000000000000000000000000000
- 0111111111111100000000000000000000000000000000000000000000000000
- 0111110011111100000000000000000000000000000000000000000000000000
- 0111000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000011111100000000000000000000000000000000000000000000000000
- 0000000001111100000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000000000000000000000000
- ------------------------
-
-
 |
Вопрос задал: Яуген Таляныч (статус: Посетитель)
Вопрос отправлен: 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 .
Расширенную память не использую, и хотя при компиляции ошибок не выдала, при заполнении конца массива портит начало. Сейчас перешел на истинно битовый массив, и все ОК.
Это на случай, если прочитает такой же чайник, как я, и не нужно будет наступать на те же грабли.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|