Главная страница
    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.49 MB
Время: 0.035 c
6-1077183962
NTDim
2004-02-19 12:46
2004.04.18
Маппинг портов


4-1076290857
EcoloRa
2004-02-09 04:40
2004.04.18
Свое окно поверх окна диспетчера задач


14-1080238428
Yegor
2004-03-25 21:13
2004.04.18
Бесплантый интернет


9-1066138943
MadWand
2003-10-14 17:42
2004.04.18
Пощь бы начинающему чайнику %)


11-1063301468
Immortal_Death
2003-09-11 21:31
2004.04.18
PStream





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский