Files
Scanbox/ScanBox/operatorDialog.cs
2026-02-09 15:37:45 -06:00

164 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ScaBox30
{
public partial class operatorDialog : Form
{
//Key press supporting items
DateTime _lastKeystroke = new DateTime(0);
List<char> _barcode = new List<char>(10);
DateTime _date_down = new DateTime(0);
DateTime timeDelta = new DateTime(0);
int _PressedKey = 0;
//private bool barcodeOnly;
public string OPIDgave { get { return txtDialog.Text; } }
public operatorDialog(bool barcodeOnly)
{
InitializeComponent();
InitializeItems();
InitializeButtons();
if (barcodeOnly)
{
this.KeyPreview = true;
}
else
{
this.KeyPreview = false;
}
ActiveControl = this.txtDialog;
}
private void operatorDialog_KeyPress(object sender, KeyPressEventArgs e)
{
//Key_Preview must be set to True on the form EWQ
// check timing (keystrokes within 100 ms)
TimeSpan elapsed = (DateTime.Now - _lastKeystroke);
if (elapsed.TotalMilliseconds > 20)
{
_barcode.Clear();
txtDialog.Text = "";
}
// record keystroke & timestamp
_barcode.Add(e.KeyChar);
_lastKeystroke = DateTime.Now;
// process barcode
if (e.KeyChar == 13 && _barcode.Count > 0)
{
string msg = new String(_barcode.ToArray());
msg = msg.Replace("\r", "");
if (msg != "")
{
txtDialog.Text = msg;
//btnDialog.Focus();
button1.Focus();
}
_barcode.Clear();
}
}
private void operatorDialog_FormClosing(object sender, FormClosingEventArgs e)
{
switch (txtDialog.Text.Length)
{
case 6:
e.Cancel = false;
break;
case 0:
e.Cancel = true;
RJMessageBox.Show("El ID es obligatorio.", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Stop);
break;
default:
e.Cancel = true;
RJMessageBox.Show("El ID debe ser de 6 dígitos", "ScanBox", MessageBoxButtons.OK, MessageBoxIcon.Stop);
break;
}
}
private void operatorDialog_KeyDown(object sender, KeyEventArgs e)
{
_PressedKey = e.KeyValue;
_date_down = DateTime.Now;
e.Handled = true;
}
private void operatorDialog_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == _PressedKey)
{
var timeDelta = DateTime.Now - _date_down;
_PressedKey = e.KeyValue;
if (timeDelta.TotalMilliseconds > 20)
{
_barcode.Clear();
txtDialog.Text = "";
}
}
}
private void InitializeItems()
{
this.FormBorderStyle = FormBorderStyle.None;
this.Padding = new Padding(Globals.borderSize);//Set border size
this.btnClose.DialogResult = DialogResult.Cancel;
this.button1.DialogResult = DialogResult.OK;
this.labelCaption.Text = this.Text;
this.panelTitleBar.BackColor = Globals.primaryColor;
this.panelTitleBar.Padding = new Padding(0, 0, 0, Globals.borderSize);
this.BackColor = Globals.primaryColor;
this.labelMessage.Text = "Ingrese su ID";
int xCenter = (this.panelButtons.Width - labelMessage.Width) / 2;
int yCenter = (this.panelButtons.Height - labelMessage.Height) / 2;
labelMessage.Location = new Point(xCenter, labelMessage.Location.Y);
}
private void InitializeButtons()
{
int xCenter = (this.panelButtons.Width - button1.Width) / 2;
int yCenter = (this.panelButtons.Height - button1.Height) / 2;
button1.Location = new Point(xCenter, yCenter);
button1.Text = "Aceptar";
}
#region -> Drag Form
[DllImport("user32.DLL", EntryPoint = "SendMessage")]
private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
[DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
private extern static void ReleaseCapture();
private void panelTitleBar_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, 0x112, 0xf012, 0);
}
#endregion
}
}