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

Вниз

Как присвоить TImage другой TImage?   Найти похожие ветки 

 
Glex ©   (2006-02-05 19:24) [0]

Детский, наверное, вопрос, никогда раньше не сталкивался.

var a, b, t: TImage;
...
//a, b проинициализованы, в них есть картинки и они располагаются на форме
...

a:= b;

Не работает, да и не должно, так как TImage - это, как я понял, указатель.
Тогда как присвоить a b?

Наверное, что-то вроде Assign(a,b)


 
John_Doe   (2006-02-05 19:28) [1]

a.Assign(b);


 
Glex ©   (2006-02-05 19:35) [2]

EConvertError: "Cannot assign a TImage to a TImage"


 
vrem   (2006-02-05 19:39) [3]

form1.Image2.Picture.Assign(form1.Image1.Picture);


 
Glex ©   (2006-02-05 19:42) [4]

vrem

Зачем? Picture"s можно просто a.picture:= b.picture;
Мне не Picture, а TImage надо!


 
vrem   (2006-02-05 19:45) [5]

понял отстал.


 
Glex ©   (2006-02-05 19:55) [6]

До сих пор решения не нашёл.
Плиз хелп)


 
Джо ©   (2006-02-05 20:01) [7]

> [6] Glex ©   (05.02.06 19:55)
> До сих пор решения не нашёл.
> Плиз хелп)

Нужно определиться с тем, что значит для тебя "присвоить TImage другой TImage".


 
Glex ©   (2006-02-05 20:04) [8]

Джо

Как в MiX: a←b


 
Джо ©   (2006-02-05 20:12) [9]

> [8] Glex ©   (05.02.06 20:04)
> Как в MiX: a<b

Я не знаю, что такое MiX.


 
Glex ©   (2006-02-06 08:19) [10]

Джо

Тогда советую почитать Кнута.
Уверяю, понятие присвоить переменной a значение переменной b я использую в общепринятом понятии.

Т.е. после a:=b должно быть (a=b)=true.


 
ASoft   (2006-02-06 08:22) [11]

TImage+F1


 
nstur   (2006-02-06 10:42) [12]

До конца не помню, но на вскидку скажу.
Для того, чтобы присвоить b -> a, бывает необходимо знать, какой тип картинки у вас загружен и типизировать соответственно Picture. TGif..., TJpg..., TPNG... Если BMP, тогда работать с Picture.Bitmap.
Короче работать надо с Picture и его методом Assign.


 
gamer   (2006-02-06 10:46) [13]

> Glex ©   (06.02.06 08:19) [10]

Странный вы.

> Не работает, да и не должно, так как TImage - это, как я понял, указатель.


А потом пургу гоните, о том, что

> > Т.е. после a:=b должно быть (a=b)=true.


А вы попробуйте. Вдруг даст?


 
John_Doe   (2006-02-06 11:06) [14]

Метод Assign,который любезно предоставлен предком многих обьектов классом TPersistent,он нужен для переноса значений всех полей обьекта a,в соответствующие поля обьекта b.
Думаю это автору топика и нужно.
Но честно сказать не пойму,почему это не работает...
Действительно выдает "Cannot assign a TImage to a TImage".
Пробовал как с разными типами картинок,так и с одинаковыми.

> Короче работать надо с Picture и его методом Assign.

Все дело в том,что возможно автору надо иметь не только идентичные картинки,но и скажем размеры Image"а,св-во Stretch итд...
Незнаю,пусть автор скажет. :-)


 
msguns ©   (2006-02-06 11:18) [15]

А самое главное, что так и покрытно туманом: что нужно автору:

Два одинаковых экземпляра одного и того же объекта (одинаковый Image)

 или

Два указателя на один и тот же экземпляр ?


 
John_Doe   (2006-02-06 11:21) [16]


> А вы попробуйте. Вдруг даст?

Image1 и Image2 действительно указатели на обьекты.
И если написать:
image1:=image2;
То получится,что image1 ,будет указывать на image2.
И теперь если делать что-то с image1,то меняться будет именно image2.
А указатель на image1 будет утерян.


 
John_Doe   (2006-02-06 11:21) [17]


> А вы попробуйте. Вдруг даст?

Image1 и Image2 действительно указатели на обьекты.
И если написать:
image1:=image2;
То получится,что image1 ,будет указывать на image2.
И теперь если делать что-то с image1,то меняться будет именно image2.
А указатель на image1 будет утерян.


 
msguns ©   (2006-02-06 11:26) [18]

>John_Doe   (06.02.06 11:21) [16]
>И теперь если делать что-то с image1,то меняться будет именно image2.
А указатель на image1 будет утерян.

Переведи


 
sniknik ©   (2006-02-06 11:43) [19]

> А указатель на image1 будет утерян.
не совсем, проверь
 TForm1 = class(TForm)
   a: TImage;
   b: TImage;
   ....

 a:= b;
 if a = b then ShowMessage("Равно");

 a:= TImage(FindComponent("a"));
 a.Canvas.Rectangle(0, 0, 100, 100);

