Показать сообщение отдельно
  #19  
Старый 05.03.2013, 14:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Абисняю
Код:
uses
  DateUtils;
 
function GetDecimal(Value:string):Integer; // ф-я перевода кастомной строки в число
var
  sResult:string;
  i: Integer;
begin
  sResult:='';

  for i := 1 to Length(Value) do
    if CharInSet(Value[i],['0'..'9']) then // отсортировываем только цифры
      sResult:=sResult+Value[i]; // выцепили из всей котовасии только числа

  Result:=StrToIntDef(sResult,0); // переводим число в строку
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
 // обработчик изменения комбобокса
begin
  if Pos(AnsiUpperCase('дн'), AnsiUpperCase((Sender as TComboBox).Text))>0 then // если в комбококче выбрана строчка, в которой есть слово "дн"
    DateTimePicker1.Date:=IncDay(DateTimePicker1.Date,-1*GetDecimal((Sender as TComboBox).Text)); // инкрементим день

  if Pos(AnsiUpperCase('ме'), AnsiUpperCase((Sender as TComboBox).Text))>0 then // аналогично
    DateTimePicker1.Date:=IncMonth(DateTimePicker1.Date,-1*GetDecimal((Sender as TComboBox).Text)); // инкрементим месяц

  if (Pos(AnsiUpperCase('го'), AnsiUpperCase((Sender as TComboBox).Text))>0 ) or 
     (Pos(AnsiUpperCase('ле'), AnsiUpperCase((Sender as TComboBox).Text))>0 ) then
    DateTimePicker1.Date:=IncYear(DateTimePicker1.Date,-1*GetDecimal((Sender as TComboBox).Text)); // инкрементим год
end;
З.Ы. немного переформатировал код для удобства чтения

Код:
uses
  DateUtils;
 
function GetDecimal(Value:string):Integer; // ф-я перевода кастомной строки в число
var
  sResult:string;
  i: Integer;
begin
  sResult:='';

  for i := 1 to Length(Value) do
    if CharInSet(Value[i],['0'..'9']) then // отсортировываем только цифры
      sResult:=sResult+Value[i]; // выцепили из всей котовасии только числа

  Result:=StrToIntDef(sResult,0); // переводим число в строку
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
 // обработчик изменения комбобокса
var
  cbStr: string;
begin
  cbStr := AnsiUpperCase((Sender as TComboBox).Text);

  if Pos('ДН', cbStr)>0 then // если в комбококче выбрана строчка, в которой есть слово "дн"
    DateTimePicker1.Date:=IncDay(DateTimePicker1.Date,-1*GetDecimal(cbStr) // инкрементим день
  else
  if Pos('МЕ', cbStr)>0 then // аналогично
    DateTimePicker1.Date:=IncMonth(DateTimePicker1.Date,-1*GetDecimal(cbStr) // инкрементим месяц
  else
  if (Pos('ГО', cbStr)>0 ) or (Pos('ЛЕ', cbStr)>0 ) then
    DateTimePicker1.Date:=IncYear(DateTimePicker1.Date,-1*GetDecimal(cbStr) // инкрементим год
end;
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием