Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Структура. Вставить свойство по ссылке (число прочтений - 5033 )
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Структура. Вставить свойство по ссылке
19. Мая 2007 :: 10:05
Печать  
Пытаюсь управлять СВОЙСТВАМИ объекта через "Структуру", в которой хранится как и сам объект, так и ссылки на его свойства. Не получается. Вот пример с АктивИксом:
Код
Выбрать все
Перем оФорма,АктХ;
Перем Панель,Кнопки;
//_____________________________________________________________________________
Процедура Выполнить(Знач Режим = 0)
	Если Режим = 0 //через структуру
	Тогда
		//не работает ни при каких вариантах
		Кнопки.Вторая.Значение = 1;
	Иначе //без исползования структуры
		//работает (естественно во всех вариантах)
		Кнопки.Вторая.Кнопка.Value = 1;
	КонецЕсли;
КонецПроцедуры //Выполнить
//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная
	Кнопки = СоздатьОбъект("Структура");
	АктХ   = СоздатьОбъект("АктивИкс");
	оФорма = СоздатьОбъект("Форма");
	оФорма.УстановитьФорму(Форма);
КонецПроцедуры //ПриОткрытии
//_____________________________________________________________________________
Функция ДобавитьКнопку(Идентификатор,Знач ТипКнопки = 0,Знач Значение = 0)
	Индекс = Панель.Buttons.Count() + 1;
	Кнопка = Панель.Buttons.Add(Индекс,Идентификатор,Идентификатор,ТипКнопки);
	Кнопка.Value = Значение;

	СтрКнопки = СоздатьОбъект("Структура");
	//Вариант хранения по значению:
	СтрКнопки.Вставить("Кнопка",Кнопка,1);
	//Еще вариант, по ссылке , причем этот вариант более предпочтителен,
	//т.к перем "Панель" хранится в модуле:
	//СтрКнопки.Вставить("Кнопка",Панель.Buttons.Item(Индекс),0);

	//Вот здесь пытаюсь передать Property кнопок, мнеяю флаги 0/1
	//1 вариант:
	СтрКнопки.Вставить("Значение",Кнопка.Value,0);
	//2 вариант , причем этот вариант более предпочтителен,
	//т.к перем "Панель" хранится в модуле:
	//СтрКнопки.Вставить("Значение",Панель.Buttons.Item(Индекс).Visible,0);
	//3 вариант , тоже кажется неплохо,
	//т.к.ссылка на эту-же структуру:
	//СтрКнопки.Вставить("Значение",СтрКнопки.Кнопка.Value,0);
	Возврат СтрКнопки;
КонецФункции //ДобавитьКнопку
//_____________________________________________________________________________
Процедура ПослеСозданияФормы() //предопределенная 1С++
	оФорма.СоздатьЭлементУправления(АктХ, "Панель");
	АктХ.СоздатьЭУ("MSComctlLib.ToolBar.2");
	Панель = АктХ.Объект;
	Панель.Appearance = 1;
	Панель.Style = 0;
	Панель.TextAlignment = 1;

	Кнопки.Вставить("Первая",ДобавитьКнопку("Первая",2,1),1);
	Кнопки.Вставить("Вторая",ДобавитьКнопку("Вторая",2),1);
	Кнопки.Вставить("Третья",ДобавитьКнопку("Третья",2),1);
КонецПроцедуры //ПослеСозданияФормы
 

Помогайте.
  

Константин
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #1 - 19. Мая 2007 :: 12:17
Печать  
А с чего ты решил, что так должно работать?
ИМХО нету такого доступа к свойствам АктивИксов.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #2 - 19. Мая 2007 :: 18:02
Печать  
Цитата:
А с чего ты решил, что так должно работать?
Хммм... А ведь если писать на Delphi например, то если там я указываю элементу структуры ссылку на свойства объекта, то в дальнейшем я могу их (свойства объекта) менять как и напрямую, так и через обращение к структуре. Могу дать пример.
  

Константин
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #3 - 20. Мая 2007 :: 10:17
Печать  
Не забывай, что здесь есть куча промежуточных абстракций, типа значения (CValue) и т.п.
И ИМХО нельзя получить прямого доступа к адресу поля структуры.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #4 - 21. Мая 2007 :: 06:04
Печать  
Третий параметр в методе Структура::Вставить - это ошибка проектирования. В V7 нельзя хранить ссылки на значения (ну, точнее неправильно это в таких языках). Так что можно считать что его нет.

В v7 (да в v8) дело обстоит так:
1)значения примитивных типов хранятся только значением. Это обеспечивает безопасность кода, т.к. если хранить ссылку на значение, на программиста ложится ответственность за допустимость этой ссылки во время выполнения;
2)значения агрегатных типов (экземпляры объектов) хранятся только ссылками;
3)значения примитивных типов можно передать в процедуру/функцию модуля по ссылке (по умолчанию) или по значению;
4)значения агрегатных типов передаются в процедуры/функции только по ссылке.
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #5 - 21. Мая 2007 :: 12:20
Печать  
DmitrO писал(а) 21. Мая 2007 :: 06:04:
Третий параметр в методе Структура::Вставить - это ошибка проектирования. В V7 нельзя хранить ссылки на значения (ну, точнее неправильно это в таких языках). Так что можно считать что его нет.