где рисует?


 
Джо ©   (2006-02-06 14:52) [20]

> [10] Glex ©   (06.02.06 08:19)
> Джо
>
> Тогда советую почитать Кнута.
> Уверяю, понятие присвоить переменной a значение переменной
> b я использую в общепринятом понятии.
>
> Т.е. после a:=b должно быть (a=b)=true.

Если бы я задавал вопрос "Что значит у Кнута a<b?", я с удовольствием воспринял бы ваш ответ. А пока я вижу, что проблема с формулировкой у вас.


 
Glex ©   (2006-02-06 19:36) [21]

John_Doe
>Все дело в том,что возможно автору надо иметь не только идентичные картинки,но и скажем размеры Image"а,св-во Stretch итд...
Незнаю,пусть автор скажет. :-)

Да, Вы правы. Мне нужно именно это! :-)

msguns
>А самое главное, что так и покрытно туманом: что нужно автору:
>Два одинаковых экземпляра одного и того же объекта (одинаковый Image)...
Два одинаковых экземпляра!

sniknik
По вашей рекомендации провёл несколько тестов. Результаты удивительны!
1)
TForm1 = class(TForm)
  a: TImage;
  b: TImage;
  ....

a:= b;
if a = b then ShowMessage("Равно");
//Равно выводит, но свойства картинок да и сами рисунки различны 8) WTF?!!

2)
a:= b;
if a = b then ShowMessage("&#208;&#224;&#226;&#237;&#238;");

a:= TImage(FindComponent("a"));
//Результат как в 1

3)
a:= b;
if a = b then ShowMessage("&#208;&#224;&#226;&#237;&#238;");

a:= TImage(FindComponent("a"));

if a <> b then ShowMessage("Ne ravno");
//Как в 1, только кроме равно ещё и "ne ravno"

4)
a:= b;
if a = b then ShowMessage("&#208;&#224;&#226;&#237;&#238;");

a:= TImage(FindComponent("a"));

if a <> b then ShowMessage("Ne ravno");
a.Canvas.Rectangle(0, 0, 100, 100);
//Как в 3. Рисует прямоугольник на a

5)
a:= b;
if a = b then ShowMessage("&#208;&#224;&#226;&#237;&#238;");
a.Canvas.Rectangle(0, 0, 100, 100);
//Как в 1, рисует на b)))))

Джо
Возможно, у меня есть некоторые проблемы с формулировкой.. Но меня уже перевели на русский))

Всем
"Cannot assign a TImage to a TImage" - начинаю думать, что это глюк Delphi.
Т. е. он опознаёт два TImage(даже их свойства заведомо равны) как экземпляры разных классов.
У кого есть BDS2006, попробуйте в ней провернуть a.Assign(b);

:)


 
sniknik ©   (2006-02-06 20:48) [22]

> По вашей рекомендации провёл несколько тестов. Результаты удивительны!
вообщето я не давал рекомендаций, так, показал John_Doe   (06.02.06 11:21) [17] что указатель "не потерялся"

а тебе раз это показалось удивительным следует вернутся к книгам и почитать про указатели. и понять что указатель на обьект <> самому обьекту, его можно менять, заставлять указывать на любой(что и сделано в примере) даже на то что обьектом не является...
var st: string;
begin
 st:= "типа заменяю image...";
 a:= TImage(st); //теперь любое обращение к свойствам обьекта как к имеджу даст ошибку(!!!), понятно почему, это не он, это вообще бред, мы "обманули" компилятор.
 ....

> "Cannot assign a TImage to a TImage" - начинаю думать, что это глюк Delphi.
это не глюк. просто у имеджа нет перекрытого метода (в отличие от Picture) ассигн, а метод от предка (TPersistent) ничего не знает о свойствах потомка, вот и ошибка. "нарисуй" свое "перекрытие" тогда и будет работать. но на самом деле это нафиг не нужно, зачем тебе 2 одинаковых с одинаковыми свойствами имеджа? один другого же закрывать будет, не видно его будет. смысл?

ИМХО ты решаеш не задачу, а проблему возникщую изза неправильного понимания/постановки задачи.


 
John_Doe   (2006-02-07 13:54) [23]


> где рисует?

Сдаюсь. :)


 
Glex ©   (2006-02-07 20:07) [24]

sniknik

Удивительным мне показалось, что рисует не на обоих Image"aх, а на одном.
И вообще внешне после копирования ничего не меняется.

Всем огромное спасибо!

Задачу решил другим способ(копированием всех свойств поочерёдно).



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

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

Наверх




Память: 0.53 MB
Время: 0.047 c
8-1126684012
ABS
2005-09-14 11:46
2006.02.26
Вращение


1-1138122133
integeri
2006-01-24 20:02
2006.02.26
робота со шрифтом


2-1139562422
SPOK
2006-02-10 12:07
2006.02.26
Очень туго с СИ


1-1138113223
BFG9k
2006-01-24 17:33
2006.02.26
Изменение порядка видимости окон


15-1138005763
cyborg
2006-01-23 11:42
2006.02.26
Только что в локальном чате :)