Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форматирование строчки адреса на конверт [D7, WinXP]


fastcall ©   (2006-06-20 14:49:00) 

Есть адрес в формате

443090 г. Самара, ул. Советской Армии, 180/3, оф. 404

И есть карточка определённых размеров типа "Кому, Куда" (для конверта)

Так вот, нужно сделать процедуру, которая выдавала бы эти строчки в
таком формате:

Кому: Начальнику отдела снабжения
Куда: г. Самара, ул. Советской Армии,
180/3, оф. 404

443090

Думаю, задача ясна. Пытался разбивать на подстроки по 30 символов, но выглядит некрасиво.

Адреса написаны в произвольном формате (строка), и это отяжеляет решение...

--- HELP ---


Сергей М.   (2006-06-20 15:58:00) [1]


> больше одного раза


Оно тебе, Игорь, и регулировать дано.


Игорь Шевченко   (2006-06-20 15:49:00) [2]

Сергей М. ©   (20.06.06 15:39) [12]

Посмотрим. Но наезжать оно в любом случае ни к чему. По крайней мере, больше одного раза :)


Сергей М.   (2006-06-20 15:39:00) [3]


> Игорь Шевченко


Ежели человек думать не хочет (или нечем думать) - оно (все это ему рекомендованое), ч.н., "мертвому припарка".


Игорь Шевченко   (2006-06-20 15:26:00) [4]

Твори выдумывай пробуй

procedure WrapText (const Source: string; Limit: Integer; Dest: TStrings);
var
 Tmp: TStrings;
 Work: string;
 I: Integer;
begin
 Tmp := TStringList.Create;
 try
   StrBreakApart (StringReplace(Source, '   ', ' ', [rfReplaceAll]), ' ', Tmp);
   Dest.Clear;
   for I:=0 to Pred(Tmp.Count) do begin
     if Length(Tmp[I]) > Limit then begin
       if Length(Work) > 0 then begin
         Dest.Add (Work);
         Work := '';
       end;
       Work := Tmp[I];
     end else if (Length(Work) = 0) or
       (Succ(Length(Work)) + Length(Tmp[I]) <= Limit) then begin
       if Length(Work) > 0 then
         Work := Work + ' ';
       Work := Work + Tmp[I];
     end else begin
       Dest.Add (Work);
       Work := '';
       Work := Tmp[I];
     end;
   end;
   if Length(Work) <> 0 then
     Dest.Add(Work);
 finally
   Tmp.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 WrappedText: TStrings;
begin
 WrappedText := TStringList.Create;
 try
   WrapText (Edit1.Text, StrToIntDef(Edit2.Text, 30), WrappedText);
   Memo1.Lines.Assign(WrappedText);
 finally
   WrappedText.Free;
 end;
end;



> Классно вы тут новичкам помогаете


Тебе тут никто не обязан помогать. Вся помощь - дело доброй воли.


Сергей М.   (2006-06-20 15:09:00) [5]

Удалено модератором


Сергей М.   (2006-06-20 15:08:00) [6]

Удалено модератором


fastcall   (2006-06-20 15:07:00) [7]

У МЕНЯ БОЛЬШЕ НА КОНВЕРТ НЕ ВЛЕЗАЕТ
короче ладно, всё с тобой ясно, совсем вы тут зарвались...


Сергей М.   (2006-06-20 15:06:00) [8]


> 30 символов это максимум.
>


Кемписано сие соглашение ? Тобой ?


fastcall   (2006-06-20 15:03:00) [9]

30 символов это максимум.


fastcall   (2006-06-20 15:02:00) [10]

Удалено модератором


Сергей М.   (2006-06-20 15:02:00) [11]


> Пытался разбивать на подстроки по 30 символов, но выглядит
> некрасиво.


Это значит что утверждение

> строчки в
> таком формате


неверно.


Сергей М.   (2006-06-20 15:00:00) [12]

Удалено модератором


fastcall   (2006-06-20 14:56:00) [13]

Удалено модератором


Сергей М.   (2006-06-20 14:52:00) [14]


> Адреса написаны в произвольном формате (строка), и это отяжеляет
> решение


Бросай этот  геморрой


Наверх

Титульная страница Поиск, карта сайта Написать письмо