Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Работа с CopyRect


Автор: PsiMagistr 17.6.2010, 10:04
Ребята. Столкнулся с довольно таки странной работой CopyRect. 

1). Есть одно большое изображение. Внутри изображения щелчком мыши выбирается и отрисовывается определенная область, которая должна копироваться в другое изображение. Увы ничего не происходит. Но как только мы хотим не копировать не в другое изображение,  а в область формы, все работает как по маслу.

Код


procedure TForm1.ImMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var Number:Integer;
begin
 Number:= x div 128 + IM.Width div 128 * (y div 83);  //Вычисляем номер прямоугольника в котором мы находимся.

  L1 := 128*(x div 128);  //Заполняем координаты
  T1:= 83*(y div 83);
  L2:= L1+128;
  T2:= T1+83;

  SB.SimpleText := 'Квадрат: ' + IntToStr(Number); //Выводим номер прямоугольника в строку состояния.
  end;

procedure TForm1.ImClick(Sender: TObject);
var R1,R2:TRect; //Области копирования.
begin

   Im.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'map2.bmp'); //Грузим файл.
   Im.Canvas.Brush.Style := bsClear; //Очищаем кисть
   Im.Canvas.Rectangle(L1,T1,L2,T2); //Рисуем прямоугольник на карте.

   R1:=Rect(0,424,128,507); //Определяем область куда хотим копировать.
   R2:= Rect(L1,T1,L2,T2);  //Определяем область откуда хотим копировать.

   //Im2.Canvas.CopyRect(R1, IM.Canvas, R2);   //Копируем. Не работает. Даже если расскоментировать эту строку и закомментировать последнюю!

   Form1.Canvas.CopyRect(R1, IM.Canvas, R2); //Копируем. Работает как по маслу! С теми же параметрами. Я заменил только объект куда надо копировать.  

end;


P.S. Ребята, я приложу проект на всякий случай. Боюсь, слишком путано все.


Автор: Frees 17.6.2010, 10:43
Код

Im2.Picture.bitmap.Canvas.CopyRect(R1, IM.Canvas, R2);

Автор: PsiMagistr 17.6.2010, 10:48
Спасибо большое. Первый раз слышу, но попробовал. 

Не выходит, увы.

Автор: Frees 17.6.2010, 11:02
Цитата(PsiMagistr @  17.6.2010,  13:48 Найти цитируемый пост)
Не выходит, увы.

ошибка тут 
Код

 R1:=Rect(0,424,128,507); //Определяем область куда хотим копировать.
   R2:= Rect(L1,T1,L2,T2);  //Определяем область откуда хотим копировать.


если сделать 
Код

 R1:=Rect(0,0,128,128); //Определяем область куда хотим копировать.
   R2:= Rect(0,0,128,128);  //Определяем область откуда хотим копировать.

то рисуется

думай дальше над определением координат

Добавлено через 3 минуты и 44 секунды
Код

   R1:=Rect(0,0,128,83); //Определяем область куда хотим копировать.
   R2:= Rect(L1,T1,L2,T2);  //Определяем область откуда хотим копировать.
   Im.Canvas.Rectangle(R2);
   Im2.Canvas.CopyRect(R1, IM.Canvas, R2);

Автор: PsiMagistr 17.6.2010, 11:09
Но прямоугольник с тем же координатами на форме прорисовываются спокойно. Причем точнехонько в том месте, куда я image поставил.

Автор: Frees 17.6.2010, 11:12
Цитата(PsiMagistr @  17.6.2010,  14:09 Найти цитируемый пост)
Причем точнехонько в том месте, куда я image поставил.

это потому что если рисовать на форме то координаты начинаются в левом вехнем углу формы, а если рисовать на Image то его координаты тоже начинаются слева в верху, но не формы а самого Image. поэтому координаты для формы и image разные( смотри код выше)

Автор: PsiMagistr 17.6.2010, 11:28
Frees, БИГ СЕНКС. Отредактировал

Если человек - дурак, то это - надолго. Это я про себя).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)