В v7 (да в v8) дело обстоит так:
1)значения примитивных типов хранятся только значением. Это обеспечивает безопасность кода, т.к. если хранить ссылку на значение, на программиста ложится ответственность за допустимость этой ссылки во время выполнения;
2)значения агрегатных типов (экземпляры объектов) хранятся только ссылками;
3)значения примитивных типов можно передать в процедуру/функцию модуля по ссылке (по умолчанию) или по значению;
4)значения агрегатных типов передаются в процедуры/функции только по ссылке.
Все понятно, спасибо. Просто я хотел облегчить жизнь (себе конечно).
  

Константин
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Структура. Вставить свойство по ссылке
Ответ #6 - 21. Мая 2007 :: 12:44
Печать  
К тому же в АктивИксах свойств как таковых нет.
То что привыкли называть Свойствами - это пара ФУНКЦИЙ get_, put_.
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #7 - 21. Мая 2007 :: 18:09
Печать  
Цитата:
То что привыкли называть Свойствами - это пара ФУНКЦИЙ get_, put_.

Это так. Но ведь при написании модуля на любом нормальном языке я могу дать переменной (не важно где она будет лежать - в структуре,спике,таблице или просто в теле модуля) указатель на этот метод, и при обращении к этой переменной мы обращаемся к указанному методу. Неужели в 1С все так запущено?
Кстати насчет get-put: а как бы с помощью 1С++ организовать подобный механизм, т.е. есть Property, есть get-put. И уже в пользовательской части не писать например Элемент.Свойство(Значение) и Значение=Элемент.Свойство() (Put-Get), а сразу: Элемент.Свойство = Значение и наоборот (организовать реальные Property)?
  

Константин
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #8 - 22. Мая 2007 :: 04:51
Печать  
1. Не упорствуй Печаль , а подумай над свойствами и функциями - свойства ведь это просто неявный обман Улыбка реально это именно функции. И ссылку никак не получишь
2. В классах 1С++ подобное давным-давно сделано.
Или ты про АктивИксы или еще про что?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #9 - 22. Мая 2007 :: 07:38
Печать  
artbear писал(а) 22. Мая 2007 :: 04:51:
1. Не упорствуй Печаль , а подумай над свойствами и функциями - свойства ведь это просто неявный обман Улыбка реально это именно функции. И ссылку никак не получишь
2. В классах 1С++ подобное давным-давно сделано.
Или ты про АктивИксы или еще про что?
1. Да не упорствуюя. Просто хотелось имет что-то типа Header-а:задекларировал не только переменные,ф-ции, проц-ры (DefCLS), а здесь-же и расставил указатели, что-то типа: property MyProp: string read GetValue write SetValue; (это схема, не синтаксис). И далее в клиентской части: MyProp=5, Value = MyProp.
2. Где именно ЭТО реализовано?
  

Константин
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #10 - 22. Мая 2007 :: 07:46
Печать  
Цитата:
2. Где именно ЭТО реализовано?


ПриЗаписи_ИмяСвойства(Значение)
ПриПолучении_ИмяСвойства(Значение)


шуруй в доку, там все есть.
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #11 - 22. Мая 2007 :: 08:05
Печать  
Цитата:
шуруй в доку, там все есть.
Прошуровал последнюю chm, но пока не нашел. Но по сути своей это как раз то, что надо. Пошурую еще где-нибудь. Спасибо.
  

Константин
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #12 - 22. Мая 2007 :: 08:19
Печать  
Цитата:
Цитата:
шуруй в доку, там все есть.
Прошуровал последнюю chm, но пока не нашел. Но по сути своей это как раз то, что надо. Пошурую еще где-нибудь. Спасибо.


http://www.1cpp.ru/docum/html/classes.html#id6 - где то тут

Цитата:
Для контроля установки/записи атрибутов необходимо определить предопределенные методы (Процедура) в модуле реализации КОП (слово Экспорт к данным методам применять не обязательно):

При чтении атрибута класса вызывается метод ПриПолучении_ИмяАтрибута (ЗначениеАтрибута) англ. OnGet_, где ИмяАтрибута - имя атрибута, определенного в модуле КОП, из которого выполняют считывание, ЗначениеАтрибута - текущее значение атрибута, также сам атрибут доступен из кода данного метода...

  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #13 - 22. Мая 2007 :: 08:25
Печать  
Спасибо всем. Единственно, что хотел добавить - никак не получается отслеживать History 1С++.
  

Константин
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Структура. Вставить свойство по ссылке
Ответ #14 - 22. Мая 2007 :: 11:00
Печать  
А уж с хистори-то в чем проблема?
Вроде наоборот последний год/два история проекта четко прослеживается !
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать