U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Programmeerstijl: oproep van klassen van een externe assembly

0000001926     -      08-01-2015

MercatorUi.Main laat toe klassen afkomstig van externe assemblies op te roepen. Dat is mogelijk voor 3 types van klassen:

  • standaardklassen: InstanciateExternalClass
  • klassen die overeenkomen met een niet-modaal venster: ShowExternalForm
  • klassen die overeenkomen met een modaal venster: ShowExternalModalForm

 

 


 

Oproep van standaardklassen

 

Vanuit het FoxPro-gedeelte van Mercator kan de volgende code worden uitgevoerd:

 objet=ox_mercatorui.InstanciateExternalClass("Assembly.dll","EspaceDeNom.Classe")

 objet=ox_mercatorui.InstanciateExternalClass_2("Assembly.dll","EspaceDeNom.Classe", Param1)

 objet=ox_mercatorui.InstanciateExternalClass_3("Assembly.dll","EspaceDeNom.Classe", Param1, Param2)

... idem tot max. 9 parameters.

Bijvoorbeeld:

Oproep van de klasse in het FoxPro-gedeelte:

public ox_asterisk
ox_asterisk=ox_mercatorui.InstanciateExternalClass(_screen.pathonc+"MercatorAsterisk.dll","MercatorAsterisk.ClassAsterisk")

Oproep van een methode van de klasse in het FoxPro-gedeelte:

ox_asterisk.RequestClose()

Oproep van een methode in hetzelfde klasseproces in de code C#:

Zoom
void textBoxPhone_ButtonCustomClick( object sender, EventArgs e)
{
    MercatorUi.MovableControls. MovableTextBox textBox = (MercatorUi.MovableControls. MovableTextBox )sender;
     string no = Api .NumOnly(textBox.Text.Trim());
     if ((no != "" ) && MercatorUi. Globals .ExternalsObjects.ContainsKey( "MercatorAsterisk.ClassAsterisk" ))
    {
        MercatorAsterisk. ClassAsterisk classAsterisk = (MercatorAsterisk. ClassAsterisk )MercatorUi. Globals .ExternalsObjects[ "MercatorAsterisk.ClassAsterisk" ];
        classAsterisk.MakeCall(no);
    }
}

waarbij in het project een verwijzing naar MercatorAsterisk.dll is toegevoegd.

 


 

Oproep van niet-modale vensters

In Mercator is het mogelijk om niet-modale vensters op te roepen (of enige andere klasse met implementatie van de interface MercatorUi.Interfaces.IExternalForm).

Deze interface wordt als volgt gedefinieerd:

Zoom
public interface IExternalForm : IDisposable
{
     void Show(); 
     void Close();
}

Vanuit het FoxPro-gedeelte van Mercator kan de volgende code worden uitgevoerd:

ox_mercatorui.ShowExternalForm("Assembly.dll", "EspaceDeNom.Classe", "UniqueName")

ox_mercatorui.ShowExternalForm_2("Assembly.dll", "EspaceDeNom.Classe", "UniqueName", Param1)

ox_mercatorui.ShowExternalForm_3("Assembly.dll", "EspaceDeNom.Classe", "UniqueName", Param1, Param2)

... idem tot max. 9 parameters.

UniqueName is een unieke tekenreeks waarmee Mercator kan detecteren of het venster al voorkomt of niet. Als het al voorkomt, zal het niet opnieuw worden opgeroepen, maar gewoon gereactiveerd. Is deze tekenreeks leeg, dan wordt de procedure voor het detecteren van een al bestaand proces gedeactiveerd en wordt bij iedere oproep van ShowExternalForm een nieuw klasseproces gecreëerd.

 


 

Oproep van modale vensters

In Mercator is het mogelijk om modale vensters op te roepen (of enige andere klasse met implementatie van de interface MercatorUi.Interfaces.IExternalModalForm).

Deze interface wordt als volgt gedefinieerd:

Zoom
public interface IExternalModalForm : IDisposable
{
    System.Windows.Forms. DialogResult ShowDialog();
    System.Windows.Forms. DialogResult ShowDialog(System.Windows.Forms. IWin32Window owner);
}

Vanuit het FoxPro-gedeelte van Mercator kan de volgende code worden uitgevoerd:

ox_mercatorui.ShowExternalModalForm("Assembly.dll", "EspaceDeNom.Classe")

ox_mercatorui.ShowExternalModalForm_2("Assembly.dll", "EspaceDeNom.Classe", Param1)

ox_mercatorui.ShowExternalModalForm_3("Assembly.dll", "EspaceDeNom.Classe", Param1, Param2)

... idem tot max. 9 parameters.