Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизЧастичная автоматизация. Найти похожие ветки
← →
ikondakov (2004-03-18 14:55) [0]Здравствуйте. Есть база данных на Фоксе. Создаётся вводилка на Delphi с помощью автоматического переноса полей. Надо сделать так, чтобы как только максимальное количество символов достигнет MaxLength у поля ввода надо перескочить на другое (следущее) без нажатия клавиш. И, к стати, как это MaxLength автоматически выставлять при переносе полей. В соответствии с таблицей естественно!
← →
Domkrat (2004-03-18 15:56) [1]Смотря какой компонент Вы используете для ввода данных ?
← →
KSergey © (2004-03-18 16:01) [2]Чтол есть перенос "полей"? Пока я понял лишь, что длинный текст решено разбивать по полям одной записи. Или разных??
Да и Domkrat прав...
← →
ikondakov (2004-03-18 16:26) [3]Все компоненты DBEdit. Перенос полей - это перетаскивание поля из редактора полей Table (если по нему 2 наза кликнуть) на форму. В результате Дельфя сама выбирает какой компонент использовать.
Поля не разбиваются, просто у каждого из них разное количество символов (цифр) можно ввести.
← →
Соловьев © (2004-03-18 16:45) [4]надо чтобы фокус ввода менялся? или данные на части разбивались?
если первое - то пользователи тебя убьют(по табу или ентеру надо делать), а если второе - то может тебе надо BLOB? только причем здесь цифры?
← →
KSergey © (2004-03-18 16:52) [5]Видимо, автору хочется передавать фокус ;)
В принципе, вещь не всегда ужасная, например в случае наличия большого кол-во полей с относительно короткими текстами фиксированной длины. Это вполне может оказаться удобно при "вбивке" большого объема данных (через 2-3 буквы/цифры жать Tab? не, это не очень здорово)
Думаю, надо рыть в сторону обработчика onChange элементов ввода. Сделать для всех единый и в нем разруливать завершенность ввода (см. параметр Sender в этом обработчике).
PS
Что можно поля таскать на форму - не знал ;)
← →
ikondakov (2004-03-18 16:53) [6]Мне надо первое, причём ровно так как я написал.
Дело в том, что так на фоксе реализовано когда там проги делаешь! Пользователи меня не убьют, потому что вводщики - им пофиг они просто коды вбивают и всё, главное базу заполнить. По табу и ентеру я знаю как и это не прокатит, лишний лик. я делал так:
procedure TForm1.DBEdit1Change(Sender: TObject);
begin
if length(DBEDIT1.Text)=dbedit1.MaxLength then
Perform(WM_NEXTDLGCTL,0,0);
end;
но полей довига и для каждого такое прописывать... это гимор. может есть что-то более обобщённое?
← →
KSergey © (2004-03-18 16:55) [7]Более обобщенное - см. KSergey © (18.03.04 16:52) [5]
Код примерно такой:
procedure TForm1.OnDBEditChange(Sender: TObject);
begin
with Sender as TDBEdit do
if length(Text)=MaxLength then
Perform(WM_NEXTDLGCTL,0,0);
end;
Этот обработчик назначить всем DBEdit"ам
← →
ikondakov (2004-03-18 17:15) [8]не хочет он перескакивать. просто ничего не происходит.
← →
Соловьев © (2004-03-18 17:19) [9]имхо...гониво это все. Оператор должен быть не просто набивалкой, а как-то фиксировать как-то свои действия...Табом или энтером...
Брекпойнт поставь(Perform) и посмотри что происходит...
А у Едитов.Tabstop = true?
← →
ikondakov (2004-03-18 17:23) [10]за оператором прога следить будет. Они тупы по жизни. (Заранее прошу прощения у всех операторов, но у нас они такие)у Едитов.Tabstop = true. Вот моя конструкция работает, а эта попадает на оператор Perform(WM_NEXTDLGCTL,0,0); но ничего не происходит!
← →
stud © (2004-03-18 17:27) [11]вот еще вариант
if length((sender as TdxEdit).Text)=((sender as TdxEdit).MaxLength) then
begin
beep;
newvrachf.SelectNext((newvrachf.ActiveControl),true,true);
(newvrachf.ActiveControl as TdxEdit).SelLength:=0;
end;
← →
ikondakov (2004-03-18 17:38) [12]newvrachf - а что это?
← →
stud © (2004-03-18 17:45) [13]это форма на которой лежат у меня компоненты
← →
panov © (2004-03-18 17:55) [14]
procedure TForm1.DBEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then
begin
Key := 0;
SelectNext((Sender as TDBedit),True,True);
Exit;
end;
if Key in [VK_UP,VK_DOWN,VK_TAB,VK_LEFT,VK_RIGHT,VK_SHIFT,VK_END,VK_HOME] then Exit;
if (Sender as TDBedit).MaxLength=Length((Sender as TDBedit).Text)
then SelectNext((Sender as TDBedit),True,True);
end;
<CODE/>
← →
ikondakov (2004-03-18 18:22) [15]спасибо, это то, что надо!!!
← →
KSergey © (2004-03-19 07:44) [16]> KSergey © (18.03.04 16:55) [7]
> Этот обработчик назначить всем DBEdit"ам
> ikondakov (18.03.04 17:15) [8]
> не хочет он перескакивать. просто ничего не происходит.
> ikondakov (18.03.04 17:23) [10]
> Вот моя конструкция работает, а эта попадает на
> оператор Perform(WM_NEXTDLGCTL,0,0); но ничего не происходит!
Блин, а голова на что дадена? только примеры копировать?? А подумать почему оно так работает, а так - нет?
Да, недодумал немного. Надо было так:procedure TForm1.OnDBEditChange(Sender: TObject);
begin
with Sender as TDBEdit do
if length(Text)=MaxLength then
Self.Perform(WM_NEXTDLGCTL,0,0);
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c