![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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); |
|
#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; |