Текущий архив: 2006.11.19;
Скачать: CL | DM;
ВнизTIntegerField.EditMask Найти похожие ветки
← →
alehan © (2006-09-19 18:43) [0]В базе время храниться в секундах, пользователь видит и вводит его по маске nn:ss. На форме ClientDataSet с двумя Integer-полями, DataSource и DBGrid. У полей заданы события OnSetText и OnGetText и св-во EditMask.
Код:
TForm1 = class(TForm)
ClientDataSet: TClientDataSet;
ClientDataSetN1: TIntegerField;
ClientDataSetN2: TIntegerField;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure ClientDataSetNGetText(Sender: TField; var Text: String; DisplayText: Boolean);
procedure ClientDataSetNSetText(Sender: TField; const Text: String);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSetN1.EditMask:="99\:99;1;_";
ClientDataSetN2.EditMask:="99\:99;1;_";
ClientDataSet.CreateDataSet;
end;
procedure TForm1.ClientDataSetNGetText(Sender: TField; var Text: String; DisplayText: Boolean);
var i, j: integer;
begin
i:=Sender.AsInteger;
j:=i mod 60; Text:=IntToStr(j); if j<=9 then Text:="0"+Text;
i:=(i-j) div 60; Text:=IntToStr(i)+":"+Text; if i<=9 then Text:="0"+Text;
end;
procedure TForm1.ClientDataSetNSetText(Sender: TField; const Text: String);
begin
//ShowMessage(Text);
Sender.AsInteger:=60*StrToIntDef(copy(Text,1,2),0)+StrToIntDef(copy(Text,4,2),0);
end;
Если вводить вручную - всё работает нормально.
Но если копировать в DBGrid из буфера обмена (строку типа "12:34") - при переходе в другой столбец значение сбрасывается на старое. Закомментированный ShowMessage в OnSetText показывает тоже старое значение.
Кто-нибудь делал что-то похожее? Помогите! Спасибо.
← →
alehan © (2006-09-20 13:15) [1]В Delphi2006 тоже самое.
TJvDBGrid ведёт себя также.
А вот обычный TDBEdit - работает нормально. Т.е. воспринимает ввод через буфер обмена. Т.е. дело именно в DBGrid.
Ну хоть посочувствовал бы кто!
Страницы: 1 вся ветка
Текущий архив: 2006.11.19;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.054 c