Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 254
от 03.10.2005, 17:09

Администратор:Калашников О.А.
В рассылке:Подписчиков: 245, Экспертов: 49
В номере:Вопросов: 4, Ответов: 11


Вопрос № 26941: На форме пять компонентов (DBEdit). Как передавать фокус каждому по порядку нажимая ENTER? Заранее благодарен....
Вопрос № 26952: При очистке DBEdit-ов в первом данные не удаляются. Все редакторы связаны с полями в таблице....
Вопрос № 26966: Здраствуй народ. Спасибо всем кто мне ответил, и кто собирался. Вопрос остался... К номеру 26687. Систему я переставлял неделю назад. Вирусов нет (и не может быть, стоит касперския с ежедневным обновлением базы вирусов). Все стоит с нуля. Виндовые пр...
Вопрос № 26978: Есть ли альтернатива функции ReadDirectoryChangesW, которая бы работала под FAT32 и под WIN98, или может другой способ выяснить изменения в файлах и выяснить в каком именно файле произошли изменения?...

Вопрос № 26.941
На форме пять компонентов (DBEdit).
Как передавать фокус каждому по порядку нажимая ENTER?
Заранее благодарен.
Отправлен: 27.09.2005, 22:18
Вопрос задал: Вячеслав (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Jadd
Здравствуйте, Вячеслав!
Очень просто. Нужно: 1)Свойство формы KeyPreview выставить в true, 2)Выставить правильный порядок обходя эдитов (те. тот порядок, в котором нужно их обойти по нажатию энтера) в свойстве TabOrder для каждого и 3)на нажатие клавиши послать окну сообщение WM_NEXTDLGCTL с нулевыми lParam и wParam. Таким образом код будет выглядеть так:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
Perform(WM_NEXTDLGCTL, 0, 0);
end;

Удачи.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 27.09.2005, 22:29
Оценка за ответ: 4
Комментарий оценки:
Всё хорошо,но потом фокус почему-то переходит на кнопки,а мне этого не надо

Отвечает: Силантьев Евгений Александрович
Здравствуйте, Вячеслав!
Приведу код только для перехода из первого во второй DBEdit

procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then DBEdit2.SetFocus;
end;

Думаю дальше сами справитесь! Удачи!!!
---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 6-ой класс)
Отправлен: 27.09.2005, 23:34
Оценка за ответ: 5
Комментарий оценки:
Спасибо.
Справился.

Отвечает: Warrior
Здравствуйте, Вячеслав!

Для меня проще всего написать для каждого DBEdit вот такое:

Приложение:

Ответ отправил: Warrior (статус: 1-ый класс)
Отправлен: 28.09.2005, 00:48

Отвечает: sir henry
Здравствуйте, Вячеслав!
Надо переопределить у них событие OnKeyDown.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.09.2005, 09:04

Отвечает: Rusland
Здравствуйте, Вячеслав!
Делается это так:

procedure TDBEdit1.KeyPress(var Key: Char);
var
ctrl:TWinControl;
begin
if Key=#13 then // нажатие Enter
begin
ctrl:=Self;
ctrl:=FindNextControl(ctrl,true,true,false); // поиск следуещего компонента
if ctrl<>nil then ctrl.Setfocus; // перевод фокуса
end;
end;

---------
Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Студент)
Отправлен: 28.09.2005, 11:51
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Romodos
Здравствуйте, Вячеслав!
Просто в обработчике события OnKeyDown каждого компонента надо написать
if key=vk_return then dbedit2.setfocus; (заменив 2 на нужную цифру)

procedure TForm1.DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_return then DBEdit2.SetFocus;
end;
---------
FAQ me off!
Ответ отправил: Romodos (статус: 8-ой класс)
Отправлен: 28.09.2005, 13:28
Оценка за ответ: 5
Комментарий оценки:
Благодарю


Вопрос № 26.952
При очистке DBEdit-ов в первом данные не удаляются.
Все редакторы связаны с полями в таблице.

Приложение:

Отправлен: 28.09.2005, 02:33
Вопрос задал: Вячеслав (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Вячеслав!
Clear удаляет только текст из Edit'a, а поле в БД не трогает. Можно попробовать так:
DBEdit1.Field.AsString:=''; {Если это у Вас строковое поле}
Здесь удаляются данные, связаные с этим Edit'ом.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.09.2005, 09:12

Отвечает: Татьяна
Здравствуйте, Вячеслав!
Если дополнить sir henry, можно сказать так, DBEDIT, напрямую связан с данными таблицы, когда вы делаете Clear, очистка на самом деле происходит (визуально), но в БД изменений не произошло, поэтому, как только вы передаете фокус DBEdit1.SetFocus, данные обновляются (т.е. берутся из той же таблицы) . То же произойдет, если вы передадите фокус и на любой другой эдит. Для очистки данных в самой таблице, необходимо очищать данные непосредственно , например, как вам было предложено выше, однако следует помнить если ваши 5 полей составляют все ячейки таблицы (т.е фактически вы хотите удалить всю строку таблицы) либо указывают на ключевое поле или поле, которое не может быть нулевым, могут быть проблемы, так что будьте внимательны. Желаю удачи!
---------
Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 3-ий класс)
Отправлен: 28.09.2005, 11:31
Оценка за ответ: 5
Комментарий оценки:
Очень признателен!


Вопрос № 26.966
Здраствуй народ. Спасибо всем кто мне ответил, и кто собирался. Вопрос остался... К номеру 26687. Систему я переставлял неделю назад. Вирусов нет (и не может быть, стоит касперския с ежедневным обновлением базы вирусов). Все стоит с нуля. Виндовые программы компилируются, работают. А вот консольные я так и немогу сделать... Ошибки теже. Жду от Вас коментариев...
Отправлен: 28.09.2005, 11:34
Вопрос задал: Карасев Алексей Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, Карасев Алексей Александрович!
Какую Вы систему переставляли - Дельфи или винду? "Ошибки" - значит появились и другие, кроме той, о которой Вы уже писали? Раньше консольные приложения компилировались нормально?
Вы, часом, не партизан? Сведения из Вас приходится выуживать, что в прошлый раз, что в этот... :)
Возмите другой дистрибутив Дельфи и поставьте его. Если ошибка та же, значит дело в Вашем дистрибутиве.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.09.2005, 12:04


Вопрос № 26.978
Есть ли альтернатива функции
ReadDirectoryChangesW, которая бы работала
под FAT32 и под WIN98, или может другой способ
выяснить изменения в файлах и выяснить в
каком именно файле произошли изменения?
Отправлен: 28.09.2005, 13:38
Вопрос задал: Dadaev Zaur (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Dadaev Zaur!
А в MSDN глянуть слабо? Там пишется, что для WindowsME (надо полагать и иже с ним) есть функция FindFirstChangeNotification и FindNextChangeNotification. Там же есть пример тракинга изменений.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 28.09.2005, 13:46
Оценка за ответ: 2
Комментарий оценки:
ПРо эти функциия знаю...., я же в вопросе
спрашиваю про аналог функции ReadDirectoryChangesW

Отвечает: sir henry
Здравствуйте, Dadaev Zaur!
Вам не надо букву W в конце функции подставлять. И от типа файловой системы ее выполнение не зависит. Просто те функции, которые имеют на конце W, предназначены для NT/XP/W2K. Без всяких букв - будет подставлятся та, которая нужно. А аналогов нет.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.09.2005, 13:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ...(Я ведь не знал)


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Rambler's Top100 Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное