Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизDBEDIT Найти похожие ветки
← →
Начинающий41 (2012-06-30 16:24) [0]подскажите возможно ли сделать так чтобы в dbedit вводислись только опреденные буквы.
← →
Плохиш © (2012-06-30 17:30) [1]Это вопрос или констатация факта?
← →
Anatoly Podgoretsky © (2012-06-30 17:32) [2]> Начинающий41 (30.06.2012 16:24:00) [0]
Возможно
← →
AV © (2012-06-30 17:45) [3]
> Плохиш © (30.06.12 17:30) [1]
>
> Это вопрос или констатация факта?
:)
Однажды английский физик-теоретик Поль Дирак читал лекцию по квантовой механике, исписал мелом всю доску и под конец спросил:
- Вопросы есть?
- Я не понял, как вы вывели последнюю формулу, - сказал один студент.
- Это утверждение, а я спросил: "Вопросы есть?"
> dbedit вводислись только опреденные буквы.
не правильная идеология
надо или после всего ввода проверять на несоответствие
или на уровне БД запретить запись в поле неправильных значений
← →
Studentik9 (2012-06-30 20:49) [4]Фильтруй на onkеyрrеss: if kеy="неточтонадо" thеn kеy:=#0
← →
oldman © (2012-07-01 01:29) [5]
> Studentik9 (30.06.12 20:49) [4]
не работает при копи-пасте
← →
Studentik9 (2012-07-01 10:09) [6]Тогда на оnchаngе навесить проверку вводимых символов или отключить контекстное меню(прикрутить свое пустое) и быстрые клавиши(фильтрацией)
← →
Давайте будем жрать! (2012-07-01 10:15) [7]
> отключить контекстное меню(прикрутить свое пустое)
Лучше при установке предупреждать, чтоб выдернули из клавиатуры кнопку V, так как она несовместима с данным программным обеспечением.
← →
Studentik9 (2012-07-01 10:16) [8]Можно также перед записью в Бд перебрать посимвольно и лишние удалить(использовать Lеngth,Сорy,Dеlеtе) Подробное описание функций в помощи Дельфи
← →
Studentik9 (2012-07-01 10:22) [9]Лучше Вечноголодному отвечать на вопрос топикстартера,если знаешь,а не блистать своим чувством юмора ;-)
← →
Давайте будем жрать! (2012-07-01 11:22) [10]В [4] уже был приемлемый ответ, нефиг изобретать велосипеды с квадратными колёсами.
← →
Inovet © (2012-07-01 11:24) [11]Правильный ответ в
>[3] AV © (30.06.12 17:45)
← →
Studentik9 (2012-07-01 11:37) [12]Почти любую задачу можно решить более чем одним способом,вот пусть автор темы и выбирает себе более подходящий(доступный по реализации) Фильтрация символов в поле ввода,задача нетривиальная,попадать туда они могут 1000 и 1 способом и оградить нерадивого юзера от неправильного ввода надо очень постараться :) чтобы потом крякозябры в базу не попали ;)
← →
Юрий Зотов © (2012-07-01 11:46) [13]
> Studentik9 (01.07.12 11:37) [12]
> попадать туда они могут 1000 и 1 способом
Совершенно верно. Например, с помощью другой программы. Поэтому, чтобы в базу не попадали крякозябры, проверку надо делать на уровне самой БД, а не на уровне клиентскай части.
← →
Studentik9 (2012-07-01 11:49) [14]>Юрий Зотов Самый лучший способ! Реализация зависит от используемой БД
← →
SergeyIT © (2012-07-03 14:48) [15]Пример как можно это сделать (сохранения файла с проверкой разрешенных символов в имени)
unit GlFunc;
interface
uses
SysUtils;
type
TLetters = #32..#255;
TLetSet = set of TLetters;
var
_FileChars: TLetSet = [ #32..#127] -
["!","@","#","$","%","^","&","*","+","`","~","|",
"\","/","?",">","<",".",",","=",":",";",""",""""];
function CheckString(var str: String; const let: TLetSet): Boolean;
implementation
function CheckString(var str: String; const let: TLetSet): Boolean;
var
s: String;
n, i: Integer;
begin
Result := TRUE;
s := "";
n := Length(str);
if n < 1 then exit;
Result := FALSE;
for i := 1 to n do
begin
if str[i] in let then s := s + str[i];
end;
if Length(s) = n then Result := TRUE else str := s;
end;
end.
Использование в диалоге сохранения файла
unit SaveDlg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, FileCtrl, Glfunc;
type
TSaveForm = class(TForm)
LBFiles: TFileListBox;
LDir: TLabel;
EFile: TEdit;
CBFilter: TFilterComboBox;
BtnOk: TButton;
BtnCancel: TButton;
procedure FormShow(Sender: TObject);
procedure BtnOkClick(Sender: TObject);
procedure EFileChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
bCheckName: Boolean;
public
{ Public declarations }
end;
var
_LastFileName: String = "";
//var
// SaveForm: TSaveForm;
implementation
{$R *.DFM}
procedure TSaveForm.FormCreate(Sender: TObject);
begin
bCheckName := FALSE;
end;
procedure TSaveForm.FormShow(Sender: TObject);
begin
EFile.Text := ChangeFileExt(_LastFileName, "");
ActiveControl := EFile;
EFile.SetFocus;
EFile.SelStart := Length(EFile.Text);
EFile.SelLength := 0;
bCheckName := TRUE;
EFileChange(EFile);
end;
procedure TSaveForm.BtnOkClick(Sender: TObject);
var
i: Integer;
c: Byte;
s: String;
begin
bCheckName := FALSE;
EFile.Text := Trim(ExtractFileName(EFile.Text));
s := ExtractFileExt(EFile.Text);
if (s = ".bmp") OR (s = ".jpg") then
begin
s := ChangeFileExt(EFile.Text, "");
EFile.Text := s;
end;
if EFile.Text = "" then
begin ModalResult := mrNone; exit; end;
s := EFile.Text;
if NOT CheckString(s, _FileChars) then ModalResult := mrNone
else
for i := 1 to Length(EFile.Text) do
begin
c := Byte(EFile.Text[i]);
if c < 128 then continue;
ModalResult := mrNone;
break;
end;
if ModalResult = mrNone then
begin
s := "Не используйте Кирилицу и символы:" + char($D) + char($A) +
" ! @ # $ % ^ & * + ` ~ | \ / ? > < . , = : ; " """ +
char($D) + char($A) + "в имени файла!!!";
Application.MessageBox(PChar(s),"Save dialog", MB_OK);
bCheckName := TRUE;
end;
end;
procedure TSaveForm.EFileChange(Sender: TObject);
var
i, ii, n: Integer;
s: String;
em: TEdit;
bEnd: Boolean;
begin
if NOT bCheckName then exit;
if NOT EFile.Focused then
begin
EFile.Text := Trim(ExtractFileName(EFile.Text));
EFile.Text := ChangeFileExt(EFile.Text, "");
end;
em := Sender as TEdit;
i := em.SelStart;
n := Length(em.Text);
s := em.Text;
if NOT CheckString(s, _FileChars) then
begin
em.Text := s;
i := i - (n - Length(s));
if (i >= 0) AND (i <= Length(s)) then
em.SelStart := i
else em.SelStart := 0;
if EFile.Focused then MessageBeep($FFFFFFFF);
end;
if EFile.Focused then
begin
n := 0;
bEnd := FALSE;
for i := 1 to Length(em.Text) do
begin
s := Copy(em.Text, 1, i);
for ii := n to LBFiles.Items.Count - 1 do
begin
if Pos(s, LBFiles.Items[ii]) = 1 then
begin
n := ii;
break;
end;
if ii = (LBFiles.Items.Count - 1) then bEnd := TRUE;
end;
if bEnd then break;
end;
if LBFiles.Items.Count > 0 then
LBFiles.TopIndex := n;
end;
end;
end.
← →
Studentik9 (2012-07-03 17:14) [16]Топик стартеру нужно сохранять данные из DBEdit в базу данных, а не в текстовый файл
← →
SergeyIT © (2012-07-03 17:37) [17]Studentik9
Так в этом примере данными является имя файла, а не его содержание
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.061 c