Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2011, 00:41
link-oln link-oln вне форума
Прохожий
 
Регистрация: 15.03.2011
Сообщения: 20
Репутация: 10
По умолчанию Удаление последнего символа из строки...

Доброго времени суток!
Помогите пожалуйста решить следующую проблему:
Мне нужно чтобы при одном условии из 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  
Старый 29.03.2011, 01:19
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

Код:
delete(DelOp, length(DelOp)-1, 1);
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #3  
Старый 29.03.2011, 01:41
link-oln link-oln вне форума
Прохожий
 
Регистрация: 15.03.2011
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
Код:
delete(DelOp, length(DelOp)-1, 1);
Пробовал, всё равно не выходит... А если больше чем -1 то удаляет всё кроме последних символов число которых равно тому что мы отнимаем от length...
Ответить с цитированием
  #4  
Старый 29.03.2011, 03:09
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Насколько я понял суть в том чтобы в Edit нельзя было ввести символ '+'? Проще сделать это в OnKeyPress:
Код:
if Key = '+' then Key := #0;
Ответить с цитированием
  #5  
Старый 29.03.2011, 09:30
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Попробуй так:
Код:
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  
Старый 29.03.2011, 09:36
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от ryderx34
Насколько я понял суть в том чтобы в Edit нельзя было ввести символ '+'? Проще сделать это в OnKeyPress:
Код:
if Key = '+' then Key := #0;
ctrl+c, ctrl+v никто не отменял ))
Ответить с цитированием
  #7  
Старый 29.03.2011, 09:59
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Код:
if trim(edit1.text)[length(trim(edit1.Text))]='+' then
edit1.Text:=copy(edit1.Text,0,length(trim(edit1.Text))-1);
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #8  
Старый 29.03.2011, 13:15
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Цитата:
Сообщение от Black Raider
Код:
if trim(edit1.text)[length(trim(edit1.Text))]='+' then
edit1.Text:=copy(edit1.Text,0,length(trim(edit1.Text))-1);
Только после этого нужно каретку в конец переводить... я вот такую функцию испльзую:
Код:
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  
Старый 29.03.2011, 13:22
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

так вам надо вообще убрать данный символ из строки или все таки последний?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #10  
Старый 29.03.2011, 13:28
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Цитата:
Сообщение от Black Raider
так вам надо вообще убрать данный символ из строки или все таки последний?
Он пишет процедуру удаления в onChange, походу дела ему его вообще запретить надо...
Ответить с цитированием
  #11  
Старый 29.03.2011, 18:21
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от TOJluK
ctrl+c, ctrl+v никто не отменял ))
Удаление последнего символа тоже не спасёт от Ctrl+V, юзер же может вставить ненужный символ и не в конец. Тогда уж что-то вроде этого делать:
Код:
procedure TForm1.EditChange(Sender: TObject);
begin
  Edit.Text := StringReplace(Edit.Text, '+', '', [rfReplaceAll]);
  Edit.SelStart := Lenght(Edit.Text);
end;
Ответить с цитированием
  #12  
Старый 29.03.2011, 19:13
link-oln link-oln вне форума
Прохожий
 
Регистрация: 15.03.2011
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Janom
Он пишет процедуру удаления в onChange, походу дела ему его вообще запретить надо...
Нет, мне нужно просто чтобы неможно было 2 плюса вместе поставить... А встречаться в строке он мог сколько угодно раз...
Ответить с цитированием
  #13  
Старый 29.03.2011, 23:10
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Как вариант в onChange для Edit распозновать символы в итоговой строке с позициями +1 и -1
Ответить с цитированием
  #14  
Старый 30.03.2011, 09:44
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Цитата:
Сообщение от link-oln
Нет, мне нужно просто чтобы неможно было 2 плюса вместе поставить... А встречаться в строке он мог сколько угодно раз...
Код:
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;
параметр Rp - это недопустимое кол-во символов Sim подряд
Ответить с цитированием
  #15  
Старый 30.03.2011, 09:55
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

убирает '++' оставляя только один.

Код:
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;
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter