Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Передача класса в качестве параметра другой процедуре   Найти похожие ветки 

 
Micah'GF   (2003-11-04 16:13) [0]

Что то я запарился...
Передаю процедуре класс - она должна изменить некоторые параметры в
нем. Вызываю так:
change(DXImageList);
процедура объявлена так:
procedure change(var vDXImageList: TDXImageList);

После выполнения процедуры в классе ничего не меняется хотя в самой
процедуре проверка показала что изменения происходят.

Может я кк то неправильно передаю параметр?!?


 
Внук   (2003-11-04 16:30) [1]

Во-первых, это не класс, а объект, в классе изменить вряд ли что возможно.
Во-вторых, var указывать не обязательно, имя объекта само по себе есть ссылка.
В-третьих- все должно работать. Вероятно, стоит привести более подробный фрагмент.


 
Skier   (2003-11-04 16:34) [2]


> Во-вторых, var указывать не обязательно, имя объекта само
> по себе есть ссылка.

Спорно.


 
Erik   (2003-11-04 16:40) [3]

В даном случае vDXImageList является просто указамелем, так что можно писать и
procedure change(const vDXImageList: TDXImageList);


 
Внук   (2003-11-04 16:46) [4]

Skier © (04.11.03 16:34) [2]
Ну давай поспорим :))


 
zapped   (2003-11-04 16:46) [5]

2 Skier © (04.11.03 16:34) [2]
F1, Classes and pointers:
Every class (and therefore every component) is really a pointer. The compiler automatically dereferences class pointers for you, so most of the time you do not need to think about this. The status of classes as pointers becomes important when you pass a class as a parameter. In general, you should pass classes by value rather than by reference. The reason is that classes are already pointers, which are references; passing a class by reference amounts to passing a reference to a reference.


 
zapped   (2003-11-04 16:47) [6]

2 Внук © (04.11.03 16:46) [4]
извини, что малину испортил :))
ты написал пока я цитировал :)))


 
Внук   (2003-11-04 16:48) [7]

>>zapped © (04.11.03 16:46) [5]
Упс... Не успел я в Help залезть :)


 
Skier   (2003-11-04 16:49) [8]

>Внук © (04.11.03 16:46) [4]
А что если в процедуре нужно создать объект (предварительно проверив на nil) и передать егово вне ? :)


 
Внук   (2003-11-04 16:56) [9]

>>Skier © (04.11.03 16:49) [8]
Как в С++ со строками? char**?
Тогда действительно придется ссылку на ссылку передавать. Я надеюсь, здесь не тот случай :)


 
Skier   (2003-11-04 16:59) [10]

>Внук © (04.11.03 16:56) [9]

> Тогда действительно придется ссылку на ссылку передавать.
> Я надеюсь, здесь не тот случай :)

По сему я и написал что-де "спорно" :))


 
zapped   (2003-11-04 17:02) [11]

2 Skier © (04.11.03 16:49) [8]
умница-дочка ;)))))))) извини, если задел, это из классики...
да, в этом случае ты прав ;))) RESPECT...
только, думается, обычно это в функциях делают и в качестве результата возвращают, правда, если только ОДИН объект создают...


 
Micah'GF   (2003-11-04 17:29) [12]

procedure DIB2DXImageList(FieldName: string; FieldIndex: integer; var vDXImageList: TDXImageList);
var
DIB : TDIB;
Item : TPictureCollectionItem;
begin
DIB := TDIB.Create;
UFF_GetDIB(FieldName, FieldIndex, DIB, DIBInfo);

Item := TPictureCollectionItem.Create(vDXImageList.Items);
Item.Picture.Graphic := DIB;
Item.Name := DIBInfo.Name;
Item.Restore;

vDXImageList.Items.SaveToFile("d:\imagelist.2");

Item.Free;
DIB.Free;
end;

в проге всего один DXImageList

потом процедуру вызываю так:
DXImageList.Items.SaveToFile("d:\imagelist.1");
DIB2DXImageList(DXImageList);
DXImageListItems.SaveToFile("d:\imagelist.3");


смотрю файлы:
первый и третий абсолютно идентичны... во второй добавился новый ДИБ


 
Игорь Шевченко   (2003-11-04 17:31) [13]

Код какой-то странный...Компилироваться не должен...


 
han_malign   (2003-11-04 17:38) [14]

> первый и третий абсолютно идентичны... во второй добавился новый ДИБ
- а ты чего хотел?
Все так и должно быть:
{Item.Free;}
{DIB.Free;}


 
Micah'GF   (2003-11-04 18:38) [15]

млин и вправду Item.Free уничтожал, только-что созданный объект.
Без него все работает нифтяк!!!

всем сенк за помощь.



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

Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.037 c
1-41567
Vivk
2003-11-04 08:23
2003.11.13
Qreport , FreeReport & толщина линий


1-41438
AndDem
2003-10-29 12:29
2003.11.13
OnActive в MDIChild


1-41138
Марат
2003-11-03 13:14
2003.11.13
Яркость цвета


3-40842
Jony
2003-10-21 18:18
2003.11.13
Как программно снять выделение записи в DBGridEh?


14-41975
mari
2003-10-24 10:22
2003.11.13
удаление пробелов из строки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский