Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6  ОтправитьПечать
Очень популярная тема (более 25 ответов) v7CLR: ВК для работы с .NET-типами без CCW (число прочтений - 55829 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #45 - 24. Мая 2008 :: 03:46
Печать  
steban писал(а) 23. Мая 2008 :: 19:58:
Поэтому обработчики событий работают в главном потоке компоненты, а не в главном потоке 1С.
И могут прерывать выполнение 1с-кода в любой момент.
это настораживает.
Выполнение обработчика событий - это ведь работа кода 1С. А этот код не многопоточен.
  

1&&2&&3
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #46 - 28. Мая 2008 :: 15:06
Печать  
В классе CLRFactory добавлен новый метод СоздатьНаФорме / CreateControl.

Пример использования:
Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	К=Factory.CreateControl(Форма.ф,"System.Windows.Forms.PropertyGrid, System.Windows.Forms,
		|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	//ф - идентификатор кнопки на форме
	К.SelectedObject=К;
	К.HelpVisible=0;
	К.ПривязатьСобытияККонтексту(Контекст,"ф_");
КонецПроцедуры	// ПослеОткрытия

Процедура ф_PropertyValueChanged(s,e)
	Сообщить(e);
КонецПроцедуры // ф_Click 

« Последняя редакция: 24. Июля 2008 :: 19:51 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #47 - 28. Мая 2008 :: 20:59
Печать  
Исправил пару мелких глюков.
« Последняя редакция: 24. Июля 2008 :: 19:52 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #48 - 28. Мая 2008 :: 21:08
Печать  
Кстати, для того, чтобы работал DataBinding, нужно явно инициализировать свойство BindingContext у контролов.
DataGridView по умолчанию использует BindingContext из родительской формы. И если он хостится на форме MFC, то Binding не работает. Подробности тут.

Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	G=Factory.CreateControl(Форма.ф,"System.Windows.Forms.DataGridView, System.Windows.Forms,
	|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

	G.BindingContext=Factory.CreateInstance("System.Windows.Forms.BindingContext, System.Windows.Forms,
	|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

	bs=Factory.CreateInstance("System.Windows.Forms.BindingSource, System.Windows.Forms,
		|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	DI=Factory.CreateInstance("System.IO.DriveInfo","c");
	BS.DataSource=DI.RootDirectory.GetDirectories();
	G.AutoGenerateColumns =1;
	G.DataSource=BS;
	G.ПривязатьСобытияККонтексту(Контекст,"grid_");
КонецПроцедуры	// ПослеОткрытия
 


Если используется несколько data-bound контролов, то стоит создать один BindingContext на всех.
  

wf.GIF ( 23 KB | Загрузки )
wf.GIF

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #49 - 31. Мая 2008 :: 17:18
Печать  
sml писал(а) 23. Мая 2008 :: 10:57:
Кстати, на сайте каркаса мелкопушистых я читал, что они поменяли метод администрирования оснастки, и теперь отказались от использования сценариев. Может в этом причина?

Ага, эта оснастка больше не распространяется с фреймворком, а распространяется только с SDK.
Подробнее почитать можно тут.
Файлы, необходимые чтобы проинсталлить оснастку на машине без SDK - во вложении.

Инструкция по установке: Цитата:
  • Start at some PC where the MSCORCFG.MSC is already installed.  This would typically be a development PC with either Visual Studio or the SDK installed.
  • Drill down to either "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727", "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin", or "C:\Program Files\Microsoft.NET\SDK\v2.0\Bin" to find the files below
  • Copy the following files to a flash drive (or network location)
    gacutil.exe
    mscorcfg.dll
    mscorcfg.msc
    mscormmc11.cfg
    mscormmc.dll
  • Distribute these files to the client PC in the   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 directory
  • Register the DLLs using the Cas.reg file included in the download below
  • Create a shortcut to the mscorcfg.msc file in the Administrative Tools section of the control panel (also included in download)

  

CAS.zip ( 431 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #50 - 31. Мая 2008 :: 18:22
Печать  
Кстати, при помощи этой компоненты можно использовать элементы управления Windows Presentation Foundation (aka WPF, aka Win FX). Это возможно, если установлен .NET Framework 3.0 или выше.
Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	WFAssembly=", System.Windows.Forms,Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
	PFAssembly=", PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
	DRAssembly=", System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
	PCAssembly=", PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
	P=Factory.CreateControl(Форма.ф,"System.Windows.Forms.Panel"+WFAssembly);
	C=Factory.CreateInstance("System.Windows.Forms.Integration.ElementHost,
		|WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
	Types=Factory.CreateInstance("System.Type");
	Enums=Factory.CreateInstance("System.Enum");
	mbly),"Fill");
	C.Dock=DockStyleFill;
	DI=Factory.CreateInstance("System.IO.DriveInfo","c");
	LV=Factory.CreateInstance("System.Windows.Controls.ListView"+PFAssembly);
	C.Child=LV;
	P.Controls.Add(C);
	LV.ItemsSource =DI.RootDirectory.GetDirectories();
	GV=Factory.CreateInstance("System.Windows.Controls.GridView"+PFAssembly);

	GVC.DisplayMemberBinding = Factory.CreateInstance("System.Windows.Forms.Binding"+WFAssembly,"Name");
	GV.Columns.Add(GVC);

	GVC.DisplayMemberBinding = );
	GV.Columns.Add(GVC);

	GVC.DisplayMemberBinding = Factory.CreateInstance("System.Windows.Data.Binding"+PFAssembly,"Attributes");
	GV.Columns.Add(GVC);
	LV.View=GV;
	LV.ПривязатьСобытияККонтексту(Контекст,"lv_");
	C.Invalidate();

	LVI=Factory.CreateInstance("System.Windows.Controls.ListViewItem"+PFAssembly);
	BP=LVI.GetType().GetField("BackgroundProperty").GetValue("всякаяфигня");
	S=Factory.CreateInstance("System.Windows.Setter"+PFAssembly,BP,
		Factory.CreateInstance("System.Windows.Media.Brushes"+PCAssembly).Azure);
	ST=Factory.CreateInstance("System.Windows.Style"+PFAssembly);
	ST.Setters.Add(S);
	LV.Style=ST;;
	гРФорма.ПослеОткрытия();
КонецПроцедуры	// ПослеОткрытия 

« Последняя редакция: 07. Июня 2008 :: 12:41 - steban »  

wpf1.GIF ( 15 KB | Загрузки )
wpf1.GIF

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #51 - 31. Мая 2008 :: 18:32
Печать  
А еще можно писать UI на XAML Улыбка
Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	WFAssembly=", System.Windows.Forms,Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
	PFAssembly=", PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
	P=Factory.CreateControl(Форма.ф,"System.Windows.Forms.Panel"+WFAssembly);
	C=Factory.CreateInstance("System.Windows.Forms.Integration.ElementHost,
		|WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
	Types=Factory.CreateInstance("System.Type");
	Enums=Factory.CreateInstance("System.Enum");
	mbly),"Fill");

	Путь=""; Имя="";
	РасположениеФайла(Путь,Имя);
	OpenMode=Enums.Parse(Types.GetType3("System.IO.FileMode"),"Open");
	e);
	XR=Factory.CreateInstance("System.Windows.Markup.XamlReader"+PFAssembly);

	C.Child=XR.Load(FStream);
	C.Dock=DockStyleFill;
	P.Controls.Add(C);
КонецПроцедуры	// ПослеОткрытия
 


Кто знает, что такое XAML, поймет, что можно делать UI весьма Rich Улыбка
Чуть позже попробую соорудить пример.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #52 - 31. Мая 2008 :: 18:45
Печать  
steban писал(а) 31. Мая 2008 :: 18:22:
Код
Выбрать все
LVI=Factory.CreateInstance("System.Windows.Controls.ListViewItem"+PFAssembly);
BP=LVI.GetType().GetField("BackgroundProperty").GetValue("всякаяфигня"); 


Этот фрагмент кода будет выглядеть вот так:
Код
Выбрать все
kgroundProperty 


Когда я реализую работу с полями (не свойствами).

я всегда считал, что public fields - моветон, и все нормальные классы используют public properties
« Последняя редакция: 02. Июня 2008 :: 05:57 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
miandrew
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 18. Октября 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #53 - 07. Июня 2008 :: 09:12
Печать  
Набросал бы лучше ert-шек, а не исходный код с картинками.  Подмигивание Вот это было бы классно..
  
Наверх
 
IP записан
 
Aurelius
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Местоположение: г. Долгопрудный, МО
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #54 - 14. Августа 2008 :: 16:14
Печать  
Здравствуйте,
а у меня пример из поста http://www.1cpp.ru/forum/YaBB.pl?num=1210542476/50#50 почему-то не работает:

Цитата:
C.Dock=DockStyleFill;
{C:\...\TEST.ERT(497)}: Попытка присвоить значение недоступной для записи переменной (Dock)

Причем
ТипЗначенияСтр(C.Dock) = System.Windows.Forms.ControlBindingsCollection
ТипЗначенияСтр(DockStyleFill) = System.Windows.Forms.DockStyle

1Cpp.dll v2.5/3.0
v7CLR.dll v1.0.0.1

Кстати, а где теперь компонента находится?
  
Наверх
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #55 - 01. Сентября 2008 :: 08:34
Печать  
кто сабж применял, поделитесь примерами.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #56 - 22. Сентября 2008 :: 07:33
Печать  
плиз поделитесь компонентой или ссылкой Улыбка
  
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #57 - 22. Сентября 2008 :: 08:52
Печать  
скачать компоненту можно тут: http://code.google.com/p/v7clr/

развитие компоненты пока приостановлено
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
sslava74
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 28. Ноября 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #58 - 02. Октября 2008 :: 08:53
Печать  
Не много не понятно как статические методы вызывать
Извините разобрался
  
Наверх
 
IP записан
 
sslava74
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 28. Ноября 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #59 - 03. Октября 2008 :: 06:19
Печать  
А кто-нибудь смог загрузить XAML файл и отобразить через ElementHost?

Элементы WindowsForms - System.Windows.Forms - отображаются
а пример с WPF - не получился
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 
ОтправитьПечать