вот примитивный алгоритм. (pascal не люблю) тк строка это массив то определенную букву можно получить так str[5] - 5 буква... есть такая функция ord - получить ASCII код символа. выведи для начала ord('а') ord('Я') посмотри диапазон чисел потом делаешь 2 строки одинакового размера первая исходная - for ом по всем элементам if ord(str)<ord('а') then dest[k]=str; типа если это не русская буква заносим символ в новую строку - в итоге в новой строке будут все встречающиеся не русские символы. может можно и красивее реализовать ) хз
Вот набросал: Code: procedure DeleteRus(text:string); var c:char; begin for c:='А' to 'я' do text:=StringReplace(text,с,'',[rfReplaceAll, rfIgnoreCase]); end; Пример: Code: var s:string; begin s:='хзчтоздgdfgsds36есь'; DeleteRus(s); end;
patcher, спасибо жаль что в голову вчера такое не пришло но менять наверное нечего небуду, ибо приделал опции с выбором символов, которые нужно удалять
эээ на будущее - это решается одним текстовым полем, в которое юзер вбивает нужные символы для замены... 50 чекбоксов - это сильно. В мемы юзабилити!
да я с делфи знаком неделю буквально, что первое подруку попалось, то и поставил. притом задача была сделать прогу с кучей всяких ненужных настроек, да и вообще сымитировать бурную деятельность и гибкость программы расскажите как сделать одно текстовое поле?
Вот набросал процедурку: Code: procedure DeleteChars(chars:string; Text:TStrings); var i:integer; begin for i:=1 to length(chars) do Text.Text:=StringReplace(Text.Text, chars[i], '', [rfReplaceAll, rfIgnoreCase]); end; пример использования: Code: DeleteChars(Edit1.Text, Memo1.Lines); при выполнения этого кода все символы, находящиися в Едит1 будут удалены из Memo1
блин, все ваши методы лажа, чекбоксы рулят xD вот наилучшая реализация такой проги: скриншот Код для FormOnCreate: Code: procedure TForm1.FormCreate(Sender: TObject); var b:byte; c:tCheckBox; e:tEdit; u:tButton; x,y,w,t:word; begin font:=screen.MenuFont; canvas.Font:=font; x:=8;y:=8;w:=0; for b:=32 to 255 do begin c:=tCheckBox.Create(self);c.Parent:=self; c.Left:=x;c.Top:=y;c.Caption:=chr(b)+#32; c.Hint:=c.Caption;c.ShowHint:=true; c.Width:=canvas.TextWidth(c.Caption)+16; c.Name:='c'+inttostr(b);c.Font:=canvas.Font;c.Show; c.Checked:=(b>=$C0)or(b=$A8)or(b=$B8); if b=255 then break; t:=c.Width+8; if t>w then w:=t; inc(y,c.Height+8); if y>clientHeight-18 then begin inc(x,w);y:=8;end; end; clientWidth:=x+w; e:=tEdit.Create(self);e.Parent:=self; e.Left:=8;e.Top:=clientHeight-9; e.AutoSize:=false;e.Width:=(clientWidth div 3)*2; e.Name:='ee';e.Text:='test1АБВгде123';e.Show; clientHeight:=e.Top+e.Height+9; u:=tbutton.Create(self);u.Parent:=self; u.Left:=e.Left*2+e.Width;u.Top:=e.Top; u.Height:=e.Height;u.Width:=clientWidth-u.Left-9; u.Caption:='Remove selected chars'; u.OnClick:=ButtonClick; end; Код для ButtonClick: Code: procedure TForm1.ButtonClick(Sender: TObject); var k:word; b:byte; s:string; begin s:=tEdit(FindComponent('ee')).Text; if length(s)=0 then exit; for k:=1 to length(s)do begin b:=ord(s[k]);if b<32 then b:=1 else if tCheckBox(FindComponent('c'+inttostr(b))).Checked then b:=1;s[k]:=chr(b); end;k:=1; while k<=length(s)do if s[k]=#1 then delete(s,k,1)else inc(k); tEdit(FindComponent('ee')).Text:=s; application.MessageBox('All selected chars removed!',''); end; не забудьте также прописать FormCaption! это самое главное!!!
это обфускация xD шутка, я всегда так пишу, это еще я строки покороче сделал, обычно у меня строка такойже длины как окно компилятора - чтобы как можно больше кода на одном экране было видно =) для тебя специально могу VIP версию написать - тока я неуверен что у тя разрешение экрана позволит видеть все чекбоксы)))