Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизCtrl+Del в DBGrid Найти похожие ветки
← →
Teuton © (2005-03-10 13:10) [0]Здравствуйте.
Известно, что в DBGrid встроено сочетание клавишь Ctr+Del, которое удаляет запись. Помогите пожалуйста советом, как запретить пользователю удалять запись таким образом, как заблокировать это?
Заранее благодарю!
← →
REA (2005-03-10 13:12) [1]А чем плохо? Впрочем можно перехватить нажатие клавиш.
← →
Teuton © (2005-03-10 13:21) [2]>>REA
Я знаю, что можно, просто не знаю как это сделать ;) Не подскажите чайнику?
Заранее благодарю!
← →
_1 (2005-03-10 13:34) [3]DatasetOnDelete:
if ЯНехочуЧтобыТекущаяЗаписьБылаУдалена then
begin
ShowMessage("Ассеss denied!");
Abort;
end;
← →
_1 (2005-03-10 13:36) [4]^ вместо OnDelete - BeforeDelete
← →
Teuton © (2005-03-10 13:38) [5]>>_1
Спасибо большое!
Только я не совсем понял, что же писать вместо "if ЯНехочуЧтобыТекущаяЗаписьБылаУдалена then"
← →
Vlad © (2005-03-10 13:44) [6]
> Teuton © (10.03.05 13:38) [5]
Так тебе нужно вобще запретить удалять записи из набора данных или только по Ctrl-del из DBGrid?
← →
Teuton © (2005-03-10 13:50) [7]>>Vlad
Понимаете в чем дело, в идеале мне хотелось бы сделать так, чтобы удалять запись пользователь мог только в случае если правильно будет введен пароль... Но весь ужас в том, что я даже не представляю как установить пароль так, чтобы его можно было бы держатьне в тестовом файле и чтобы его можно было бы изменять этот пароль через диалоговое отдельное окно. Ну стандартная оперция смены пароля. Если пароль введен правильно, то тогда активизируется бутон удаления и пользователь может удалить запись. А это сочетание Ctrl+Del работает всегда :( Вот я и хочу от него избавиться...
← →
markers © (2005-03-10 15:56) [8]А Read-Only не пробовал?
← →
Teuton © (2005-03-10 16:11) [9]>>markers
Нет это не помогает :(
← →
stakan © (2005-03-10 16:15) [10]Можно так
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_DELETE) then
begin
ShowMessage("Нельзя!!!");
Abort
end;
end;
← →
Teuton © (2005-03-10 16:44) [11]>>stakan
Спасибо вам большое! Пользуясь случаем, хочу спросить вас, каков принцип сохранения паролей (с возможностью програмного изменения пароля) в Дельфи, но так, чтобы сохранять пароль не в текстовом файле, доступном всем, а в каком-нибудь зашифрованном файле?
Заранее благодарю!
← →
markers © (2005-03-10 16:54) [12]Шифровать писать свою систему щифрования либа юзать компоненты. И ещё Разные типы шифрования существуют... Если хочешь подробнее пиши в приват..
← →
stakan © (2005-03-10 16:59) [13]>> Teuton
Вариантов много, смотря какое приложение.
Если работа с БД то пароли можно хранить в самой БД (создавать пользователя базы с паролем, тогда шифрованием займётся СУБД) или завести отдельную таблицу в базе для хранения пользователей с паролями. Насчёт алгоритмов шифрования, то тут я не спец. Если приложение обычное, то можно в реестре, опять же шифруя пароль. Насколько я помню есть компоненты (из RXLib) которые пишут в реестр уже в зашифрованом виде. И т.д.
← →
markers © (2005-03-10 17:02) [14]ту Стакан
Чё-то я там не замечал?
Да и есть хорошая библиотечка (Фришная) которая может и в MD5 и BlowFish и еже сним...
← →
markers © (2005-03-10 17:05) [15]То Teuton
Короче пиши в приват либо на ящик в инфо либо
admin(ЗаСпАм)@sibdisnet.ru
Естественно (ЗаСпам) убери когда писать будешь...
← →
Teuton © (2005-03-10 17:05) [16]>>stakan
У меня простое приложение учета товаров, работающее локально с DBF-файлом.
← →
markers © (2005-03-10 17:06) [17]А DBF у нас что, не база?
← →
stakan © (2005-03-10 17:18) [18]>>Teuton
Есть простейший способ шифрования, но любопытного юзера остановит. Разбиваешь пароль на символы (байты), делаешь каждому символу XOR с какой нибудь битовой маской (любым символом), на выходе получаешь левый символ. Расшифровка - так же: берёшь символ, XOR с той же маской, с какой шифровал - получаешь исходный символ.
← →
Vlad © (2005-03-10 17:32) [19]
> Teuton © (10.03.05 17:05) [16]
Если работаешь с базой, то пароль резоннее хранить в таблице.
Правда такая защита рассчитана на полного ламера, поскольку файл DBF сам по себе можно открыть хоть Excel"ем, смотреть, изменять данные и делать с ними все что угодно.
Хранить пароль лучше в виде хеш-суммы (напр. MD5)
вот пример исходников вычисления MD5 на Delphi
http://delphibase.spb.ru/?action=viewfunc&topic=mathcode&id=10243
При этом, в программе старайся избегать проверки пароля типа:if CheckPassword(...) then <пускаем в программу>
взламывается за 5 минут.
Придумай что нибудь посложнее.
← →
Teuton © (2005-03-11 08:53) [20]>>stakan Vlad
Спасибо вам большое за советы, друзья, но слишком хорошего мнения о моих познаниях в программировании...
Что такое MD5, XOR и как работать с байтами я вообще не знаю :( А Слово хэш лишь напоминает мне о моиг потугах работать с массивом в перле и не более того :(
Может быть что-нибудь попроще? Да, я понимаю, что DBF-файл уязвим и может быть спокойно даже в нортоне просмотрен. А что если вписывать в таблицу зашифрованный пароль? То есть значение в таблицу будет записано функцией типа crypt() как в перле? Есть ли такая функция в Дельфи?
Спасибо еще раз.
← →
Anatoly Podgoretsky © (2005-03-11 09:07) [21]Не храни пароль совсем.
← →
Teuton © (2005-03-11 09:48) [22]>>Anatoly Podgoretsky
Как же его не хранить? А с чем сверять введенный пароль? ;)
← →
Bronco © (2005-03-11 10:32) [23]
> Teuton © (11.03.05 08:53) [20]
> А что если вписывать в таблицу зашифрованный пароль? То
> есть значение в таблицу будет записано функцией типа crypt()
>
Об этом тебе и говорят. Только лучше не пароль, а его хэш (что-то вроде контрольной суммы). Хэш, в отличие от пароля, расшифровать невозможно.
← →
Bronco © (2005-03-11 10:33) [24]извиняюсь
> Хэш, в отличие от пароля,
читать как
Хеш, в отличие от зашифрованного пароля
← →
Teuton © (2005-03-11 10:50) [25]>>Bronco
Да кажется, я вас понял ;) Уж простите за навязчивость, но не могли бы вы мне пояснить как это делать?
Заранее благодарю!
← →
Bronco © (2005-03-11 10:58) [26]
> Teuton © (11.03.05 10:50) [25]
> не могли бы вы мне пояснить как это делать
Ну, если упрощенно, то примерно так:
Есть некая функция, вычисляющая хэш-сумму от твоей строки с паролем. Пример функции приведен в [19] ссылке. Вычисляешь эту хэш-сумму и записываешь в таблицу БД.
Затем, когда юзер вводит пароль, чтобы зайти в программу, твоя программа предварительно вычисляет хэш от введенного пароля и сравнивает с тем значением, которое уже хранится в базе. Если совпало, значит пускаем в программу
← →
Anatoly Podgoretsky © (2005-03-11 12:11) [27]Teuton © (11.03.05 09:48) [22]
Сверяй с сигнатурой, один из вариантов этого термина ХЕШ.
Для данного случая я бы порекомендовал CRC32 или CRC16, поскольку тогда легко хранить где угодно, в базе, в реестре, в ини и т.д.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.037 c