mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
Kontrolka UserControl .NET w Handel Premium https://forum.mix-soft.pl/viewtopic.php?f=15&t=2415 |
Strona 1 z 2 |
Autor: | Darek258 [ 2010-10-19, 12:01 ] |
Tytuł: | Kontrolka UserControl .NET w Handel Premium |
Witam serdecznie Wiem, że temat ten był już poruszany wcześniej, mimo tego od paru dni próbuję bezskutecznie uruchomić kontrolkę UserControl stworzonej w .NET w Handlu Premium. Opiszę krok po kroku jak to robię. 1. Tworzę w Visual Studio projekt ClassLibrary 2. Towrzę następującą klasę: Kod: namespace SymfoniaCOM2 { [Guid("6E804126-7FD5-40EE-B93E-E2B6C7B2DC95")] public interface ComInterface { void pokazCos(); } [ComVisible(true), Guid("F5283D99-AC0C-4E44-94E5-65372C075C16"), ClassInterface(ClassInterfaceType.None), ProgId("SymfoniaCOM2.Class1")] public class Class1: ComInterface { public Class1() { new Kontrolka(); } public void pokazCos() { new Kontrolka(); } } } 3. Dodaję do projektu kontrolkę UserControl o nazwie Kontrolka, którą następnie wywyołuję w powyższej klasie. Do UserControl dodaję tylko przycisk. 4. W Handlu wywołuję ją następującym poleceniem: Kod: dispatch xDsp form "UserControl", 400, 400 control "SymfoniaCOM2.Class1.1", xDsp, 10, 10, 300, 300 execform Niestety wyświetla się pusta kontrolka form. Co robię źle? Próbowałem już na różne sposoby m.in. utworzyłem metodę w klasie do wywoływania tej kontrolki. Klasa utworzona rejestruje się jako obiekt COM, ponieważ jeśli do projektu dodam WindowsForm, to bez problemu wywołuję się okno WindowsForm po wywołaniu komendy xDsp.Create("SymfoniaCOM2.Class1"), natomiast UserControl nie. Pozdrawiam Darek |
Autor: | rafal [ 2010-10-19, 15:39 ] |
Tytuł: | |
We właściwościach ClassLibrary - w zakładce Build zaznacz Register for COM interop - w zakładce Application przycisk w Assembly Information zaznacz Make assembly COM-Visible masz to? |
Autor: | Darek258 [ 2010-10-19, 15:44 ] |
Tytuł: | |
Tak, mam to zaznaczone. |
Autor: | rafal [ 2010-10-19, 15:50 ] |
Tytuł: | |
a : [ComRegisterFunction()], [ComUnregisterFunction()] ? |
Autor: | Darek258 [ 2010-10-19, 15:58 ] |
Tytuł: | |
Tego nie mam. Jak się domyślam to funkcje do rejestracja i wyrejestrowania kontrolki COM. A czy jest to konieczne, skoro dla WindowsForm działało bez tych funkcji?? |
Autor: | rafal [ 2010-10-19, 16:09 ] |
Tytuł: | |
Kod: public partial class mixKartoteka : UserControl { Kod: [ComRegisterFunction()] public static void RegisterClass ( string key ) { // Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it StringBuilder sb = new StringBuilder ( key ) ; sb.Replace(@"HKEY_CLASSES_ROOT\","") ; // Open the CLSID\{guid} key for write access RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true); // And create the 'Control' key - this allows it to show up in // the ActiveX control container RegistryKey ctrl = k.CreateSubKey ( "Control" ) ; ctrl.Close ( ) ; // Next create the CodeBase entry - needed if not string named and GACced. RegistryKey inprocServer32 = k.OpenSubKey ( "InprocServer32" , true ) ; inprocServer32.SetValue ( "CodeBase" , Assembly.GetExecutingAssembly().CodeBase ) ; inprocServer32.Close ( ) ; // Finally close the main key k.Close ( ) ; } Kod: [ComUnregisterFunction()] public static void UnregisterClass ( string key ) { StringBuilder sb = new StringBuilder ( key ) ; sb.Replace(@"HKEY_CLASSES_ROOT\","") ; // Open HKCR\CLSID\{guid} for write access RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true); // Delete the 'Control' key, but don't throw an exception if it does not exist k.DeleteSubKey ( "Control" , false ) ; // Next open up InprocServer32 RegistryKey inprocServer32 = k.OpenSubKey ( "InprocServer32" , true ) ; // And delete the CodeBase key, again not throwing if missing k.DeleteSubKey ( "CodeBase" , false ) ; // Finally close the main key k.Close ( ) ; } |
Autor: | rafal [ 2010-10-19, 16:25 ] |
Tytuł: | |
napisz czy to pomogło. |
Autor: | Darek258 [ 2010-10-19, 16:29 ] |
Tytuł: | |
Pomogło wstawienie tych dwóch metod. Działa super! Wielkie dzięki! |
Autor: | aja [ 2013-11-11, 00:36 ] | ||
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium | ||
Spróbowałem zrobić podobną kontrolkę, ale niestety w HMF pokazuje pusty formularz, w WinForms działa poprawnie. Wywołanie w HMF: dispatch xDsp form "UserControl", 400, 400 control "SymfoniaCOM2.Class1", xDsp, 10, 10, 300, 300 execform nooutput()
|
Autor: | rafal [ 2013-11-11, 15:02 ] |
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium |
A dlaczego odwołujesz się przez klasę a nie bezpośrednio do UserControl. Kod: dispatch xDsp form "UserControl", 400, 400 control "SymfoniaCOM2.kontrolka", xDsp, 10, 10, 300, 300 execform |
Autor: | aja [ 2013-11-11, 20:34 ] |
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium |
Cytuj: dispatch xDsp form "UserControl", 400, 400 control "SymfoniaCOM2.kontrolka", xDsp, 10, 10, 300, 300 execform Przy takim wywołaniu handel forte przestaje działać. Może coś jest nie tak w moim systemie? |
Autor: | koronen [ 2013-11-18, 22:56 ] |
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium |
Cześć Na pewno można również obsłużyć zdarzenia takiej kontrolki w Ambasic, ale czy tylko w OnCommand? Dokładnie chodzi mi o to czy można obsłużyć zdarzenie kontrolki wywoływanej poza formem ambasic? Np. napisałem kontrolkę "Excel" którą rejestruję poza formem: dispatch excel= CreateObject("Excel") i chcę obsłużyć jej zdarzenie excel_BeforeSave Jest coś takiego możliwe? Np. w VBA mogę to zrobić jeżeli zarejestruję obiekt z WithEvents, a w ambasic? Pozdrawiam |
Autor: | rafal [ 2013-11-18, 23:25 ] |
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium |
Wyszukaj na FORUM wiadomości dotyczące MxGrid. W podanych przykładach są użyte zdarzenia np:. OnDblClick |
Autor: | koronen [ 2013-11-19, 00:17 ] |
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium |
No tak ale mxgrid jest umieszczony na form. A ja pytam o zdarzenia kontrolek (własnych np w C#) nie umieszczonych na form. |
Autor: | rafal [ 2013-11-19, 17:05 ] |
Tytuł: | Re: Kontrolka UserControl .NET w Handel Premium |
Dokładnie tak samo. |
Strona 1 z 2 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |