Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2015, 08:33   #1
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию Почему код не правильно работает?

Вот использую код для загрузки нескольких файлов eml с последующей их обработкой - нужно из eml достать ссылки. Использую synapse. При загрузке файлов в memo дальше ничего не раскодируется. Почему так??? Сижу уже не первый день =((

Код:
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, mimemess, mimepart, ExtCtrls, ComCtrls, ActiveX;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo: TMemo;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure GetParts(const part: TMimepart);
    //procedure AllTXTtoMemo(Dir, Masc: string; Memo: TMemo);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
    IdMes:TMimeMess;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
 
procedure TForm1.GetParts(const part: TMimepart);
var
  s: string;
  i: integer;
begin
  if (LowerCase(part.Primary)='text') and (LowerCase(part.FileName)='')  then  //Проверим  что данный блок - текст сообщения
  begin
  part.DecodePart;
    if LowerCase(part.Secondary)='plain'   then    // Определяем что это простой текст
         Memo1.Lines.LoadFromStream(part.DecodedLines); // Загружаем раскодированные данные
    end;
 
  for i := 0 to part.GetSubPartCount - 1 do
    GetParts( part.getsubpart(i));     // проверяем наличие следующего блока
end;
 
 
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
  var
i:integer;
begin
  if OpenDialog1.Execute then
  begin
    IdMes:=TMimeMess.Create;
    IdMes.Lines.LoadFromFile(Memo.Text);
  end;
    IdMes.DecodeMessage;     // Раскодируем сообщение, обязательно
    Memo2.Lines.Assign(IdMes.Header.CustomHeaders); // Заголовки, не спицифичные для формата MIME
    GetParts(IdMes.MessagePart);    // рекурсивная процедура обхода блоков сообщения
 
 
end;
 
procedure AllTXTtoMemo(Dir, Masc: string; Memo: TMemo);
var
  searchResult : TSearchRec;
  Buff: TStringList;
begin
  Memo.Clear;
  Buff := TStringList.Create;
  if Dir[Length(Dir)] <> '\' then
    Dir := Dir + '\';
  if Masc = '' then Masc := '*.*';
  if FindFirst(Dir + Masc, faAnyFile - faDirectory, searchResult) = 0 then
  begin
    repeat
      Buff.LoadFromFile(Dir + searchResult.Name);
      Memo.Lines.AddStrings(Buff);
    until FindNext(searchResult) <> 0;
    FindClose(searchResult);
  end;
  Buff.Free;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  AllTXTtoMemo('d:\1\2', '*.eml', Memo);
end;
 
 
end.
Данный код работает и устраивает полностью, но как сделать загрузку файлов поочередно тогда???

Код:
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, mimemess, mimepart, ExtCtrls, ComCtrls, ActiveX;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure GetParts(const part: TMimepart);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
    IdMes:TMimeMess;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
 
procedure TForm1.GetParts(const part: TMimepart);
var
  s: string;
  i: integer;
begin
  if (LowerCase(part.Primary)='text') and (LowerCase(part.FileName)='')  then  //Проверим  что данный блок - текст сообщения
  begin
  part.DecodePart;
    if LowerCase(part.Secondary)='plain'   then    // Определяем что это простой текст
         Memo1.Lines.LoadFromStream(part.DecodedLines); // Загружаем раскодированные данные
    end;
 
  for i := 0 to part.GetSubPartCount - 1 do
    GetParts( part.getsubpart(i));     // проверяем наличие следующего блока
end;
 
 
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
  var
i:integer;
begin
  if OpenDialog1.Execute then
  begin
    IdMes:=TMimeMess.Create;
    IdMes.Lines.LoadFromFile(OpenDialog1.FileName);
  end;
    IdMes.DecodeMessage;     // Раскодируем сообщение, обязательно
    Memo2.Lines.Assign(IdMes.Header.CustomHeaders); // Заголовки, не спицифичные для формата MIME
    GetParts(IdMes.MessagePart);    // рекурсивная процедура обхода блоков сообщения
 
 
end;
 
 
end.

Последний раз редактировалось Stilet; 21.01.2015 в 10:34.
Максим_maks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает код? иванлеон БД в Delphi 11 11.02.2013 14:49
Почему код выполняется правильно только один раз? Questru Microsoft Office Excel 8 25.01.2013 09:50
Почему не работает код, хотя вроде всё правильно mpdasa Помощь студентам 3 04.06.2012 10:44
Не правильно работает код Sylar9 Общие вопросы C/C++ 8 05.04.2012 12:11
Есть код но почему то не правильно работает -ushёl- Помощь студентам 1 10.05.2010 22:27