Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1080639460
infom
2004-03-30 13:37
2004.04.18
dxTreeList


1-1080549354
YT
2004-03-29 12:35
2004.04.18
Как проверить что окно было последним с которым работал


3-1079530673
DimaF
2004-03-17 16:37
2004.04.18
Firebird


7-1076517027
ZeBriD
2004-02-11 19:30
2004.04.18
Завершение работы под ХР


6-1076606946
Stuart
2004-02-12 20:29
2004.04.18
TSocket Client, TSocketServer глюки :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский