Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
ВнизКопия объекта Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c