|
Kontrolka UserControl .NET w Handel Premium
Autor |
Wiadomość |
Darek258
Rejestracja: 2010-10-19, 11:19 Posty: 6
|
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
|
2010-10-19, 12:01 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
(2)
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?
|
2010-10-19, 15:39 |
|
|
Darek258
Rejestracja: 2010-10-19, 11:19 Posty: 6
|
Tak, mam to zaznaczone.
|
2010-10-19, 15:44 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
(1)
a : [ComRegisterFunction()], [ComUnregisterFunction()] ?
|
2010-10-19, 15:50 |
|
|
Darek258
Rejestracja: 2010-10-19, 11:19 Posty: 6
|
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??
|
2010-10-19, 15:58 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
(2)
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 ( ) ; }
|
2010-10-19, 16:09 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
napisz czy to pomogło.
|
2010-10-19, 16:25 |
|
|
Darek258
Rejestracja: 2010-10-19, 11:19 Posty: 6
|
Pomogło wstawienie tych dwóch metod. Działa super! Wielkie dzięki!
|
2010-10-19, 16:29 |
|
|
aja
Rejestracja: 2008-10-28, 13:24 Posty: 14
|
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()
Załączniki:
Komentarz: Spakowany projekt w C#
SymfoniaCom2.zip [39.02 KiB]
Pobrany 226 razy
|
2013-11-11, 00:36 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
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
|
2013-11-11, 15:02 |
|
|
aja
Rejestracja: 2008-10-28, 13:24 Posty: 14
|
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?
|
2013-11-11, 20:34 |
|
|
koronen
Rejestracja: 2009-01-08, 11:43 Posty: 96 Pomógł: 1
|
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
|
2013-11-18, 22:56 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
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
|
2013-11-18, 23:25 |
|
|
koronen
Rejestracja: 2009-01-08, 11:43 Posty: 96 Pomógł: 1
|
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.
|
2013-11-19, 00:17 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kontrolka UserControl .NET w Handel Premium
Dokładnie tak samo.
|
2013-11-19, 17:05 |
|
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 12 gości |
|
Nie możesz tworzyć nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników
|
|
|
|