Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Копия объекта   Найти похожие ветки 

 
Viktop   (2004-11-12 13:07) [0]

На форме имеется некоторое количесиво объетов TImage. При нажатии на какой-либо рисунок должна создаваться его копия. В принципе я делаю это примерно так

Image2.Picture.Bitmap.Assign(Image1.Picture.Bitmap)

Рисунок из Image1 копируется в Image2
Не могу разобраться с этой строчкой Image1.Picture.Bitmap
Как узнать на каком рисунке был щелчок (или вызвано PopUpMenu), чтобы скопировать именно этот рисунок?


 
MBo ©   (2004-11-12 13:10) [1]

Sender используй


 
rom   (2004-11-12 13:16) [2]

Попробуй так:

Копирование изображения из одного витмапа (Bmp1) в другой (Bmp)

Bmp.Canvas.CopyMode:=cmSrcCopy;
Bmp.Canvas.CopyRect(rect(0,0,Bmp1.Width,Bmp1.Height),Bmp1.Canvas,rect(0,0,Bmp1.Width,Bmp1.Height));


 
Юрий Зотов ©   (2004-11-12 13:25) [3]

> Viktop   (12.11.04 13:07)  

> на каком рисунке был щелчок
Sender as TImage

> или вызвано PopUpMenu
PopupMenu.PopupComponent as TImage


 
Viktop   (2004-11-12 13:45) [4]

Я прописываю процедуру нажатия здесь:

procedure TForm1.FormClick(Sender: TObject);
begin

end;

Или просто скажите (желательно полный код :)) как создать точную копию объекта Timage при нажатии на него.


 
Юрий Зотов ©   (2004-11-12 14:04) [5]

> Viktop   (12.11.04 13:45) [4]

> Я прописываю процедуру нажатия здесь
> procedure TForm1.FormClick(Sender: TObject);

Зачем же обрабатывать щелчок по картинке в обработчике щелчка по форме? У картинки есть свой OnClick.

procedure TForm1.AnyImageClick(Sender: TObject);
begin
 TargetImage.Picture.Bitmap.Assign((Sender as TImage).Picture.Bitmap)
end;


 
Viktop   (2004-11-12 14:35) [6]

Всё дело в этом TargetImage (он создаётся в run-time). Ситуация такая: при нажатии на рисунок создаётся объект TImage (с заданными координатими, именем, свойствами и т.д.), в который копируется рисунок из Image1 (Sender as TImage)


 
Юрий Зотов ©   (2004-11-12 14:46) [7]

> Viktop   (12.11.04 14:35) [6]
> Всё дело в этом TargetImage (он создаётся в run-time).

Так и создавайте на здоровье, в чем проблема-то? Непонятно.

procedure TForm1.AnyImageClick(Sender: TObject);
begin
 with TImage.Create(Self) do
 begin
   Parent := Self;
   SetBounds(...);
   ...
   Picture.Bitmap.Assign((Sender as TImage).Picture.Bitmap)
 end
end;


 
Viktop   (2004-11-12 16:17) [8]

При нажатии на рисунок он [рисунок] исчезает.


 
Viktop   (2004-11-13 06:17) [9]

Я думал здесь оперативно отвечают :-(


 
Defunct ©   (2004-11-13 06:46) [10]

> При нажатии на рисунок он [рисунок] исчезает.

Вы что-то делаете не так.


> Я думал здесь оперативно отвечают

Вам уже все ответили.
Врятли можно что-то добавить к четкому ответу [7], тем более код вашего обработчика вы упорно не хотите приводить.


 
Viktop   (2004-11-13 07:40) [11]

А что тут приводить? Всё указано в [7]. Но если настаиваете, то вот пример для конретного изображения:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, pngimage, ExtCtrls;

type
 TForm1 = class(TForm)
   Image1: TImage;
   procedure Image1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1Click(Sender: TObject);
begin
with TImage.Create(Self) do
begin
  Parent := Self;
  top:=100;
  left:=100;
  Picture.Bitmap.Assign((Sender as TImage).Picture.Bitmap)
end
end;
end.

Что тут может быть неправильного.


 
Defunct ©   (2004-11-13 07:57) [12]

Viktop   (13.11.04 07:40) [11]

Вы жульничаете - в Image загружен JPG а не BMP картинка.
У меня приведенный Вами код работает с BMPшками.

Для того чтобы работало с JPG, сделайте так:

procedure TForm1.Image1Click(Sender: TObject);
begin
 with TImage.Create(Self) do
 begin
   Parent := Self;
   Top:=100;
   Left:=100;
   Width := 100;
   Height := 100;
   Picture.Bitmap.Width := Width;
   Picture.Bitmap.Height := Height;


   Picture.Bitmap.Canvas.StretchDraw( ClientRect, (Sender as TImage).Picture.Graphic);
 end
end;


В общем при работе с JPG надо явно задавать размер картинки.


 
Palladin ©   (2004-11-13 08:01) [13]

with TImage.Create(Self) do
begin
 Parent := Self;
 top:=100;
 left:=100;
 Picture.Assign((Sender as TImage).Picture)
end
end;


 
Defunct ©   (2004-11-13 08:04) [14]

Palladin ©   (13.11.04 08:01) [13]

будут чудеса с масштабом.


 
Viktop   (2004-11-13 08:06) [15]


> Вы жульничаете - в Image загружен JPG а не BMP картинка.
> У меня приведенный Вами код работает с BMPшками.

А с чего вы взяли, что это JPG? Это PNG!
В принципе работает (с PNG), но как-то криво. У меня для рисунка по которуму производится щелчок стоит свойство Autosize=True, а у созданного изображения размер по умолчанию (тот, который стоит при добавлении объекта на форму).
Если кому интересно, то вот код (теперь полностью рабочий):
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, pngimage, ExtCtrls;

type
 TForm1 = class(TForm)
   Image1: TImage;
   procedure Image1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1Click(Sender: TObject);
begin
with TImage.Create(Self) do
begin
  Parent := Self;
  Top:=100;
  Left:=100;
  Width := 100;
  Height := 100;
  Picture.Bitmap.Width := Width;
  Picture.Bitmap.Height := Height;
  Autosize:=True;
  Transparent:=True;
  Picture.Bitmap.Canvas.StretchDraw( ClientRect, (Sender as TImage).Picture.Graphic);
end
end;

end.

Спасибо за терпение!


 
Defunct ©   (2004-11-13 08:09) [16]

> А с чего вы взяли, что это JPG? Это PNG!

Смысл, тот же. ;>
Picture.Bitmap.Assign можно безболезнено применять только к BMP.


 
Viktop   (2004-11-13 08:11) [17]

Теперь буду знать!


 
Palladin ©   (2004-11-13 08:32) [18]


> [14] Defunct ©   (13.11.04 08:04)

Никаких чудес с масштабом не наблюдаю. AutoSize:=True;


 
Defunct ©   (2004-11-13 10:52) [19]

Palladin ©   (13.11.04 08:32) [18]

согласен, с AutoSize чудес не будет



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.049 c
14-1100244846
ArMellon
2004-11-12 10:34
2004.11.28
Какой модем лучше?


1-1100511356
Yorik
2004-11-15 12:35
2004.11.28
Как проверить только ли латинские символы в переменной?


14-1100438747
Иной
2004-11-14 16:25
2004.11.28
Сумрачная ветка


14-1100329029
gn
2004-11-13 09:57
2004.11.28
Банки борются с кардингом с помощью SMS


10-1066399363
val_5
2003-10-17 18:02
2004.11.28
Развертывание 3-х звенн приложения