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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 11:23   #1
DannyKing
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 14
Восклицание Задача в Delphi с SaveDialog

помогите пожалуйста переписать процедуру так, чтобы окно savedialog не появлялось, а attach сохранялся напрямую в какой-нибудь папке на диске. Например C:\папка1.

Код:
procedure TfmMain.sbtSaveAttachClick(Sender: TObject);
var
  i, Cnt, Idx: Integer;
begin
  Idx:=lvMailAttachments.Selected.Index;
  Cnt:=0;
  i:=0;

  while (i < IdMessage1.MessageParts.Count) do
    begin
      if IdMessage1.MessageParts[i] is TIdAttachment then
        if Cnt = Idx then
          begin
            sdMain.FileName:=(IdMessage1.MessageParts[i] as TIdAttachment).FileName;
            sdMain.InitialDir:=ExtractFilePath(Application.ExeName);

            if sdMain.Execute then
              (IdMessage1.MessageParts[i] as TIdAttachment).SaveToFile(sdMain.FileName);

            Exit;
          end
        else
          Inc(Cnt);

      Inc(i);
    end;
end;

Последний раз редактировалось Stilet; 09.06.2009 в 12:51.
DannyKing вне форума Ответить с цитированием
Старый 06.06.2009, 11:36   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Вместо этого:
Код:
sdMain.FileName:=(IdMessage1.Messag eParts[i] as TIdAttachment).FileName;
sdMain.InitialDir:=ExtractFilePath( Application.ExeName);

if sdMain.Execute then
(IdMessage1.MessageParts[i] as TIdAttachment).SaveToFile(sdMain.Fi leName);
Надо:

Код:
FileName := '<имя файла>';
//например
FileName := ExtractFilePath( Application.ExeName) + 
         (IdMessage1.Messag eParts[i] as TIdAttachment).FileName;

(IdMessage1.MessageParts[i] as TIdAttachment).SaveToFile(FileName);
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 06.06.2009, 13:37   #3
DannyKing
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 14
По умолчанию

чет не работает...
DannyKing вне форума Ответить с цитированием
Старый 06.06.2009, 15:25   #4
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Что именно не работает?
Вызов диалога происходит здесь:
Код:
if sdMain.Execute then
Далее файл сохраняется с введенным именем:
Код:
(IdMessage1.MessageParts[i] as TIdAttachment).SaveToFile(sdMain.FileName);
Вместо этих двух строк я предложил вот это:
Код:
FileName := ExtractFilePath(Application.ExeName) + 
         (IdMessage1.Messag eParts[i] as TIdAttachment).FileName;
(IdMessage1.MessageParts[i] as TIdAttachment).SaveToFile(FileName);
Т.е. сохранение происходит в каталог с программой.
Имя файла соответствует имени файла во вложении.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 07.06.2009, 17:39   #5
DannyKing
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 14
По умолчанию

я не понял куда вбить путь для сохранения... если execute нет... то прога просто виснет на filename...чет не хватает... или я не понял...
DannyKing вне форума Ответить с цитированием
Старый 07.06.2009, 20:23   #6
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Должно быть вот так:
Код:
procedure TfmMain.sbtSaveAttachClick(Sender: TObject);
var
  i, Cnt, Idx: Integer;
  Path: String; { <- ввели доп. переменные }
  attch: TIdAttachment;
begin
  Idx:=lvMailAttachments.Selected.Index;
  Cnt:=0;
  i:=0;
  Path := ExtractFilePath(Application.ExeName) + 'emails\'; { <- путь для сохранения файлов }

  while (i < IdMessage1.MessageParts.Count) do begin
    if IdMessage1.MessageParts[i] is TIdAttachment then
      if Cnt = Idx then begin
        attch := (TIdAttachment)IdMessage1.MessageParts[i];
        attch.SaveToFile(Path + attch.FileName);  { <- здесь сохранение }
        Exit;
      end
      else
        Inc(Cnt);
    Inc(i);
  end;
end;
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 07.06.2009 в 20:34.
Daramant вне форума Ответить с цитированием
Старый 09.06.2009, 00:24   #7
DannyKing
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 14
По умолчанию

attch := (TIdAttachment)IdMessage1.MessagePa rts[i];


[Error] uMain.pas(728): Incompatible types: 'TIdAttachment' and 'Class reference'
DannyKing вне форума Ответить с цитированием
Старый 09.06.2009, 12:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых:
Код:
attch := TIdAttachment(IdMessage1.MessageParts[i]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2009, 17:47   #9
DannyKing
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 14
По умолчанию

приложение запускается... но во время работы виснет... именно на этой процедуре.
DannyKing вне форума Ответить с цитированием
Старый 11.06.2009, 18:33   #10
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Выполни пошагово, посмотри, в чем конкретнее причина.
Возможно, что-то с циклом, а так не должно.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenDialog and SaveDialog Kortik Помощь студентам 5 18.05.2009 09:58
SaveDialog Valerich Общие вопросы Delphi 4 03.05.2009 16:53
Формат из SaveDialog androidvsu Помощь студентам 6 19.02.2009 19:22
Проблема с SaveDialog boostman Общие вопросы Delphi 11 16.06.2008 14:40
SaveDialog не сохраняет правильно Shouldercannon Общие вопросы Delphi 7 16.06.2008 02:14