![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копия объекта [D7, WinXP]
Viktop © (2004-11-12 13:07:00)На форме имеется некоторое количесиво объетов TImage. При нажатии на какой-либо рисунок должна создаваться его копия. В принципе я делаю это примерно так
Image2.Picture.Bitmap.Assign(Image1.Picture.Bitmap)
Рисунок из Image1 копируется в Image2
Не могу разобраться с этой строчкой Image1.Picture.Bitmap
Как узнать на каком рисунке был щелчок (или вызвано PopUpMenu), чтобы скопировать именно этот рисунок?
Defunct (2004-11-13 10:52:00) [1]Palladin © (13.11.04 08:32) [18]
согласен, с AutoSize чудес не будет
Palladin (2004-11-13 08:32:00) [2]
> [14] Defunct © (13.11.04 08:04)
Никаких чудес с масштабом не наблюдаю. AutoSize:=True;
Viktop (2004-11-13 08:11:00) [3]Теперь буду знать!
Defunct (2004-11-13 08:09:00) [4]> А с чего вы взяли, что это JPG? Это PNG!
Смысл, тот же. ;>
Picture.Bitmap.Assign можно безболезнено применять только к BMP.
Viktop (2004-11-13 08:06:00) [5]
> Вы жульничаете - в 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:04:00) [6]Palladin © (13.11.04 08:01) [13]
будут чудеса с масштабом.
Palladin (2004-11-13 08:01:00) [7]with TImage.Create(Self) do
begin
Parent := Self;
top:=100;
left:=100;
Picture.Assign((Sender as TImage).Picture)
end
end;
Defunct (2004-11-13 07:57:00) [8]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 надо явно задавать размер картинки.
Viktop (2004-11-13 07:40:00) [9]А что тут приводить? Всё указано в [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 06:46:00) [10]> При нажатии на рисунок он [рисунок] исчезает.
Вы что-то делаете не так.
> Я думал здесь оперативно отвечают
Вам уже все ответили.
Врятли можно что-то добавить к четкому ответу [7], тем более код вашего обработчика вы упорно не хотите приводить.
Viktop (2004-11-13 06:17:00) [11]Я думал здесь оперативно отвечают :-(
Viktop (2004-11-12 16:17:00) [12]При нажатии на рисунок он [рисунок] исчезает.
Юрий Зотов (2004-11-12 14:46:00) [13]> 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 14:35:00) [14]Всё дело в этом
TargetImage(он создаётся в run-time). Ситуация такая: при нажатии на рисунок создаётся объект TImage (с заданными координатими, именем, свойствами и т.д.), в который копируется рисунок из Image1(Sender as TImage)
Юрий Зотов (2004-11-12 14:04:00) [15]> 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 13:45:00) [16]Я прописываю процедуру нажатия здесь:
procedure TForm1.FormClick(Sender: TObject);
begin
end;
Или просто скажите (желательно полный код :)) как создать точную копию объекта Timage при нажатии на него.
Юрий Зотов (2004-11-12 13:25:00) [17]> Viktop (12.11.04 13:07)
> на каком рисунке был щелчок
Sender as TImage
> или вызвано PopUpMenu
PopupMenu.PopupComponent as TImage
rom (2004-11-12 13:16:00) [18]Попробуй так:
Копирование изображения из одного витмапа (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));
MBo (2004-11-12 13:10:00) [19]Sender используй