|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
"КРАКОЗЯБЛИ" в почте
Добрый день уважаемые господа програмисты! И вновь требуется Ваша помощь (как обычно в нашем теперешнем мире). Есть программа которая читает почту. Этакий почтовый клиент. Однако при отображении текста в memo, например, текст выглядит как "Алекс-Юстасу", сплошная шифрограмма. Вопрос : как быть?
зарание спасибо! Код:
procedure TForm1.SpeedButtonClick(Sender: TObject); var f: Integer; name: string; begin cler; if work = True then begin try Form1.TIdPOP.Connect(); if Form1.TIdPOP.Connected = True then begin all:= Form1.TIdPOP.CheckMessages; Form1.Label1.Caption:= IntToStr(all); form1.Label3.Font.Color:= clLime; form1.Label3.Caption:= '> Последний просмотр был в '+timeToStr(Now); Form1.lst1.Clear; for f:= 1 to all do begin Form1.IdMessage2.Clear; Form1.TIdPOP.Retrieve(f,Form1.IdMessage2); Form1.IdMessage2.CharSet:='koi8-r'; if Form1.IdMessage2.Subject = '' then begin name:= 'Нет заголовка.'; dat:= 'not'; tim:= 'not'; end else begin dat:= DateToStr(Form1.IdMessage2.Date); name:= form1.IdMessage2.Subject; tim:= TimeToStr(Form1.IdMessage2.Date); end; Form1.lst1.Items.Add(''); Form1.lst1.Items[f-1]:= IntToStr(f)+ ' > '+ name + ' : '+dat+ ' / '+tim; end; if allMemory > all then allMemory:= all; if (allMemory <> all) and (first = False) and (Form2.CheckBox1.Checked = True) then theMail; if first = True then begin first:= False; allMemory:= all; end; end; except Form1.Label3.Font.Color:= clRed; form1.Label3.Caption:= '> Превышен лимит времени TIME OUT !'; end; Form1.TIdPOP.Disconnect; end else form1.Label3.Caption:= '> Не установлены данные адреса! Войдите в НАСТРОЙКИ'; end; |
#2
|
||||
|
||||
Текст в разных кодировках может передаваться (UTF-8, KOI-8, ISO...), нужно просто перекодировать.
И да, кто так код форматирует? Это ж пипетс. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
в смысле кто так код форматирует?
- Я так форматирую, а что не так? То,что нужно перекодировать - я думаю понятно было и мне (иначе зачем бы я стал бы об этом спрашивать), Вы бы подсказали или показали как это делать |
#4
|
||||
|
||||
В пакете инди есть набор перекодировщиков, поиск по файлам сделай по слову KOI.
А про форматирование - этот код жеж на экран не влезает, обычно так форматируется он: Код:
if blalblalbalbalblalbalblablablalalaablbla then begin for bsmdbmslgbslfnlsnbslknr do begin while true do begin end; end; end; З.Ы. В вопросе было "как быть?" а "покажите, как перекодировать". — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Уважаемый M.A.D.M.A.N. !
Действительно не правильно спросил! Спрашиваю правильно : покажите как перекодировать текст. |
#6
|
||||
|
||||
Не, ну конечно вам виднее, как оформлять. Просто несколько широковато выходит. Я например конструкцию if then else оформляю немножко покомпактнее, но кому-то тоже так не нравится. Вот скажем ваш код с моим вариантом форматирования:
Код:
procedure TForm1.SpeedButtonClick(Sender: TObject); var f: Integer; name: string; begin cler; if work then begin try Form1.TIdPOP.Connect(); if Form1.TIdPOP.Connected then begin all:= Form1.TIdPOP.CheckMessages; Form1.Label1.Caption:= IntToStr(all); form1.Label3.Font.Color:= clLime; form1.Label3.Caption:= '> Последний просмотр был в '+timeToStr(Now); Form1.lst1.Clear; for f:= 1 to all do begin Form1.IdMessage2.Clear; Form1.TIdPOP.Retrieve(f,Form1.IdMessage2); Form1.IdMessage2.CharSet:='koi8-r'; if Form1.IdMessage2.Subject = '' then begin name:= 'Нет заголовка.'; dat:= 'not'; tim:= 'not'; end else begin dat:= DateToStr(Form1.IdMessage2.Date); name:= form1.IdMessage2.Subject; tim:= TimeToStr(Form1.IdMessage2.Date); end; Form1.lst1.Items.Add(''); Form1.lst1.Items[f-1]:= IntToStr(f)+ ' > '+ name + ' : '+dat+ ' / '+tim; end; if allMemory > all then allMemory:= all; if (allMemory <> all) and (first = False) and (Form2.CheckBox1.Checked = True) then theMail; if first = True then begin first:= False; allMemory:= all; end; end; except Form1.Label3.Font.Color:= clRed; form1.Label3.Caption:= '> Превышен лимит времени TIME OUT !'; end; Form1.TIdPOP.Disconnect; end else form1.Label3.Caption:= '> Не установлены данные адреса! Войдите в НАСТРОЙКИ'; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
да, действительно, так - значительно приятнее. Но мне бы всё-же хотелось узнать как перекодировать текст который я получаю с почты. ?
|
#8
|
|||
|
|||
вот я получаю текст письма
Код:
Form1.TIdPOP.Retrieve(f,Form1.IdMessage2); str:= Form1.IdMessage2.Subject; и вот именно в этом самом str и обнаруживается что то вроди ?koi-8?... или что -то в этом роде. Во первых что это такое (ладно этоя знаю, это другая кодировка), но при помощи какой функции текст можно сделать читабельным? В моём почтовом клиенте, клиент, после настроек программы (адрес почты, пароль), должен увидеть сколько писем в ящике и какие темы у этих писем, мне нужно что бы надписи отображались корректно. |