Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
11-1083006760
Дас Виндовс 45
2004-04-26 23:12
2004.11.28
Как определить язык, используемый пользователем по умолчанию.


3-1098941559
Николай
2004-10-28 09:32
2004.11.28
DBGrid, Query и циклы


1-1100291712
Dmitry
2004-11-12 23:35
2004.11.28
Отловить закрытие процесса


6-1095763330
KIR
2004-09-21 14:42
2004.11.28
Приписать к потоку данных его размер


1-1100534916
ceval
2004-11-15 19:08
2004.11.28
Подскажите как в диалоге задать путь к





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский