Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.05 c
2-1337694534
toropoff
2012-05-22 17:48
2013.03.22
ADO


15-1338150603
Юрий
2012-05-28 00:30
2013.03.22
С днем рождения ! 28 мая 2012 понедельник


2-1339150256
Besenok
2012-06-08 14:10
2013.03.22
Использование dbghelp.dll


2-1340113435
Новичок
2012-06-19 17:43
2013.03.22
Программа на Lazarus для MacOS


15-1348467779
alexdn
2012-09-24 10:22
2013.03.22
phpbb