Форум: "Начинающим";
Текущий архив: 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