Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Особенности удаления записи из таблицы



Чтобы удалить запись следует на навигаторе нажать кнопку (заметим, что удаление может быть выполнено и многими другими методами). В этом случае перед тем как удалить запись, программа выдает окно с вопросом о подтверждении ее удаления (рис. 4.4). Получив положительный ответ, программа удаляет запись.

Правда, вопрос при этом программа задает на английском языке. Эту ситуацию можно улучшить своими средствами, используя функцию MessageDlg. Для этого сначала нужно отменить в навигаторе вопрос о подтверждении удаления, установив его свойство ConfirmDelete в false.

Рис. 4.4. Окно подтверждения удаления записи Рис. 4.5. Свое окно подтверждения удаления записи Рис. 4.6. Полностью русифицированное окно

Создадим событие для щелчка кнопке навигатора DBNavigator со следующим текстом:

procedure TForm1.DBNavigatorClick(Sender: TObject; Button: TNavigateBtn);
begin
if Button = nbDelete then
if YesNo('Удалить зÓ ä à ë è ò ü ç à ï è ñ ü '+Table1Category.AsString+'? ') then
Table1.Delete;
end;

Функция MessageDlg выводит в окно текст, который расположен среди его параметров первым. В нашем случае он складывается из суммы трех строк: а) слова " Удалить " с пробелом в конце, б) значения Table1Category. AsString (строчное значение по полю Category ) и в) "? " - символа вопроса с пробелом перед ним. Сумму этих строк мы и видим в окне рис. 4.5. Такое окно значительно информативнее, к тому же задает вопрос по-русски. В окне есть 2 кнопки mbYes и mbNo (кстати, в списке кнопок можно было бы указать и другие, но в данном случае они не нужны). Функция вернет свое значение для той кнопки, на которую нажал пользователь. Если пользователь нажал кнопку mbYes, то функция примет значение mrYes и, следовательно, условие в операторе if выполнится. Это приведет к исполнению процедуры Table1. Delete, то есть удалению текущей записи в Table1. В том случае, если пользователь закроет окно вопроса любым другим способом, то сработает та часть оператора, которая стоит за словом else (иначе). Там расположен оператор Abort (прервать). В данном случае мы прерываем процедуру удаления, которая производится в событии BeforeDelete. Если бы мы не вставили этот оператор, то процедура даже при отрицательном ответе все равно бы удалила запись.

Тем не менее и это окно пишет наименования на кнопках по-английски. Сейчас мы заставим Delphi эти надписи выводить по-русски. Для этого будем подсовывать Delphi вместо стандартных английских слов нужные нам русские посредством перехвата момента события вывода надписей на кнопках и в заголовке окна.

В самом конце модуля перед оператором end. разместите текст

procedure HookResourceString(rs: PResStringRec; newStr: PChar);
// процедура инициализации перехвата ресурсной строки rs и замены ее на newStr
var OldProtect: DWORD;
begin

VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
rs^.Identifier: = Integer(newStr);
VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;

initialization
// начать перехват вывода текста на кнопке Yes, при перехвате заменять на 'Да'
HookResourceString(@SMsgDlgYes, 'Да');
// начать перехват вывода текста на кнопке No, при перехвате заменять на 'Нет'
HookResourceString(@SMsgDlgNo, 'Нет');
// начать перехват вывода текста заголовка окна, при перехвате заменять на 'Подтвердите'
HookResourceString(@SMsgDlgConfirm, 'Подтвердите');

Результат таких перехватов (хуков) показан на рис. 4.6.

 

Примечание. Если подобные вопросы в программе задается часто, то удобно их оформить отдельной логической функцией YesNo, в которой единственным аргументом будет текст вопроса: function YesNo(Text: String): boolean; begin Result: = MessageDlg(Text, mtConfirmation, [mbYes, mbNo], 0) = mrYes; end; Тогда код процедуры удаления станет много короче: procedure TForm1.Table1BeforeDelete(DataSet: TDataSet); begin if YesNo('Удалить '+Table1Category.AsString+'? ') then Table1.Delete else abort; end;

 


Поделиться:



Популярное:

  1. I.5.Особенности этнической структуры населения Сербии в составе СФРЮ.
  2. II. Особенности применения положений о поручительстве по облигациям
  3. III. Особенности грамматического строя
  4. VI. Особенности методического обеспечения
  5. VII. Общие особенности умственной сферы.
  6. XVIII. ОСОБЕННОСТИ ПРАВОВОГО РЕЖИМА ПРИРОДНЫХ ОБЪЕКТОВ
  7. XXIII. Особенности перевозки грузобагажа повагонными отправками
  8. АБТЦ-2003. СТРУКТУРА, ХАРАКТЕРИСТИКИ, ОСОБЕННОСТИ ПОСТРОЕНИЯ.
  9. Агротехника выращивания и формирования кустарников в школах. Особенности выращивания сортовых сиреней и роз в кустовой и штамбовой форме.
  10. Алгоритм удаления элемента в списке по ключу
  11. Амортизационные группы (подгруппы). Особенности включения амортизируемого имущества в состав амортизационных групп (подгрупп)
  12. Анализ состояния рынка чёрного чая, в т.ч. особенности конъюнктуры Российского рынка в настоящее время.


Последнее изменение этой страницы: 2016-06-04; Просмотров: 551; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.008 с.)
Главная | Случайная страница | Обратная связь