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()

Załączniki:
Komentarz: Spakowany projekt w C#
SymfoniaCom2.zip [39.02 KiB]
Pobrany 225 razy

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/