powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Переопределение свойств объекта
9 сообщений из 9, страница 1 из 1
Переопределение свойств объекта
    #40023654
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Столкнулся с непонятной проблемой, возможно чего-то не понимаю, прошу прощения за банальный вопрос, тема такая есть у меня в программе combobox, в него из базы данных записываю определенную структуру (с этим вроде проблем нет) и вот в определенном месте я при выборе элемента combobox'a эту структуру "считываю"

Info := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);

и затем меняю некоторые значения Info

Info.sStr.PC20 := RoundTo(Info.sStr.PC20, 1);
Info.sStr.PC60 := RoundTo(Info.sStr.PC60, 1);
Info.sStr.PC100 := RoundTo(Info.sStr.PC100, 1);

Потом в другом месте программы мне снова нужно считать данные из combo? ну я естественно повторяю

Info := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);

и тут я замечаю, что у меня значения Info уже обновленные, а не первоначальные!!! Как такое может быть? Переменная Info у меня локальная для процедур
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023660
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968Как такое может быть? Переменная Info у меня локальная для процедур

Локальный указатель на глобальный экземпляр структуры.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023669
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я может непонятно объяснил cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex] - это комбо и он глобальный - значение его неизменно, в одной процедуре я считываю объект в локальную переменную Info для процедуры №1, затем в этой же процедуре я изменяю эту переменную Info. Потом в другой процедуре №2 я снова считываю из того же комбо в локальную для процедуры №2 переменную Info и там вижу значения не исходные из комбо, а те которые были изменены в процедуре №1
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023671
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
в одной процедуре я считываю объект в локальную переменную Info для процедуры №1, затем в этой же процедуре я изменяю эту переменную Info.

Ваш комбик хранит список указателей.
В одной процедуре вы считываете объект (указатель), и изменяете его. Это не КОПИЯ объекта, а САМ объект.
Непонятно, зачем МЕНЯТЬ переменную Info ?
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023672
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex] - это комбо и он глобальный - значение
его неизменно

Да. И это значение - указатель. Ты, когда код копипастишь, попытайся хотя бы разобраться
что он делает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023675
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за разъяснение
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023873
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. В продолжении темы хотел уточнить одну деталь

Оператор Info := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);
создает объект Info типа TInfoObj и все поля и методы берутся с выбранного текущего элемента комбобокса. Я правильно понимаю?
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023886
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patrick1968
Добрый день. В продолжении темы хотел уточнить одну деталь

Оператор Info := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);
создает объект Info типа TInfoObj и все поля и методы берутся с выбранного текущего элемента комбобокса. Я правильно понимаю?

Нет. Объекты создает конструктор (чаще всего, Create).
Все объекты (экземпляры классов) являются ссылками - т.е. просто указателем на память (адресом).

Например:
Info := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);
Info1 := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);
Info2 := TInfoObj(cbTypeDevice.Items.Objects[cbTypeDevice.ItemIndex]);

Info - просто число, адрес в памяти. В данном примере Info,Info1 и Info2 получает одно значение, можно убедиться:
WriteLn(format('Info=%p Info1=%p Info2=%p',[Info,Info1,Info2]));
поэтому, если сделать Info.SomeProperty:=1111, то Info1.SomeProperty, Info2.SomeProperty будут иметь значение 1111
...
Рейтинг: 0 / 0
Переопределение свойств объекта
    #40023887
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятно, спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Переопределение свойств объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]