Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизКак присвоить 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("Ðàâíî");
a:= TImage(FindComponent("a"));
//Результат как в 1
3)
a:= b;
if a = b then ShowMessage("Ðàâíî");
a:= TImage(FindComponent("a"));
if a <> b then ShowMessage("Ne ravno");
//Как в 1, только кроме равно ещё и "ne ravno"
4)
a:= b;
if a = b then ShowMessage("Ðàâíî");
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("Ðàâíî");
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.029 c