| 
| 
 | Вопрос # 2 410/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!.У меня к Вам вопрос уважаемые!!!
 Как можно в делфи сделать так что бы для мемо когда после точьки вводишь букву рна автоматом делалась большая??? и как что бы при нажатии кнопки если стоит больше двух пробелов, они убирались и остовался 1!!!
 
|  |   Вопрос задала: Лидуська (статус: Посетитель)Вопрос отправлен: 11 февраля 2009, 19:21
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич Здравствуйте, Лидуська!В принципе я делал нечто подобное (правда это был Html-редактор, чтобы при вводе < открывался список тэгов, при вооде > тэг "закрывался" бы и т.п.) - я обрабатывал событие типа OnKeyPressed, анализировал, какой символ введен, и на основании этого изменял (при необходимости) либо сам символ, либо какой-либо соседний текст. Свойства типа SelStart, SelEnd, SelText и им подобные тоже интенсивно использовались. Удачи!
 Ответ #2. Отвечает эксперт: Ученый Здравствуйте, Лидуська! Ну как и обещал, вот код:
 
 procedure TForm1.Button1Click(Sender: TObject); //удаляет все лишние пробелы в мемо
var
i,j,e:integer;
buf:string;
begin
for j := 0 to memo1.Lines.Count - 1 do
begin
for e:= 0 to length(memo1.Lines[j]) do
begin
   buf:= memo1.Lines[j];
 for I := 0 to length(buf) do
  if (copy(buf,i,1)=#32)and (copy(buf,i+1,1)=#32)  then
  begin
  delete(buf,i+1,1);
   memo1.Lines[j]:=buf;
  end;
end;
end;
 
end;
 
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);// делаем так, что бы вводились символы в верхнем
регистре
var
a:string;
begin
a:=key;
key:=ansiUpperCase(a)[1];
end; 
 З.Ы. Удачи:)))
 
|  | Ответ отправил: Ученый (статус: 8-ой класс)Время отправки: 12 февраля 2009, 18:24
 Оценка за ответ: 5
 Комментарий к оценке: большое спасибки!!! Я для пробела сдлала такprocedure TForm1.N1Click(Sender: TObject);
 var i:integer;
 n:string;
 begin
 n:=memo1.Lines.Text;
 for i:=2 to length(n) do
 begin
 if pos('  ', memo1.Text)<> 0 then
 begin
 memo1.HideSelection:=false;
 memo1.SelStart:=pos('  ',memo1.Text)-1;
 memo1.SelLength(' ');
 memo1.CutToClipboard;
 end;
 end;
 end;
 вроди пахает!!! Но все равно спасибо!!!!!!
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 17 марта 2009, 10:56; участников в обсуждении: 4. 
|   | Ученый (статус: 8-ой класс), 11 февраля 2009, 20:01 [#1]:а большая это как? в верхнем регистре?? |  
|   | Лидуська (статус: Посетитель), 11 февраля 2009, 20:03 [#2]:ну да!!! |  
|   | Лидуська (статус: Посетитель), 11 февраля 2009, 20:18 [#4]:var Str1, Str2, Str3: String; { ... }
 Str1:='hELLo';
 Str2:=UpperCase(Str1); { Str2 = "HELLO" }
 Str3:=LowerCase(Str1); { Str3 = "hello" }
 Я благодарна!!! но это уже мы проходили!!! не помогло!!! так как хотеорсь бы!!! Но все равно я Вам весьма благодарна!!!
 |  
|   | Ученый (статус: 8-ой класс), 11 февраля 2009, 20:40 [#5]:Севодня код не смогу написать, а завтра если проблема еще будет актуальной напишу   |  
|   | Лидуська (статус: Посетитель), 11 февраля 2009, 20:51 [#6]:Спасибо большое!!! |  
|   | nmg (статус: Посетитель), 17 марта 2009, 10:49 [#7]:Могу предложить универсальный способ удаления пробелов в строке. можно пихнуть этот код в событие change для edit1 например
 edit1.text:=stringreplace(edit1.text,'здесь два пробела','тут один',[rfReplaceAll]);
 
 код отработает и поменяет два пробела на один.
 |  
|   | Вадим К (статус: Академик), 17 марта 2009, 10:56 [#8]:Вот только плоха такая замена и автора подобного опуса надо бить по пальцам. Если текстовый курсор находиться в конце текста - нормально. Но вот если он в середине тексте.... после такой правки курсор будет постоянно "уходить" и набор текста превратиться в пытку. Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |