|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Удаление последнего символа из строки...
Доброго времени суток!
Помогите пожалуйста решить следующую проблему: Мне нужно чтобы при одном условии из Edit'а удалялся последний символ, но у меня процедура Delete удаляет всё что только можно но не его! У меня это выглядит вот так: Код:
procedure TForm1.EditChange(Sender: TObject); begin DelOp := Edit.Text; if copy(Edit.Text, length(Edit.Text), 1) = '+' then delete(DelOp, length(DelOp), 1); Edit.Text := DelOp; Edit.SelStart := lenght(delOp); end; Что не так? Последний раз редактировалось link-oln, 29.03.2011 в 00:44. |
#2
|
|||
|
|||
Код:
delete(DelOp, length(DelOp)-1, 1); взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Насколько я понял суть в том чтобы в Edit нельзя было ввести символ '+'? Проще сделать это в OnKeyPress:
Код:
if Key = '+' then Key := #0; |
#5
|
|||
|
|||
Попробуй так:
Код:
procedure TForm1.Button1Click(Sender: TObject); var i:integer; s:String; begin //Так только если плюс последний символ: //если в конце строки два или более плюса, //то удалит только один последний из-за этого //процедуру надо будет вызывать несколько раз. if Edit1.Text<>'' then begin s:=''; if (Edit1.Text[Length(Edit1.Text)]='+') then begin For i:= 1 to Length(Edit1.Text)-1 do s:=s+Edit1.Text[i]; Edit1.Text:=s; end; end; //Так если в строке вообще есть плюсы: { if Edit1.Text<>'' then begin s:=''; For i:= 1 to Length(Edit1.Text) do if Edit1.Text[i]<>'+' then s:=s+Edit1.Text[i]; Edit1.Text:=s; end; } end; Последний раз редактировалось Janom, 29.03.2011 в 10:01. |
#6
|
||||
|
||||
Цитата:
|
#7
|
|||
|
|||
Код:
if trim(edit1.text)[length(trim(edit1.Text))]='+' then edit1.Text:=copy(edit1.Text,0,length(trim(edit1.Text))-1); Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#8
|
|||
|
|||
Цитата:
Код:
Function SimbolDel(AEdit:TEdit; Sim:Char):boolean; var i:integer; s:String; begin if AEdit.Text<>'' then begin s:=''; For i:= 1 to Length(AEdit.Text) do if AEdit.Text[i]<>Sim then s:=s+AEdit.Text[i]; AEdit.SetFocus; AEdit.SelStart:=Length(AEdit.Text); AEdit.Text:=s; end; end; ... procedure TForm1.Edit1Change(Sender: TObject); begin SimbolDel(TEdit(Sender), '+'); //вызов функции end; |
#9
|
|||
|
|||
так вам надо вообще убрать данный символ из строки или все таки последний?
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#10
|
|||
|
|||
Цитата:
|
#11
|
||||
|
||||
Цитата:
Код:
procedure TForm1.EditChange(Sender: TObject); begin Edit.Text := StringReplace(Edit.Text, '+', '', [rfReplaceAll]); Edit.SelStart := Lenght(Edit.Text); end; |
#12
|
|||
|
|||
Цитата:
|
#13
|
||||
|
||||
Как вариант в onChange для Edit распозновать символы в итоговой строке с позициями +1 и -1
|
#14
|
|||
|
|||
Цитата:
Код:
Function SimbolDel(AEdit:TEdit; Sim:Char; Rp:Byte):boolean; var i:integer; s:String; d,z:ShortString; begin if AEdit.Text<>'' then begin s:=''; d:=''; z:=''; for i:=1 to Rp do z:=z+Sim; For i:= 1 to Length(AEdit.Text) do begin if AEdit.Text[i]=Sim then d:=d+AEdit.Text[i] else d:=''; if d<>z then s:=s+AEdit.Text[i]; end; AEdit.SetFocus; AEdit.SelStart:=Length(AEdit.Text); AEdit.Text:=s; end; end; procedure TForm1.Edit1Change(Sender: TObject); begin SimbolDel(TEdit(Sender),'+',2); end; |
#15
|
|||
|
|||
убирает '++' оставляя только один.
Код:
procedure TForm1.Button1Click(Sender: TObject); var i:integer; st:string; begin repeat i:=pos('++',Edit1.Text); st:=''; if i>0 then begin st:=copy(edit1.Text,i+2,length(edit1.Text)-i); edit1.Text:=copy(edit1.Text,1,i)+st; end; until i=0; end; Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |