public void Dispose() { if (dcdEvent != null) { dcdEvent.Dispose(); dcdEvent = null; } if (hDcd != null) { hDcd.Dispose(); hDcd = null; } }
/// <summary> /// »нициализаци¤ PSC сканера /// </summary> /// <returns>Whether initialization was successful</returns> public override bool Initialize() { bool ret = false; if (null == hPSC) { try { hPSC = new Terminal.API.DcdHandle(DcdDeviceCap.Exists | DcdDeviceCap.Barcode); SetScanHandler(cInvoker); ret = true; } //catch (DcdException) - если надо catch {} } return(ret); }
public void InitScanner() { try { hDcd = new DcdHandle(DcdDeviceCap.Exists | DcdDeviceCap.Barcode); // Now that we've got a connection to a barcode reading device, assign a // method for the DcdEvent. A recurring request is used so that we will // continue to get barcode data until our dialog is closed. DcdRequestType reqType = (DcdRequestType)1 | DcdRequestType.PostRecurring; // Initialize event dcdEvent = new DcdEvent(hDcd, reqType); dcdEvent.Scanned += new DcdScanned(dcdEvent_Scanned); Log.Info("Barcode scanner detected.", "Scan"); } catch (Exception ex) { TerminalException ex2 = new TerminalException("Barcode scanner not detected.", ex); Log.Exception(ex2); } }
/// <summary> /// Управляющая процедура /// </summary> void Manager(UserAction ua) { try { //if (DcdEvent != null && State != ProgramState.InitialState) // DcdEvent.Scanned -= DcdScannedDelegate; #region Начальное состояние // Начальное состояние if (State == ProgramState.InitialState) { Cache.UpdateCatalogs(); FillProdsList(); FillDefsList(); FillWorksList(); string wID, passw; while (true) { AuthentificationForm.ShowDialog(); if (AuthentificationForm.DialogResult != DialogResult.OK) { Close(); } wID = AuthentificationForm.textBox1.Text; passw = AuthentificationForm.textBox2.Text; if (Cache.VerifyPassword(wID, passw) == true) { break; } else { MessageBox.Show("Неверный код пользователя или пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); } } if (MessageBox.Show("Сканер работает?", "Отладка", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) { DcdHandle = new DcdHandle(DcdDeviceCap.Barcode); DcdEvent = new DcdEvent(DcdHandle, DcdRequestType.PostRecurring, this); DcdHandle.SetReadAhead(false); DcdScannedDelegate = new DcdScanned(DcdEvent_Scanned); DcdEvent.Scanned += DcdScannedDelegate; } ModifyLayout(ProdsList, null, "Добавить", "Выбрать", "Обновить"); State = ProgramState.ProdsList; return; } #endregion #region Список изделий // Сканирован код изделия (или введен вручную) if (State == ProgramState.ProdsList && (ua == UserAction.Scan || ua == UserAction.EnterCode)) { Cache.SelectedProdID = ScannedID; if (Cache.VerifyProdID() == false) { Cache.UpdateProdInfo(); if (Cache.VerifyProdID() == false) { throw new Exception("Неверный код изделия"); } } Cache.FillTempRegs(); FillRegsList(); if (RegsList.Items.Count != 0) { ModifyLayout(RegsList, ProdsList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; } else { ModifyLayout(DefsList, ProdsList, "Выбрать", "Отмена", ""); State = ProgramState.DefsList; } return; } // Ручной ввод кода изделия (по кнопке "Добавить") if (State == ProgramState.ProdsList && ua == UserAction.Add) { InputForm.textBox1.Text = ""; InputForm.Text = "Список изделий"; InputForm.label1.Text = "Введите штрих-код изделия:"; InputForm.ShowDialog(); if (InputForm.DialogResult == DialogResult.OK) { Cache.SelectedProdID = InputForm.textBox1.Text; if (Cache.VerifyProdID() == false) { Cache.UpdateProdInfo(); if (Cache.VerifyProdID() == false) { throw new Exception("Неверный код изделия"); } } Cache.FillTempRegs(); FillRegsList(); if (RegsList.Items.Count != 0) { ModifyLayout(RegsList, ProdsList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; } else { ModifyLayout(DefsList, ProdsList, "Выбрать", "Отмена", ""); State = ProgramState.DefsList; } } return; } // Выбрано изделие из списка if (State == ProgramState.ProdsList && ua == UserAction.Select) { SetSelectedProdID(); if (Cache.VerifyProdID() == false) { throw new Exception("Неверный код изделия"); } Cache.FillTempRegs(); FillRegsList(); if (RegsList.Items.Count != 0) { ModifyLayout(RegsList, ProdsList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; } else { ModifyLayout(DefsList, ProdsList, "Выбрать", "Отмена", ""); State = ProgramState.DefsList; } return; } #endregion #region Список регистраций // Код сканирован или введен вручную if (State == ProgramState.RegsList && (ua == UserAction.Scan || ua == UserAction.EnterCode)) { Cache.SelectedDefID = ScannedID; if (Cache.VerifyDefID() == false) { throw new Exception("Неверный код дефекта"); } if (Cache.DefAlreadyRegistered() == true) { if (Cache.GetTempRegState() != "NewTemp") { throw new Exception("Невозможно править сохраненную запись"); } SelectActionForm.Text = "Правка записи"; SelectActionForm.label1.Text = "Выберете действие:"; SelectActionForm.button1.Text = "Изменить"; SelectActionForm.button2.Text = "Удалить"; SelectActionForm.button3.Text = "Отмена"; SelectActionForm.ShowDialog(); if (SelectActionForm.DialogResult == DialogResult.Cancel) { return; } // Удалить запись if (SelectActionForm.DialogResult == DialogResult.No) { AcceptionForm.Text = "Удаление записи"; AcceptionForm.label1.Text = "Удалить запись?"; AcceptionForm.ShowDialog(); if (AcceptionForm.DialogResult == DialogResult.Yes) { Cache.DelTempReg(); RemoveRegsListRecord(); } } // Изменить запись if (SelectActionForm.DialogResult == DialogResult.Yes) { ModifyLayout(DefsList, RegsList, "Выбрать", "Далее", "Отмена"); State = ProgramState.DefsListEditing; } } else { SelectDefsListRecord(); ModifyLayout(WorksList, RegsList, "Выбрать", "Назад", "Отмена"); State = ProgramState.WorksList; } return; } // Выход из списка регистраций if (State == ProgramState.RegsList && ua == UserAction.Finish) { if (Cache.TempRegsAdded() == true) { SelectActionForm.Text = "Сохранение изменений"; SelectActionForm.label1.Text = "Сохранить изменения?"; SelectActionForm.button1.Text = "Да"; SelectActionForm.button2.Text = "Нет"; SelectActionForm.button3.Text = "Отмена"; SelectActionForm.ShowDialog(); if (SelectActionForm.DialogResult == DialogResult.Cancel) { return; } if (SelectActionForm.DialogResult == DialogResult.Yes) { Cache.AcceptTempRegs(); TryToRemoveProdsListRecord(); if ((ProdsList.Items.Count + 1) / 5 > ProgramSettings.MaxProdsListRecords) { RemoveFirstProdsListRecord(); } AddProdsListRecord(); } } ModifyLayout(ProdsList, RegsList, "Добавить", "Выбрать", "Обновить"); State = ProgramState.ProdsList; return; } // Добавление записи о дефекте if (State == ProgramState.RegsList && ua == UserAction.Add) { ModifyLayout(DefsList, RegsList, "Выбрать", "Отмена", ""); State = ProgramState.DefsList; return; } // Изменение записи о дефекте if (State == ProgramState.RegsList && ua == UserAction.Change) { SetSelectedReg(); if (Cache.GetTempRegState() != "NewTemp") { throw new Exception("Невозможно править сохраненную запись"); } SelectActionForm.Text = "Правка записи"; SelectActionForm.label1.Text = "Выберете действие:"; SelectActionForm.button1.Text = "Изменить"; SelectActionForm.button2.Text = "Удалить"; SelectActionForm.button3.Text = "Отмена"; SelectActionForm.ShowDialog(); if (SelectActionForm.DialogResult == DialogResult.Cancel) { return; } // Удалить запись if (SelectActionForm.DialogResult == DialogResult.No) { AcceptionForm.Text = "Удаление записи"; AcceptionForm.label1.Text = "Удалить запись?"; AcceptionForm.ShowDialog(); if (AcceptionForm.DialogResult == DialogResult.Yes) { Cache.DelTempReg(); RemoveRegsListRecord(); } } // Изменить запись if (SelectActionForm.DialogResult == DialogResult.Yes) { ModifyLayout(DefsList, RegsList, "Выбрать", "Далее", "Отмена"); State = ProgramState.DefsListEditing; } return; } #endregion #region Список дефектов // Код дефекта введен или сканирован if (State == ProgramState.DefsList && (ua == UserAction.Scan || ua == UserAction.EnterCode)) { Cache.SelectedDefID = ScannedID; if (Cache.VerifyDefID() == false) { throw new Exception("Неверный код дефекта"); } if (Cache.DefAlreadyRegistered() == true) { throw new Exception("Дефект уже зарегистрирован"); } SelectDefsListRecord(); ModifyLayout(WorksList, DefsList, "Выбрать", "Назад", "Отмена"); State = ProgramState.WorksList; return; } // Код дефекта введен или сканирован (в режиме редактирования записи) if (State == ProgramState.DefsListEditing && (ua == UserAction.Scan || ua == UserAction.EnterCode)) { Cache.SelectedDefID = ScannedID; if (Cache.VerifyDefID() == false) { throw new Exception("Неверный код дефекта"); } if (Cache.DefAlreadyRegistered() == true) { throw new Exception("Дефект уже зарегистрирован"); } SelectDefsListRecord(); ModifyLayout(WorksList, DefsList, "Выбрать", "Назад", "Отмена"); State = ProgramState.WorksListEditing; return; } // Выход из режима добавления дефекта if ((State == ProgramState.DefsList || State == ProgramState.DefsListEditing) && ua == UserAction.Cancel) { ModifyLayout(RegsList, DefsList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } // Дефект выбран if (State == ProgramState.DefsList && ua == UserAction.Select) { SetSelectedDefID(); if (Cache.DefAlreadyRegistered() == true) { throw new Exception("Дефект уже зарегистрирован"); } ModifyLayout(WorksList, DefsList, "Выбрать", "Назад", "Отмена"); State = ProgramState.WorksList; return; } // Деффект выбран (в режиме редактирования записи) if (State == ProgramState.DefsListEditing && ua == UserAction.Select) { SetSelectedDefID(); if (Cache.DefAlreadyRegistered() == true) { throw new Exception("Дефект уже зарегистрирован"); } ModifyLayout(WorksList, DefsList, "Выбрать", "Далее", "Отмена"); State = ProgramState.WorksListEditing; return; } // Деффект пропущен (в режиме редактирования записи) if (State == ProgramState.DefsListEditing && ua == UserAction.Next) { SelectDefsListRecord(); ModifyLayout(WorksList, DefsList, "Выбрать", "Далее", "Отмена"); State = ProgramState.WorksListEditing; return; } #endregion #region Список операторов // Код оператора введен или сканирован if (State == ProgramState.WorksList && (ua == UserAction.Scan || ua == UserAction.EnterCode)) { Cache.SelectedWorkID = ScannedID; if (Cache.VerifyWorkID() == false) { throw new Exception("Неверный код оператора"); } SelectWorksListRecord(); SetSelectedDefID(); Cache.AddTempReg(); AddRegsListRecord(); ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } // Код оператора введен или сканирован (в режиме редактирования записи) if (State == ProgramState.WorksListEditing && (ua == UserAction.Scan || ua == UserAction.EnterCode)) { Cache.SelectedWorkID = ScannedID; if (Cache.VerifyWorkID() == false) { throw new Exception("Неверный код оператора"); } SelectWorksListRecord(); SetSelectedReg(); RemoveRegsListRecord(); Cache.DelTempReg(); SetSelectedDefID(); SetSelectedWorkID(); Cache.AddTempReg(); AddRegsListRecord(); ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } // Назад к выбору дефекта if (State == ProgramState.WorksList && ua == UserAction.Back) { ModifyLayout(DefsList, WorksList, "Выбрать", "Отмена", ""); State = ProgramState.DefsList; return; } // Отмена добавления записи о дефекте if ((State == ProgramState.WorksList || State == ProgramState.WorksListEditing) && ua == UserAction.Cancel) { ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } // Оператор выбран if (State == ProgramState.WorksList && ua == UserAction.Select) { SetSelectedDefID(); SetSelectedWorkID(); Cache.AddTempReg(); AddRegsListRecord(); ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } // Оператор выбран (в режиме редактирования записи) if (State == ProgramState.WorksListEditing && ua == UserAction.Select) { SetSelectedReg(); RemoveRegsListRecord(); Cache.DelTempReg(); SetSelectedDefID(); SetSelectedWorkID(); Cache.AddTempReg(); AddRegsListRecord(); ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } // Оператор пропущен (в режиме редактирования записи) if (State == ProgramState.WorksListEditing && ua == UserAction.Next) { SelectWorksListRecord(); RemoveRegsListRecord(); Cache.DelTempReg(); SetSelectedDefID(); Cache.AddTempReg(); AddRegsListRecord(); ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить"); State = ProgramState.RegsList; return; } #endregion } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); } finally { //if (DcdEvent != null) //{ // DcdEvent.Scanned += DcdScannedDelegate; //} } }