using System;
using System.Collections.Generic;
using System.Text;
using MercatorApi;
using MercatorExtensions;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using System.Runtime.InteropServices;
namespace HistCli
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
{
/*
* FormLoadCustomize est l'implémentation de l'interface IFormLoadCustomizer.
* Comme cette méthode reçoit en paramètre un Form (fenêtre de base - car on peut utiliser cette interface pour divers écrans),
* il faut d'abord effectuer un cast Form -> HistForm
* Ensuite, on écrit un code qui sera exécuté à la fin de l'évènement Load de HistForm.
*/
public void FormLoadCustomize(Form WindowsForm)
{
MercatorUi.Forms.Hist.HistForm HistForm = (MercatorUi.Forms.Hist.HistForm)WindowsForm;
HistForm.dataGridView.CellMouseMove += new DataGridViewCellMouseEventHandler(dataGridView_CellMouseMove);
HistForm.Move += new EventHandler(HistForm_Move);
HistForm.FormClosing += new FormClosingEventHandler(HistForm_FormClosing);
form = WindowsForm;
}
public void FormClosedCustomize(Form WindowsForm) // il faut se désabonner de tous les events auxquels on s'est abonné dans FormLoadCustomize (donc, il est nécessaire d'implémenter IFormClosedCustomizer)
{
MercatorUi.Forms.Hist.HistForm HistForm = (MercatorUi.Forms.Hist.HistForm)WindowsForm;
HistForm.dataGridView.CellMouseMove -= new DataGridViewCellMouseEventHandler(dataGridView_CellMouseMove);
HistForm.Move -= new EventHandler(HistForm_Move);
HistForm.FormClosing -= new FormClosingEventHandler(HistForm_FormClosing);
}
private string last_ident = "";
private Form form;
void dataGridView_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
IntPtr activeHandle = MercatorWM.WMdll.GetActiveWindow();
if ((activeHandle == form.Handle) || (activeHandle == MercatorUi.Wait.WaitStatic.CurrentHandle))
{
DataGridView dataGridView = (DataGridView)sender;
if ((e.RowIndex > -1) && (e.ColumnIndex <= 5) && (dataGridView.Rows[e.RowIndex].Cells["piece"].Value != DBNull.Value))
{
string id = dataGridView.Rows[e.RowIndex].Cells["id"].Value.ToString();
string journal = dataGridView.Rows[e.RowIndex].Cells["journal"].Value.ToString();
Int64 piece = Convert.ToInt64(dataGridView.Rows[e.RowIndex].Cells["piece"].Value);
if (last_ident != id + journal + piece.ToString())
{
Point p = new Point();
GetCursorPos(ref p);
string s = "<p><strong>" + journal.Trim() + " " + piece.ToString() + "</strong></p>";
MercatorSqlParam[] param = new MercatorSqlParam[3]
{
new MercatorSqlParam ("@id", id, SqlDbType.Char),
new MercatorSqlParam ("@journal", journal, SqlDbType.Char),
new MercatorSqlParam ("@piece", piece, SqlDbType.Int)
};
DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, "select top 5 q,designatio from lignes_v (NOLOCK) where (id=@id) and (journal=@journal) and (piece=@piece) and (designatio<>'') order by recno \r\n select count(*) as nbre from lignes_v (NOLOCK) where (id=@id) and (journal=@journal) and (piece=@piece) and (designatio<>'')", param);
if (ds != null)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
if (Convert.ToInt32(dr["q"]) == 0)
s += dr["designatio"].ToString().Trim() + "<br />";
else
s += Convert.ToInt32(dr["q"]).ToString("### ##0.00").Trim() + " " + dr["designatio"].ToString().Trim() + "<br />";
}
if (Convert.ToInt32(ds.Tables[1].Rows[0]["nbre"]) > 5)
s += "...";
}
if (s.EndsWith("<br />"))
s = s.Substring(0, s.Length - 6);
MercatorUi.Wait.WaitStatic.WaitWindowBaseThread(s, p, 3);
last_ident = id + journal + piece.ToString();
}
}
}
}
[DllImport("user32.dll")]
static extern bool GetCursorPos(ref Point lpPoint);
void HistForm_Move(object sender, EventArgs e)
{
MercatorUi.Wait.WaitStatic.WaitClearBaseThread();
}
void HistForm_FormClosing(object sender, FormClosingEventArgs e)
{
MercatorUi.Wait.WaitStatic.WaitClearBaseThread();
}
}
}