![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#7
|
|||
|
|||
![]() Не, ваш код все таки помог,
теперь, я могу и из списка выбирать или печатая (по-буквенно) или с помощью мышки, и если в списке нет, то заводить нового. обработка "OnChange" DBEdit Код:
procedure TFMain.DBEdit_OnChange(ADBEdit: TDBEdit; ADBComboBox: TDBLookupComboBoxEh; ADBDataSet: TIBDataSet); //handling var LPos: integer; LEvEdit: TNotifyEvent; LLastName, LSourceData: string; begin LEvEdit := ADBEdit.OnChange; ADBEdit.OnChange := nil; if (ADBDataSet.State in [dsInsert, dsEdit]) then begin LLastName := ADBEdit.Text; Delete(LLastName, ADBEdit.SelStart+1, length(ADBEdit.Text)); ADBEdit.Text := LLastName; LPos := length(ADBEdit.Text); if Pr_TypeEvent = 1 then LSourceData := ADBComboBox.Text else LSourceData := ADBEdit.Text; if ADBComboBox.ListSource.DataSet.Locate(ADBComboBox.KeyField, LSourceData, [loPartialKey]) then begin ADBComboBox.KeyValue := ADBComboBox.ListSource.DataSet.FieldByName(ADBComboBox.KeyField).value; ADBDataSet.FieldByName('KEEP_LAST_NAME').AsString := ADBComboBox.Text; end; ADBEdit.SelStart := LPos; end; ADBEdit.OnChange := LEvEdit; Pr_TypeEvent := 0; LEvEdit := dblcbehKeepLastName.OnChange; ADBComboBox.OnChange := nil; ADBComboBox.Clear; ADBComboBox.OnChange := LEvEdit; end; заполнение всех других полей из сотрудника, по выходу из поля "Фамилия" Код:
procedure TFMain.EditLNP_OnExit(ADBEdit: TDBEdit; ADBDataSet: TIBDataSet); var LEvEdit: TNotifyEvent; begin LEvEdit := ADBEdit.OnChange; ADBEdit.OnChange := nil; if ADBDataSet.FieldByName('KEEP_LAST_NAME').AsString = ibdsPeople.FieldByName('LNP').AsString then begin ADBDataSet.FieldByName('KEEP_LAST_NAME').AsString := ibdsPeople.FieldByName('FAMILY_NAME').AsString; ADBDataSet.FieldByName('KEEP_NAME').AsString := ibdsPeople.FieldByName('NAME').AsString; ADBDataSet.FieldByName('KEEP_PATRONYMIC').AsString := ibdsPeople.FieldByName('PATRONYMIC_NAME').AsString; if ADBEdit = dbedKeepLastName then begin ADBDataSet.FieldByName('KEEP_DEGREE').AsString := ibdsPeople.FieldByName('DEGREE').AsString; ADBDataSet.FieldByName('KEEP_RANK').AsString := ibdsPeople.FieldByName('RANK').AsString; ADBDataSet.FieldByName('KEEP_POSITION').AsString := ibdsPeople.FieldByName('POSITION_PEOPLE').AsString; end else begin ADBDataSet.FieldByName('KEEP_TELEPHONE').AsString := ibdsPeople.FieldByName('TELEPHONE').AsString; ADBDataSet.FieldByName('KEEP_E_MAIL').AsString := ibdsPeople.FieldByName('E_MAIL').AsString; end; end; ADBEdit.OnChange := LEvEdit; Pr_PermitFullDBEdit := false; end; procedure TFMain.DBEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_BACK) or (Key = VK_DELETE) then begin if Assigned(dbedLNP.OnChange) then Pr_LEvEdit := dbedLNP.OnChange; dbedLNP.OnChange := nil; end else if Assigned(Pr_LEvEdit) then dbedLNP.OnChange := Pr_LEvEdit; end; Последний раз редактировалось Konstantin-78, 13.12.2015 в 03:10. |