Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

как организовать ввод в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.061 c
10-1164104135
Layner
2006-11-21 13:15
2010.08.27
Передача строкового параметра в COM из HTML страницы


2-1274178138
NBAH1990
2010-05-18 14:22
2010.08.27
Как запретить нажатие Alt+Tab, Ctrl+alt+del, ctrl+esc, alt+f4 ?


8-1204132089
AntonUSAnoV
2008-02-27 20:08
2010.08.27
Хочу сделать не знаю как ...


9-1185035010
Evgraf
2007-07-21 20:23
2010.08.27
Подскажите


3-1240340701
VoznikVopros
2009-04-21 23:05
2010.08.27
Как произвести "выделение" в DBLookupListBox1 согласно № эл. в БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский