Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> bmp canvas очистить, помогите с элементаркой  
V
    Опции темы
darkida
Дата 1.2.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Рисую n квадратиков. Надо стереть 3-ый и нарисовать на его месте другой. Надо именно стереть, потому что если наложить то получается бяка. 
В drkb и на форуме смотрел, но ничего подходящего не нашел. Если что то пропустил скиньте ссылку.
Рисую так. 
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
  x: integer;
  y: integer;
begin
x:=170;
y:=13;
for i:=0 to 10 do
begin
x:=x-30;
y:=y+14;
imagelist1.Draw(form1.Canvas, x, y, i);
end;

А на слик 1-го батана хочу сделать чтоб менял нужные мне квадратики. 
Помогите пожалуйста!!!

Это сообщение отредактировал(а) darkida - 1.2.2010, 22:04
PM MAIL   Вверх
artsb
Дата 1.2.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Перед рисование нового квадрата (или чего-то другого) закрасьте область в которой собираетесь рисовать цветом фона с помощью Canvas.FillRect

Добавлено @ 23:07
Т.е. что-то типа:
Код

r: TRect;
// ...
r.Left := x;
r.Top := y;
r.Right := r;
r.Bottom := b;
Form1.Canvas.Brush.Color := clRed; // устанавливаем цвет кисти как у фона. Если вы её нигде не изменяете, то это делать не обязательно
Form1.Canvas.FillRect(r); // стираем старый рисунок 
// рисуем что-то новое


Это сообщение отредактировал(а) artsb - 1.2.2010, 23:13


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
darkida
Дата 1.2.2010, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Забыл сказать. Рисуется это на картинке. Так что закрашивание не пойдет т.к. задний фон как я понимаю тоже закрасится.  
PM MAIL   Вверх
artsb
Дата 1.2.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(darkida @  1.2.2010,  23:12 Найти цитируемый пост)
задний фон как я понимаю тоже закрасится.   

Ага.
Тогда вам нужно хранить в памяти оригинал, например в объекте типа TBitmap.
А чтобы стереть старый рисунок просто скопируйте нужный кусок из оригинала.

Добавлено через 1 минуту и 12 секунд
Код

Form1.Canvas.CopyRect(DestRect, bmp.Canvas, SourceRect);



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
darkida
Дата 1.2.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



А если он рисовался не канвосом, а так просто вставлен. Что делать? Или тогда закрашивание не повлияет на рисунок.
Спасибо за помощь. Весьма признателен. 

Цитата

Тогда вам нужно хранить в памяти оригинал, например в объекте типа TBitmap.
А чтобы стереть старый рисунок просто скопируйте нужный кусок из оригинала.

Добавлено через 1 минуту и 12 секунд
Выделить всёкод Pascal/Delphi
1:
    
Form1.Canvas.CopyRect(DestRect, bmp.Canvas, SourceRect);


Это получается, мне надо выделить сперва область до того как квадраты появятся, потом сохранить её в отдельный файл bmp.  А потом перед заменой вставить ту область. И только потом менять квадрат. Так да? Если так, то нет ли полегче способа. Потому что квадратов таких будет очень много и они будут проставляться массивом, тогда придется создавать какую-нибудь процедуру чтоб записывала области. А если квадраты будут проставляться рандомом то еще сложнее будет.   

Это сообщение отредактировал(а) darkida - 1.2.2010, 23:45
PM MAIL   Вверх
artsb
Дата 1.2.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(darkida @  1.2.2010,  23:21 Найти цитируемый пост)
а так просто вставлен

TImage?

Добавлено через 36 секунд
Тогда лучше и сам рисунок рисовать вручную. Это труда не составит ;)


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
darkida
Дата 2.2.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Ой я там с редактом запоздал. artsb прочти пожалуйста.

Да Image.

Цитата

Тогда лучше и сам рисунок рисовать вручную. Это труда не составит ;) 

Да это не сложно. Но проблема в том что она большая и на ней будут находится все квадратики. 
Поясню задачу задачу. Хочу создать карту города и потом работать с ней, тоесть: добавлять, удалять, менять положения и т,д различных видов сооружений.
ВОТ. 

Тоесть задний фон это как бы ландшафт который не изменяется, а квадратики это сооружения, с которыми я буду работать.

Это сообщение отредактировал(а) darkida - 2.2.2010, 00:20
PM MAIL   Вверх
darkida
Дата 2.2.2010, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 59
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



А все придумал!!! 

Цитата

Перед рисование нового квадрата (или чего-то другого) закрасьте область в которой собираетесь рисовать цветом фона с помощью Canvas.FillRect

Код

r: TRect;
// ...
r.Left := x;
r.Top := y;
r.Right := r;
r.Bottom := b;
Form1.Canvas.Brush.Color := clRed; // устанавливаем цвет кисти как у фона. Если вы её нигде не изменяете, то это делать не обязательно
Form1.Canvas.FillRect(r); // стираем старый рисунок 
// рисуем что-то новое



Буду использовать вот этот твой способ, так само удобно. 
Еще раз спасибо за решение моего вопроса, помог очень сильно. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0709 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.