Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> как обрезать текст в мемо? 
:(
    Опции темы
treem
  Дата 21.3.2009, 20:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.8.2008

Репутация: -1
Всего: -2



как обрезать текст в мемо?  smile 

вообщем объясню кратко что мне нужно, короче я получаю заголовки последних тем на форуме...
вот например:
Новые ключи для антивируса Касперского
Управление процессорным временем на Паблике.
Microsoft показала мобильное будущее 2019 года
Мошенник получил по заслугам!
Защита аккаунта по IP.
ОБНОВЛЕНИЯ от 18.03.2009

всё это я получаю в мемо...

результат нужен примерно такой
Новые ключи для антиви...
Управление процессорным...
Microsoft показала мобильн...
Мошенник получил по засл...
Защита аккаунта по IP.
ОБНОВЛЕНИЯ от 18.03.200...


алгоритм примерно такой, если текст больше 23 символов то удалять всё кроме первых 23 символов и добавть ...

вообщем я ламер, и нихрена не могу сделать...  smile 

please help  smile 

 smile 
PM MAIL   Вверх
THandle
Дата 21.3.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372




 ! 
THandle
Меньше эмоций в названии темы, пожалуйста



treem, бежишь в цикле по всем строчкам(Lines), проверяешь - если длина больше 23(length), то удаляешь с помощью delete ненужную часть и прибавляешь к строке '...'.
PM   Вверх
treem
Дата 21.3.2009, 20:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.8.2008

Репутация: -1
Всего: -2



Цитата(THandle @ 21.3.2009,  20:27)
treem, бежишь в цикле по всем строчкам(Lines), проверяешь - если длина больше 23(length), то удаляешь с помощью delete ненужную часть и прибавляешь к строке '...'.

в том то и дело, что я незнаю как это сделать... я имею введу код...

Добавлено через 5 минут и 49 секунд
 smile  smile   smile 
PM MAIL   Вверх
Данкинг
Дата 21.3.2009, 21:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(treem @  21.3.2009,  20:37 Найти цитируемый пост)
незнаю как это сделать

С помощью функций COPY или DELETE. А уж как пройтись по строчкам Memo - примеров масса. Впрочем, если 
Цитата(treem @  21.3.2009,  20:21 Найти цитируемый пост)
вообщем я ламер, и нихрена не могу сделать... 

 - тогда, думаю, тебе ничего не поможет. smile 
 smile 
ЗЫ: в русском языке нет слова "вообщем", а "не" с глаголами пишется слитно только в чешском.



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Christoph
Дата 21.3.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Держи код, немного нестандартный
Код

var
  Str:String[20];
  i:Integer;
  NewStrList:TStringList;
begin
  NewStrList:=TStringList.Create;
   for i:=0 to Memo1.Lines.Count-1 do
     begin
       if length(Memo1.Lines[i])>23 then
         begin
           Str:=Memo1.Lines[i];
           NewStrList.Add(Str+'...');
         end
       else
         NewStrList.Add(Memo1.Lines[i]);
     end;
 Memo1.Lines.Assign(NewStrList);
end;



Это сообщение отредактировал(а) Christoph - 21.3.2009, 23:34


--------------------
user posted image
PM MAIL ICQ   Вверх
Matematik
Дата 22.3.2009, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 7
Всего: 50



treem


Код

function CopyStrMax_(const AStr:String; AMax:Integer):String;
begin
  if Length(AStr)>AMax then
  begin
    Result := Copy(Astr, 1, AMax-3) + '...';
  end
    else
  begin
    Result := AStr
  end
end;

procedure CopyStringsMax_(const AStrings:TStrings; AMax:Integer);
var j:Integer;
begin
  for j:=0 to AStrings.Count-1 do
    AStrings[j] := CopyStrMax_(AStrings[j], AMax);
end;

procedure CopyStringsMax2_(const AInStrings,AOutStrings:TStrings; AMax:Integer);
var j:Integer;
begin
  for j:=0 to AInStrings.Count-1 do
    AOutStrings.Add(CopyStrMax_(AInStrings[j], AMax))
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  {обрезать в другой список}
  CopyStringsMax2_(Memo1.Lines, Memo2.Lines, 23);
  {в том же}
  CopyStringsMax_(Memo1.Lines, 23)
end;



PM MAIL WWW ICQ   Вверх
Dmi3ev
Дата 22.3.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



А че так все трудно?
А вот так
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:=0 to Memo1.Lines.Count-1 do
    if (length(Memo1.Lines[i])>23) then
      begin
        Memo1.Lines[i]:=LeftStr(Memo1.Lines[i], 23)+'...';
      end;
end;
end.

Это моя первая программа на Delphi, но вроде работает...  smile 


--------------------

PM MAIL   Вверх
Данкинг
Дата 22.3.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Dmi3ev, можно даже ещё на 2 строчки сократить:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:=0 to Memo1.Lines.Count-1 do
    if (length(Memo1.Lines[i])>23) then
       Memo1.Lines[i]:=LeftStr(Memo1.Lines[i], 23)+'...';
end;
end.

 smile  smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 22.3.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



Цитата

Dmi3ev, можно даже ещё на 2 строчки сократить:

это да... я их для себя поставил... не суть важно...
я про сам способ... так просто проще всего по-моему...


--------------------

PM MAIL   Вверх
Данкинг
Дата 22.3.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



И ещё - для всех способов - я бы всё же брал Trim(Memo1.Lines[i]).


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 22.3.2009, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



 smile 
Данкинг, спорить не буду, хотя мог бы, ведь у меня за плечами уже порядка 5 строк кода на Delphi  smile А это тебе не в тапки...  smile 


--------------------

PM MAIL   Вверх
Данкинг
Дата 22.3.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Dmi3ev @  22.3.2009,  01:06 Найти цитируемый пост)
Данкинг, спорить не буду, хотя мог бы, ведь у меня за плечами уже порядка 5 строк кода на Delphi 

