Mercator peut prendre en compte des objets personnalisés, qui seront ajoutables dans les écrans personnalisables au même titre que les objets (MovableObjects) standard de Mercator. Pour cela, il suffit que la classe que l'on souhaite utiliser en tant qu'objet personnalisé implémente l'interface MercatorUi.MovableControls.Interfaces.IMovableControl.
Ci-dessous est repris un exemple de code qui surclasse un UserControl et qui implémente cette interface.
Depuis la version 10.10.597 de MercatorUi.dll, il faut ajouter PictureBoxesToRefresh (voir ci-dessous).
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace TestMovableObject
{
public partial class TestUserControl : UserControl, MercatorUi.MovableControls.Interfaces.IMovableControl
{
public TestUserControl()
{
InitializeComponent();
}
#region propriétés requises par IMovableControl
// la Form qui héberge ce MovableObject
public MercatorUi.MovableControls.Interfaces.IFormForMovableControls Form { get; set; }
// indique que le contrôle est à la disposition de l'utilisateur : tous les évènements du style "valueChanged" sont causés par l'utilisateur, pas par Mercator
public bool UserMode { get; set; }
public bool AfterDone { get; set; }
public List<MercatorUi.MovableControls.MovableExpression> ExpressionsToRefresh { get; set; }
public List<MercatorUi.MovableControls.MovablePictureBox> PictureBoxesToRefresh { get; set; }
#endregion
#region méthodes requises par IMovableControl
public void OnAfterRead(EventArgs e)
{
if (Form is MercatorUi.Forms.Sig.SigForm)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)Form;
label1.Text = string.Format("Vous êtes dans le signalétique {0} et la fiche en cours est \"{1}\" !", sigForm.Sig.Module, sigForm.DataSourceRow[sigForm.Sig.Letter1 + "_ID"]);
}
}
public void OnBeforeWrite(EventArgs e)
{
}
public void OnAfterWrite(EventArgs e)
{
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
if (Form is MercatorUi.Forms.Sig.SigForm)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)Form;
if (sigForm.Sig.Module == MercatorUi.Sig._SigEnum.STOCK)
MercatorUi.Dialogs.Stop(sigForm.DataSourceRow["S_MODELE"].ToString());
else
MercatorUi.Dialogs.Stop(sigForm.DataSourceRow[sigForm.Sig.Letter1 + "_NOM"].ToString());
}
}
}
}
(Le projet contenant ce code est disponible dans le fichier ZIP. Il doit référencer MercatorUi.dll et MercatorComponent.dll)
La DLL produite doit être ensuite placée dans le répertoire principal de Mercator (ou dans le répertoire local si les ressources sont installées localement). Enfin, cette DLL doit être tirée (drag & drop) dans l'écran accessible via "Outils / Paramètres / Custom Movable Objects". (Si la DLL contient plusieurs classes, la classe souhaitée peut être sélectionnée via le déroulant)
Une fois cette DLL et cette classe inscrite dans le paramétrage de Mercator, elle s'ajoute dans la liste des objets disponibles. Elle est mentionnée sous la forme DLL (sans extension) : nom de classe.
Le code repris ci-dessus est à considérer comme un point de départ permettant de réaliser un objet personnalisé. Il ne présente aucune ambition fonctionnelle. Son seul objectif est de montrer comment la mécanique fonctionne. Il a été conçu pour être ajouté dans les signalétiques (SigForm).
- La méthode OnAfterRead montre comment exécuter un code lors du passage de fiche en fiche, juste après que Mercator ait lu les données de l'enregistrement en cours. Nous l'utilisons pour afficher dans un label un message indiquant notamment le nom du signalétique en cours ainsi que l'identifiant de la fiche.
- Nous avons ajouté un bouton qui présente une boîte de dialogue montrant le nom de la fiche en cours.
A télécharger :
0000002042.zip (10 Kb - 20/03/2023)