![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вложение электронной почты [D7, XP]
Alex Ford © (2008-05-29 10:14:00)Здрасте!
В отправляемое сообщение необходимо прикрепить файлы. По одному получилось. Но 2-3...n файлов не отправляет. Если в атачменте список файлов представляется в виде списка - StringList.
В список файлы добавлены. Для наглядности отображеню в ListBox.
Но отправляет только один файл - последний.
Подскажите плиз, в чем ошибка?
for i:=0 to filelist.Count-1 do
TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]);
Alex Ford (2008-05-29 12:48:00) [1]Разобрался! заработало!
При создани формы создал StringList
При добавлени и файлов Opendialog1 добавляем его в список
Stringlist.Add(opendialog1.filename)
При отправке перебрал все имена в списке
for i:=0 to FileList.Count-1 do
TIdAttachment.Create(M1.MessageParts, FileList.Strings[i]);
Блин, а форум огромный получился.....
Спасибо Palladin!!!!!!!!!!!
Palladin (2008-05-29 12:44:00) [2]а почему ты спрашиваешь у меня? результат выполнения, ответит куда более красноречивей...
Alex Ford (2008-05-29 12:39:00) [3]Извиняй, пропустил это
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
filelist.Add(opendialog1.FileName);
end;
Alex Ford (2008-05-29 12:38:00) [4]Как на счет этого:
procedure TForm1.FormCreate(Sender: TObject);
begin
FileList:= TStringList.Create;
end;
TIdAttachment.Create(M1.MessageParts, FileList.Strings[i]);
Palladin (2008-05-29 12:30:00) [5]
> 2. Критика приветсвуется, так как это заставляет думать.
> (для меня)
ну и какие мысли'то в голову пришли? я же все объяснил, что происходит. тебе осталось лишь изменить порочные детали происходящего.
Alex Ford (2008-05-29 12:16:00) [6]Забыл добавить, что если использовать
TIdAttachment.Create(M1.MessageParts, listbox2.Items[0]);
то работает, т.е. отсылается первый добавленный файл.
В цикле не получается, так как проявляется выше-выше описанная ситуация :(
Alex Ford (2008-05-29 12:13:00) [7]1. Мараз - не маразм, а каждый думает по своему. И учится на ошибках как своих так и чужих.
2. Критика приветсвуется, так как это заставляет думать. (для меня)
3. Изображение в душу залезло потому,что человек понравился
3.1. Внешне
3.2. Старается помочь.
p.s. Я же не в личную жизнь лезу. А просто внимание на человека обратил
вот так.
Palladin (2008-05-29 12:05:00) [8]
> Плохиш © (29.05.08 12:02) [31]
я? разжевал? я лишь показал, что он делает, раз он сам понять не может, что же он делает... люблю критиковать, знаешь ли... :)
ему мое изображение в душу еще залезло зачем то... так'то, у изображения прямых указаний куда'то лазить нет... :)
Плохиш (2008-05-29 12:02:00) [9]
> Palladin © (29.05.08 11:52) [29]
Хм, хотел начать из далека, но раз уж ты ему всё разжевал... :-)
Плохиш (2008-05-29 11:55:00) [10]
> Alex Ford (29.05.08 11:07) [17]
> Совсем запутался :(
>
>
> //Добавим файлы
> procedure TForm1.SpeedButton1Click(Sender: TObject);
> begin
> FileList:= TStringList.Create;
> if opendialog1.Execute then
> begin
> filelist.Add(pchar(opendialog1.FileName));
> listbox2.Items.AddStrings(filelist);> // edit1.Text:= opendialog1.FileName;
> ShowMessage(IntToStr(M1.MessageParts.Count))
>
> end;
> end;
Маразм сплошной, и FileList, и listbox2, добавление строк... Маразм, голова у тебя для чего? Ешь ты туда что ли только?
PS. Объясни, что делает выделенная строка, может тогда поймёшь...
Palladin (2008-05-29 11:52:00) [11]понимаешь, твоя логика порочна. что на самом деле происходит.
1. нажимается кнопка
1.1 создается экземпляр FilesList - пустой, свежесозданный, ничем не заполненный, ссылка на него сохраняется в поле формы, старая ссылка - теряется, объект содержащий добавленные строки теряется
1.2 пользователю показывается диалог и в случае успешного определения с файлом, он добавляется в FilesList, теперь FilesList у нас содержит одинфайл, ну и попутно зачем-то добавляетсяв listbox2 всесодержимое FilesList
2. если кнопка нажимается еще раз идем на 1.1 и понимает что же происходит в FilesList
3. наступает время Ч когда нужно отправить файлы, так как у нас в FilesList всего лишь один файл, последневыбранный, он и отправляется. никакой информации о предыдущих файлах в нем не содержится. если ты не понял почему, медитируй над пунктом 1.1
Плохиш (2008-05-29 11:51:00) [12]
> Alex Ford (29.05.08 11:46) [27]
Стоит сначала разобраться с логикой хранения выбранных имён файла, а уж потом вложения создавать...
Alex Ford (2008-05-29 11:46:00) [13]Посмотрел фото - ну прямо в душу лезет! Сразу видно что МАСТЕР! Приятный человек!
И так....
Пробовал добавлять 3-4 файла. Так и выходит.
Представляю, Тимур.
Создается объект - спикок типа TstringList.
List:= TstringList.Create;
List.Add('1');
List.Add('2');
List.Add('3');
List.Free//уничтожаем когда не нужен.
так ведь?
Я так соображал, что аттачемент обладает свойством TStringList. Потому и воспользовался им.
Palladin (2008-05-29 11:39:00) [14]:) даже так... ну да... так оно... ты три файла не пробовал добавлять, с твоим кодом в listbox2 получилось бы
первый файл
первый файл
второй файл
первый файл
второй файл
третий файл
ты вообще представляешь чтоделает эта строчка?
Alex Ford (2008-05-29 11:36:00) [15]Это FileList:= TStringList.Create?
Потому, что так получается первых два одинаковых имени файла.
Palladin (2008-05-29 11:33:00) [16]
> В цикле оно показывает 0.
я непонятно написал? не вцикле, а послецикла. ну да ладно. это уже не важно. можешь не смотреть. можешь внятно объяснить, зачем ты в событии кнопкиSpeedButton1ClickделаешьFileList:= TStringList.Create;?
Alex Ford (2008-05-29 11:31:00) [17]ребята, не надо за метлой..... :(
Alex Ford (2008-05-29 11:30:00) [18]Ну извини.
В цикле оно показывает 0.
FileList - это Tstringlist.
В FileList добавляю файлы так:filelist.Add(opendialog1.FileName);
Palladin (2008-05-29 11:25:00) [19]
> Alex Ford (29.05.08 11:21) [20]
> на счет ShowMessage(IntToStr(M1.MessageParts.Count)) сколько
> показывает? - то это не моё.
и что? зато мое. я спросил сколько оно показывает послевыполнения цикла
for i:=0 to filelist.Count-1 do
TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]);
это раз, два, судя по названию переменной и тому что ты привел, у тебя в filelist всегда однастрока. всегда с последнимдобавленным файлом. более того, filelist скорее всего является полем формы и ты при каждом добавлении нового файла в listbox2 теряешь ссылку на объект...
короче, не удержусь, скажу, за метлой...
Alex Ford (2008-05-29 11:21:00) [20]на счет
ShowMessage(IntToStr(M1.MessageParts.Count)) сколько показывает?- то это не моё.
на счет добавления строк в листбок не проблема. Просто так соображал исходя того, что в аттачменте файлы указываются в виде объекта стринглиста. Потому и написал.
Без Pchar у меня фиг его знает, почему то не отправляется......
А вот пример
Attach_Count := High(AttachList);
for Attach_No := 0 to Attach_Count do begin
AttachFileName := AttachList[Attach_No].FileName;
AttachBody := AttachList[Attach_No].Body;
if (Length(AttachBody) > 0) then begin
// Присоединим письмо
IdAttachment := TIdAttachmentMemory.Create(Msg.MessageParts);
IdAttachment.FileName := AttachFileName;
Stream := IdAttachment.OpenLoadStream;
try
Stream.Write(AttachBody[1], Length(AttachBody));
finally
IdAttachment.CloseLoadStream;
end;
end;
end;
Я не понял.
Меня заинтересовало сейчас одно. Если в аттачмент можно прописал одной строкойTIdAttachment.Create(Msg.MessageParts,'c:\file.zip');.
Тогда как можно указать два файла, для примера, вместо одного файла как в этом примере?