Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 16:07   #1
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию Неправельный прямоугольник

Проблема у меня в следующем, когда рисую
Код:
Image1.Canvas.Rectangle(corx,cory,x,y);
где corx, cory - координаты по MouseDown, а x,y - координаты по MouseMove. но вот в чём проблема, когда виду курсор в одну сторону рисует нормально, когда же возвращаюсь выходит бардак.


а вот такое выходит когда виду обратно! подскажите что делать?
soonner вне форума Ответить с цитированием
Старый 01.06.2009, 16:27   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Ну так старый-то рисунок надо стирать...

Например хотя бы так:
Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
Image1.Canvas.Rectangle(corx, cory, x, y);
end;
Хотя было бы лучше рисовать на временном холсте...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 01.06.2009, 20:46   #3
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию

хм объясни пожалуйста
soonner вне форума Ответить с цитированием
Старый 01.06.2009, 20:56   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

При передвигании мыши каждый раз рисуется новый прямоугольник поверх старого рисунка (со всеми предыдущими прямоугольниками)...

Когда "растягиваешь" прямоугольник вправо-вниз, то получается как бы нормально, но это только потому что этот прямоугольник по умолчанию рисуется с белой заливкой...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 01.06.2009, 21:04   #5
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию

Угу, ну вот я пробывал делать так что бы по маусап рисунок переносило на другой контейнер тот что под низом, но как зделать прозрачным тот контейнер на котором я рисовал этот прямоугольник, или это можно зделать проще?
soonner вне форума Ответить с цитированием
Старый 01.06.2009, 22:25   #6
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Эм... Зачем же так-то...
Просто через временный буфер...

Вообще надо наверное так: Нажимаем кнопку (там где должен быть один угол) и удерживая её передвигаем туда где должен быть другой угол - отпускаем и прямоугольник рисуется уже по-настоящему...
А пока прямоугольник "растягиваем" выводится временный картинка...

Вот набросок:
Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
PictureBuf:=TBitmap.Create;
PictureBuf.PixelFormat:=pf24bit;
PictureBuf.Width:=Image1.Width;
PictureBuf.Height:=Image1.Height;

PictureBuf.Canvas.Brush.Color:=clBlack; // задаём цвет заливки (чёрный)

 // спрашиваем использовать ли заливку (можно будет переделать на CheckBox)

If MessageDlg('Use Fill?', mtInformation, [mbYes, mbNo], Word(-1))=6  Then
      PictureBuf.Canvas.Brush.Style:=bsSolid
Else
      PictureBuf.Canvas.Brush.Style:=bsClear;

BackGround:=TBitmap.Create;
BackGround.PixelFormat:=pf24bit;
BackGround.Width:=Image1.Width;
BackGround.Height:=Image1.Height;
Image1.Canvas.Draw(0, 0, BackGround);
End;

Procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Begin
corx:=X;
cory:=Y;
End;

Procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Begin

 // если левая кнопка мыши нажата

If Shift=[ssLeft] Then
      Begin
      PictureBuf.Canvas.Draw(0, 0, BackGround);
      PictureBuf.Canvas.Rectangle(corx, cory, X, Y);
      Image1.Canvas.Draw(0, 0, PictureBuf);
      End;
End;

Procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Begin
BackGround.Canvas.Draw(0, 0, PictureBuf);
End;
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 01.06.2009 в 22:29.
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти найменший прямоугольник,который описывает два заданых отрезка мукуль Помощь студентам 2 21.02.2009 17:43
Описание прямоугольник в поле (сетке) EfiopianDIMON Общие вопросы C/C++ 0 30.10.2008 12:23
сколькими способами можно разрезать прямоугольник на n-ное количество частей? 4ingiz Общие вопросы Delphi 2 31.01.2008 06:40