![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форматирование строчки адреса на конверт [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]
> Адреса написаны в произвольном формате (строка), и это отяжеляет
> решение
Бросай этот геморрой