Так дело не конкретно в Delphi, у меня просто такая привычка (думаю, не очень плохая) - в строках обрезать пробелы:
Код

zaprosIB->ParamByName("adr1")->Value=StringReplace(Trim(zapros->FieldByName("addr")->AsString),(char)34,"$",TReplaceFlags());

 smile  smile smile



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 22.3.2009, 01:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



Цитата

Так дело не конкретно в Delphi, у меня просто такая привычка (думаю, не очень плохая) - в строках обрезать пробелы:

Может и неплохая, ты придерживаешься теории:
"психология пользователя такова, что он ставит пробел в начале и в конце строки..." 
Мне что-то такое из книжки по Access вспоминается...  (да и в принципе по любым БД)
Вопрос был в другом, поэтому это здесь непринципиально... 
Я стал более уверенным, осознав, что 5 строк кода - это не так уж и мало...  smile  

Теперь буду более тверд и настойчив, а по сему:
1) не надо тут никакого Trim!
2) использовать только тот код, который я выложил!
3) слушать только меня, я все таки ни одну строчку кода написал на старом добром Дельфине (а пять)  smile  


Это сообщение отредактировал(а) Dmi3ev - 22.3.2009, 03:06


--------------------

PM MAIL   Вверх
Данкинг
Дата 22.3.2009, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Dmi3ev @  22.3.2009,  01:33 Найти цитируемый пост)
Вопрос был в другом, поэтому это здесь непринципиально... 

Здесь - возможно. smile Но я такой теории придерживаюсь потому, что много кодил (да и кодю smile ) на FoxPro, а там как раз без ALLTRIM никуда. smile 

Цитата(Dmi3ev @  22.3.2009,  01:33 Найти цитируемый пост)
2) использовать только тот код, который я выложил!

Честно говоря, я даже не подумал, что можно так просто и это будет работать (Memo1.Lines[i]:=...), я думал, что придётся запоминать текущую позицию строки, удалять, а затем вставлять новую на прежнюю позицию. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 22.3.2009, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



Цитата

Честно говоря, я даже не подумал, что можно так просто и это будет работать (Memo1.Lines[i]:=...), я думал, что придётся запоминать текущую позицию строки, удалять, а затем вставлять новую на прежнюю позицию.

Век живи - век учись...  smile  


--------------------

PM MAIL   Вверх
treem
Дата 22.3.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.8.2008

Репутация: -1
Всего: -2



спасиба вам всем  smile  smile  smile  smile     вы мне очень помогли  smile 
PM MAIL   Вверх
THandle
Дата 22.3.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



treem, в следующий раз обращайтесь в Центр Помощи. Этот раздел не предназначен для просьб сделать все за себя. 

Вообще грустно. На простые вопросы идут целой толпой отвечать, а как сложные... Печально.

Тему закрываю. Опасаюсь дальнейших ненужных обсуждений.
PM   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1025 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.