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

Вниз

как организовать ввод в edit   Найти похожие ветки 

 
skilful ©   (2010-04-27 20:20) [0]

всем привет.

как организовать контроль ввода данных в edit - необходимо вводить HEX число
я делаю в

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

if not (Key in [ #8,#127, "0".."9", "a".."f", "A".."F"]) then
key := #0;

но в этом случае невозможно в edit вставлять значение из буфера обмена (по ctrl + v). Как это победить?


 
Lyonux ©   (2010-04-27 20:23) [1]

Вас не смущает тот факт, что по ctrl + v в едит может быть вставлено что угодно?)


 
{RASkov} ©   (2010-04-27 20:32) [2]

> [0] skilful ©   (27.04.10 20:20)
> но в этом случае невозможно в edit вставлять значение из
> буфера обмена (по ctrl + v). Как это победить?

В OnKeyPress не все клавиши попадают.... Ctrl туда не попадает, а v ты запретил... + [1]


 
Lyonux ©   (2010-04-27 20:33) [3]

Предлагаю такой вариант) Попробуйте :)

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

if not ((Key in [ #8,#127, "0".."9", "a".."f", "A".."F"]) and ((Key = ord("V")) and (ssCtrl in Shift))) then
key := #0;


 
{RASkov} ©   (2010-04-27 20:33) [4]

> [0] skilful ©   (27.04.10 20:20)

 
  > Вас не смущает тот факт, что по ctrl + v в едит может быть
  > вставлено что угодно?)
 

попробуй комбинацию Shift+Ins


 
{RASkov} ©   (2010-04-27 20:35) [5]

> [3] Lyonux ©   (27.04.10 20:33)
> Предлагаю такой вариант) Попробуйте :)

а как же попап меню и "Вставить"? :)


 
DVM ©   (2010-04-27 20:38) [6]


> (Key in [ #8,#127, "0".."9", "a".."f", "A".."F"])

кстати, в Delphi 2009-2010 это некошерная теперь запись. CharInSet надо


 
Lyonux ©   (2010-04-27 20:39) [7]


> {RASkov} ©   (27.04.10 20:32) [2]

> В OnKeyPress не все клавиши попадают.... Ctrl туда не попадает,
>  а v ты запретил... + [1]

Нет нет, "v" у него разрешено)) условие стоит: if not ... then key:=#0;
Но смысла в этой обработке ctrl+v, я думаю, нет) Если, конечно, не стоит обработчик на какой-нибудь кнопке: if not ... then exit{show.messege("")} else begin ...;
И всё равно не нужна здесь обработка ctrl+v, я так думаю)


 
Lyonux ©   (2010-04-27 20:41) [8]

так в чём смысл разрешения обработки ctrl+v?) В привычном для пользователя хоткее или возможности вставки?)


 
{RASkov} ©   (2010-04-27 20:48) [9]

лучше уж на WM_PASTE среагировать...


 
{RASkov} ©   (2010-04-27 20:51) [10]

> [7] Lyonux ©   (27.04.10 20:39)
> Нет нет, "v" у него разрешено)) условие стоит: if not ...
> then key:=#0;

Как же разрешено, если нажата V, а она не в допустимых символах, тогда клавиша "затирается" #0


 
Lyonux ©   (2010-04-27 20:58) [11]


> {RASkov} ©   (27.04.10 20:51) [10]
> > [7] Lyonux ©   (27.04.10 20:39)> Нет нет, "v" у него разрешено))
> условие стоит: if not ... > then key:=#0;Как же разрешено,
>  если нажата V, а она не в допустимых символах, тогда клавиша
> "затирается" #0

Грешу( Посчитала весь алфавит..всё моя невнимательность) Ну тогда товарищу можно посоветовать менюшку и shift+Insert) Этого никто не отменял :)
А ещё можно добавить в условие символ "v") Но это добавит лишних проблем, я думаю) Так что я последний абзац я не писала)


 
skilful ©   (2010-04-27 21:17) [12]

в моей задаче необходимо выборочно из hex делать dec, причем чисел достаточно много. "кривизны" данных, попадающих в программу, нет. Так что ctrl+v было бы удобным...


 
oleg1963lora   (2010-04-27 21:32) [13]

Здравствуйте господа! Ачто означает символ #8? Я неплохо писал на асме и знаю, что символ табуляции #9. А #8 это что?


 
Lyonux ©   (2010-04-27 21:33) [14]


> oleg1963lora   (27.04.10 21:32) [13]
> Здравствуйте господа! Ачто означает символ #8? Я неплохо
> писал на асме и знаю, что символ табуляции #9. А #8 это
> что?


#8 - бэкспейс


 
oleg1963lora   (2010-04-27 21:41) [15]

То есть забой??? сорри, подзабыл ;))


 
turbouser ©   (2010-04-27 22:05) [16]


> oleg1963lora   (27.04.10 21:41) [15]

То есть Tab
а то, что ты обозвал забоем - #13 и, вообще-то, это CR, а не забой :)


 
oleg1963lora   (2010-04-27 22:06) [17]

Уважаемые Мастера! Вы вдаетесь в очень высокие проболемы. Я полгода не вылезаю с Вашего форума и не вижу от Вас реальной помощи! Человеку нужны "качели и мячик", т.е. элементарщиина, а вы вдаетесь в тему насколько это человеку нужно!


 
Lyonux ©   (2010-04-27 22:15) [18]

Как ему сделать эти "качели и мячик" (возможность использования ctrl+v), если он спилил дерево и понатыкал гвоздей (if not (Key in [ #8,#127, "0".."9", "a".."f", "A".."F"]) then key := #0;) ?)

Мы вроде предложили все возможные варианты:
1) использовать другое сочетание клавиш - Shift+Insert;
2)пользоваться попап меню;
3)добавить исключение для символа "v" в условие процедуры.


 
Игорь Шевченко ©   (2010-04-27 22:15) [19]

oleg1963lora   (27.04.10 22:06) [17]


> Я полгода не вылезаю с Вашего форума


Помочь вылезти ? Запросто.


>  и не вижу от Вас реальной помощи!


ты заплатил реальные деньги или спутал форум с техподдержкой ?


 
turbouser ©   (2010-04-27 22:17) [20]


> turbouser ©   (27.04.10 22:05) [16]
>
>

а.. не прав, сорри :) мозг кипит :)


 
Leonid Troyanovsky ©   (2010-04-27 22:17) [21]


> oleg1963lora   (27.04.10 22:06) [17]

>  а вы вдаетесь в тему насколько это человеку нужно!

Золотые слова, и вовремя сказаны.
Не всегда, правда, этот человек оное осознает.

--
Regards, LVT.


 
oleg1963lora   (2010-04-27 22:35) [22]

Удалено модератором
Примечание: Правила читаем и уважаем


 
Anatoly Podgoretsky ©   (2010-04-27 22:50) [23]


> turbouser ©   (27.04.10 22:17) [20]

Забей (#13)


 
SergeyIT ©   (2010-04-28 01:26) [24]

Давно писал подобное (D5) - ввод имени файла с запретом некоторых символов и русского

type
 TLetters = #32..#255;
 TLetSet = set of TLetters;
var
  _FileChars: TLetSet = [ #32..#127] -
      ["!","@","#","$","%","^","&","*","+","`","~","|",
       "\","/","?",">","<",".",",","=",":",";",""",""""];

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;
....
//обработчик OnChange эдита EFile (имя файла без расширения)
procedure TSaveForm.EFileChange(Sender: TObject);
var
  i, ii, n: Integer;
  s: String;
  em: TEdit;
  bEnd: Boolean;
begin
 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;
end;



 
Евгений Ц.   (2010-04-29 20:04) [25]

Если уж вешать на OnChange то можно и так


function OnlyHexInString(const S: string): string;
var
I:Integer;
begin
 Result := "";
 if Trim(S)="" then Exit;
  for I:=1 To Length(S) do
   if S[I] in ["0".."9","A".."F","a".."f"] then Result := Result + S[I];
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Text:= OnlyHexInString(Edit1.Text);
Edit1.SelStart:= Length(Edit1.Text);
end;


Не лучший вариант конечно вешать это на OnChange (((


 
Гость   (2010-04-29 20:45) [26]

тест


 
Демо ©   (2010-04-29 23:51) [27]

procedure TForm1.Edit1Change(Sender: TObject);
var
 i: Integer;
 s: String;
 pz: Integer;
begin
 s := Edit1.Text;
 for i := Length(s) downto 1 do
 begin
   if not (s[i] in ["0".."9","a".."f","A".."F"]) then Delete(s,i,1);
 end;
 Edit1.Text := s;
 Edit1.SelStart := pz;
end;


 
Игорь Шевченко ©   (2010-04-30 00:46) [28]

Демо ©   (29.04.10 23:51) [27]


>  pz: Integer;


стесняюсь спросить, от какого слова образовано сокращенное имя идентификатора...


 
Германн ©   (2010-04-30 01:23) [29]


> стесняюсь спросить, от какого слова образовано сокращенное
> имя идентификатора...

)))


 
Демо ©   (2010-04-30 01:49) [30]


> Игорь Шевченко ©   (30.04.10 00:46) [28]
> Демо ©   (29.04.10 23:51) [27] >  pz: Integer;стесняюсь
> спросить, от какого слова образовано сокращенное имя идентификатора.
> ..


Это ещё что...

Вот функции из текущего проекта:

procedure DBAssDropAndCreateTable(const TableName: String; const Fields: array of String);
procedure DBAssInsert(const TableName: String;List: TStringList); overload;
procedure DBAssInsert(const TableName: String;AAss: TAssArray); overload;
//function CreateAssArray

function QStr(const Src: String): String;

function Ass(const Key,Value: String): TAss;
function AssValueOf(AAss: TAssArray; const Key: String): String;
function AssIndexOf(AAss: TAssArray; const Key: String): Integer; overload;
function AssIndexOf(const Str: array of String; const Key: String): Integer; overload;
procedure AddAss(var AAss: TAssArray; Ass: TAss);

function DBAssSelect(const TableName: String; const Fields: array of String; sWhere: TAssArray; sOrder: array of String): TSQliteTable;


 
Германн ©   (2010-04-30 02:07) [31]


> Это ещё что...

Похоже "текущий проект" тебя не очень радует. :)


 
Демо ©   (2010-04-30 09:06) [32]


> Германн ©   (30.04.10 02:07) [31]
>
> > Это ещё что...
>
> Похоже "текущий проект" тебя не очень радует. :)


Ass - сокращение от слова Associate.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.051 c
2-1274855695
Rembo
2010-05-26 10:34
2010.08.27
Картинку из файла уменьшить и поместить в tbitmap


15-1275913323
user123
2010-06-07 16:22
2010.08.27
Нужны данные о принтерах и картриджах (в виде таблиц)


2-1268205413
Вася
2010-03-10 10:16
2010.08.27
TCategoryPanel


15-1266563892
12
2010-02-19 10:18
2010.08.27
Работа. Что бы Вы выбрали?


4-1232054248
Vemer
2009-01-16 00:17
2010.08.27
Как программа может узнать о запуске хранителя экрана?