mojaSymfonia FORUM
https://forum.mix-soft.pl/

Udostępnienie zdarzeń kontrolki .NET w AmBasic
https://forum.mix-soft.pl/viewtopic.php?f=15&t=7348
Strona 1 z 1

Autor:  lucyfer [ 2016-07-07, 17:10 ]
Tytuł:  Udostępnienie zdarzeń kontrolki .NET w AmBasic

Witam
Mam problem z udostępnieniem zdarzenia kontrolki .NET w AmBasicu. Poniżej kod kontrolki C#:
Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using Microsoft.Win32;
using System.Threading;

namespace ActiveXSourcing
{
    [ComVisible(true)]
    public delegate void ClickEventHandler(int x, int y);

    [GuidAttribute("0422D916-C11A-474e-947D-45A107038D12")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]
    public interface ControlEvents

    {
        [ComVisible(true)]
        [DispIdAttribute(0x60020000)]
        void ClickEvent(int x, int y);
    }

    [ProgId("ActiveXSourcing.MyWindowControl")]
    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(ControlEvents))]
    [Guid("7C21F7A3-6CFE-4E7B-AA2C-AEC09D4C39D5")]
    [ComVisible(true)]
    public class MyWindowControl : System.Windows.Forms.UserControl
    {
        System.Windows.Forms.TextBox tx = new TextBox();
        private void InitializeComponent()
        {
            this.Name = "MyWindowControl";
        }

        event ActiveXSourcing.ClickEventHandler ClickEvent;

        public MyWindowControl()
            : base()
        {
            initMyWindowControl();
        }

        private void initMyWindowControl()
        {
            Size = new System.Drawing.Size(300, 50);
            tx.Text = "Click on the TextBox to invoke  'ClickEvent'";
            tx.Size = this.Size;
            tx.Click += new System.EventHandler(ClickHandler);
            this.Controls.Add(tx);
        }

        [ComVisible(true)]
        private void ClickHandler(object sender, System.EventArgs e)
        {
            if (ClickEvent != null)
            {
                ClickEvent(0, 0);
            }
        }

    }
}


A tak to wygląda w AmBasicu:
Kod:
dispatch ct1
int id1

int Sub ct1_ClickEvent(int a,int b)
   message "Klik"
endsub

Int Sub OnCommand(int id, int msg)
   If id == id1 Then
   endif
EndSub

form "Test",600,300
   control "ActiveXSourcing.MyWindowControl", ct1,10,10,500,200
   id1 = button "ok",25,250,50,20,1
int ext = execform OnCommand
error ""

Kontrolka jest widoczna w formie ale nie reaguje na kliknięcie. Co może być przyczyną?

Autor:  Jarek75 [ 2016-07-11, 22:03 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

Iście szatański pomysł! Też bym chciał, choćby do obsługi grida. Ale nie umiem. Pewnie pan Zbyszek z Sage już o tym myślał, ale czy wcieli w życie...

Zdaje się, że eventy z grida nie wrzucają nic do OnCommand, ale możesz się jeszcze upewnić. Może coś się zmieniło. Na pewno próbuj na najnowszej wersji.

Przyczyna? To nie jest obsługiwane. Ambasic to nie VBA. W VBA w Erpie na pewno obsłużysz.

Autor:  rafal [ 2016-07-11, 22:55 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

Jarek75 pisze:
Iście szatański pomysł! Też bym chciał, choćby do obsługi grida. Ale nie umiem.


Zdarzenia obiektu MxGrid są jak najbardziej obsługiwane -> viewtopic.php?p=25630#p25630


Jarek75 pisze:
Pewnie pan Zbyszek z Sage już o tym myślał, ale czy wcieli w życie...


Nie wcieli bo już w Sage nie pracuje

Jarek75 pisze:
Zdaje się, że eventy z grida nie wrzucają nic do OnCommand, ale możesz się jeszcze upewnić. Może coś się zmieniło. Na pewno próbuj na najnowszej wersji.


Zdarzenia obiektów nie są w OnCommand tylko w osobnych Sub'ach

Autor:  Jarek75 [ 2016-07-11, 23:33 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

Fajnie, dobrze wiedzieć. Zostałem trochę w tyle. Może zatem trzeba zmienić parametry suba w ambasicu na (dispatch par).

Autor:  rafal [ 2016-07-12, 09:14 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

lucyfer pisze:
Witam
Mam problem z udostępnieniem zdarzenia kontrolki .NET w AmBasicu. Poniżej kod kontrolki C#:[...]


Użyłeś UserControl jako obiektu eksportowanego do COM.
Jego właściwości i zdarzenia są widoczne w AmBasic.

Wystarczy
Kod:
int Sub ct1_Click()
   message "Klik"
endsub

Autor:  lucyfer [ 2016-09-13, 12:52 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

Cytuj:
Użyłeś UserControl jako obiektu eksportowanego do COM.
Jego właściwości i zdarzenia są widoczne w AmBasic.

Wystarczy
Kod:
int Sub ct1_Click()
   message "Klik"
endsub



Niestety to nie działa :-( Po kliknięciu w kontrolkę żadnego komunikatu.

Autor:  rafal [ 2016-09-13, 13:41 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

możliwe, że trzeba wystawić zdarzenia na zewnątrz przez

Kod:
        public event EventHandler ControlkaClick
        {
            add { this.Click += value; }
            remove { this.Click -= value; }
        }

Autor:  koronen [ 2016-11-04, 01:01 ]
Tytuł:  Re: Udostępnienie zdarzeń kontrolki .NET w AmBasic

Panowie udało się z tego zrobić działającą kontrolkę z obsługą zdarzeń w Ambasic czy nie? Jeśli tak to podzielicie się kodem kontrolki i Ambasic? Dzięki.

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/