Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизВложение электронной почты Найти похожие ветки
← →
Alex Ford (2008-05-29 10:14) [0]Здрасте!
В отправляемое сообщение необходимо прикрепить файлы. По одному получилось. Но 2-3...n файлов не отправляет. Если в атачменте список файлов представляется в виде списка - StringList.
В список файлы добавлены. Для наглядности отображеню в ListBox.
Но отправляет только один файл - последний.
Подскажите плиз, в чем ошибка?
for i:=0 to filelist.Count-1 do
TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]);
← →
Reindeer Moss Eater © (2008-05-29 10:16) [1]В том, что у тебя аттачметов создается по числу файлов, и используется последний
← →
Alex Ford (2008-05-29 10:19) [2]Тогда как правильно решить?
Я пытался в таком видеC:\file1.txt+";"+file2.txt
Но не пашет. Помоему перечислять имена файлов можно через разделитель - т.е. указать ";"
← →
Reindeer Moss Eater © (2008-05-29 10:21) [3]Помедитируй над этим:
for i:=0 to filelist.Count-1 do
TIdAttachment.Create
сколько аттачметов будет создано?
и куда деваются ссылки на все кроме последнего.
← →
Palladin © (2008-05-29 10:24) [4]
> Reindeer Moss Eater © (29.05.08 10:21) [3]
что бы медитировать над ссылками, нужно знать, что это такое :)
← →
Alex Ford (2008-05-29 10:26) [5]сколько файлов - столько и аттачменов
← →
Reindeer Moss Eater © (2008-05-29 10:29) [6]ну тогда у тебя все ок. чего жалуешься?
← →
Reindeer Moss Eater © (2008-05-29 10:32) [7]ты спросил в чем у тебя ошибка.
тебе ответили в чем.
ты продолжаешь упорствовать, что "тебе так надо", и что "так и задумано"
валяй.
← →
Alex Ford (2008-05-29 10:33) [8]Проблема в том, что усли указать в аттачмене просто (C:\Temp\File1.txt) то он отправится без проблем. Один файл. Мне нужно отправить ЛЮБОЕ количество файлов. Я создаю StringList и добавляю имена файлов.
Перед отправкой перебираю весь спиок. Но отправляется только последний файл. Запутался уже. Подскажите в какую сторону копать. Чтобы решить задачу с отпракой файлов с N количеством
← →
Alex Ford (2008-05-29 10:35) [9]Этот код прокатит без проблем
TIdAttachment.Create(Msg.MessageParts,"c:\file.zip");
А этот код не катит вообщеTIdAttachment.Create(Msg.MessageParts,"c:\file.zip"+";"+"c:\file2.zip");
← →
Reindeer Moss Eater © (2008-05-29 10:37) [10]Проблема в том, что усли указать в ....
настоящая проблема описана в [1]
← →
Reindeer Moss Eater © (2008-05-29 10:40) [11]Экземпляр TIdAttachment должен быть один
← →
Alex Ford (2008-05-29 10:44) [12]мдя..... валяй....
Ясно что аттачмент должен быть один. Мне непонятно как использовать привязку нескольких файлов. С одним файлом я разобрался.
← →
Reindeer Moss Eater © (2008-05-29 10:45) [13]Если ясно, то выноси создание экземпляра TIdAttachment из цикла.
← →
Alex Ford (2008-05-29 10:47) [14]ты имеешь в виду просто
TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]);
?
← →
Reindeer Moss Eater © (2008-05-29 10:53) [15]что я имею ввиду я уже сказал
← →
Palladin © (2008-05-29 11:00) [16]ShowMessage(IntToStr(M1.MessageParts.Count)) сколько показывает?
← →
Alex Ford (2008-05-29 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;
//Отправим
...........
...........
...........
TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]));
...........
...........
...........
← →
ANB (2008-05-29 11:11) [18]
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;
Примерно так. Это из строк вложения добавляются. Легко переделать на сразу из файлов.
← →
Palladin © (2008-05-29 11:12) [19]бредишь? ну вот на кой нужно показывать сколько частей в сообщении, когда ты туда еще ничего не добавил?
> filelist.Add(pchar(opendialog1.FileName));
это что еще за бред? зачем приводить к PChar? Разве от тебя PChar требуется?
> listbox2.Items.AddStrings(filelist);
а это что за бред? ради одной строчки создавать целый объект TStringList ? с дуба рухнул? listbox2.Items.Add(opendialog1.FileName) религия не позволяет?
> ShowMessage(IntToStr(M1.MessageParts.Count))
и каким попом интересно на добавлении в listbox2 строки скажется изменение количества элементов в M1.MessageParts?
← →
Alex Ford (2008-05-29 11:21) [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");
.
Тогда как можно указать два файла, для примера, вместо одного файла как в этом примере?
← →
Palladin © (2008-05-29 11:25) [21]
> 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:30) [22]Ну извини.
В цикле оно показывает 0.
FileList - это Tstringlist.
В FileList добавляю файлы так:filelist.Add(opendialog1.FileName);
← →
Alex Ford (2008-05-29 11:31) [23]ребята, не надо за метлой..... :(
← →
Palladin © (2008-05-29 11:33) [24]
> В цикле оно показывает 0.
я непонятно написал? не в цикле, а после цикла. ну да ладно. это уже не важно. можешь не смотреть. можешь внятно объяснить, зачем ты в событии кнопкиSpeedButton1Click
делаешьFileList:= TStringList.Create;
?
← →
Alex Ford (2008-05-29 11:36) [25]Это FileList:= TStringList.Create?
Потому, что так получается первых два одинаковых имени файла.
← →
Palladin © (2008-05-29 11:39) [26]:) даже так... ну да... так оно... ты три файла не пробовал добавлять, с твоим кодом в listbox2 получилось бы
первый файл
первый файл
второй файл
первый файл
второй файл
третий файл
ты вообще представляешь что делает эта строчка?
← →
Alex Ford (2008-05-29 11:46) [27]Посмотрел фото - ну прямо в душу лезет! Сразу видно что МАСТЕР! Приятный человек!
И так....
Пробовал добавлять 3-4 файла. Так и выходит.
Представляю, Тимур.
Создается объект - спикок типа TstringList.
List:= TstringList.Create;
List.Add("1");
List.Add("2");
List.Add("3");
List.Free//уничтожаем когда не нужен.
так ведь?
Я так соображал, что аттачемент обладает свойством TStringList. Потому и воспользовался им.
← →
Плохиш © (2008-05-29 11:51) [28]
> Alex Ford (29.05.08 11:46) [27]
Стоит сначала разобраться с логикой хранения выбранных имён файла, а уж потом вложения создавать...
← →
Palladin © (2008-05-29 11:52) [29]понимаешь, твоя логика порочна. что на самом деле происходит.
1. нажимается кнопка
1.1 создается экземпляр FilesList - пустой, свежесозданный, ничем не заполненный, ссылка на него сохраняется в поле формы, старая ссылка - теряется, объект содержащий добавленные строки теряется
1.2 пользователю показывается диалог и в случае успешного определения с файлом, он добавляется в FilesList, теперь FilesList у нас содержит один файл, ну и попутно зачем-то добавляется в listbox2 все содержимое FilesList
2. если кнопка нажимается еще раз идем на 1.1 и понимает что же происходит в FilesList
3. наступает время Ч когда нужно отправить файлы, так как у нас в FilesList всего лишь один файл, последневыбранный, он и отправляется. никакой информации о предыдущих файлах в нем не содержится. если ты не понял почему, медитируй над пунктом 1.1
← →
Плохиш © (2008-05-29 11:55) [30]
> 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. Объясни, что делает выделенная строка, может тогда поймёшь...
← →
Плохиш © (2008-05-29 12:02) [31]
> Palladin © (29.05.08 11:52) [29]
Хм, хотел начать из далека, но раз уж ты ему всё разжевал... :-)
← →
Palladin © (2008-05-29 12:05) [32]
> Плохиш © (29.05.08 12:02) [31]
я? разжевал? я лишь показал, что он делает, раз он сам понять не может, что же он делает... люблю критиковать, знаешь ли... :)
ему мое изображение в душу еще залезло зачем то... так"то, у изображения прямых указаний куда"то лазить нет... :)
← →
Alex Ford (2008-05-29 12:13) [33]1. Мараз - не маразм, а каждый думает по своему. И учится на ошибках как своих так и чужих.
2. Критика приветсвуется, так как это заставляет думать. (для меня)
3. Изображение в душу залезло потому,что человек понравился
3.1. Внешне
3.2. Старается помочь.
p.s. Я же не в личную жизнь лезу. А просто внимание на человека обратил
вот так.
← →
Alex Ford (2008-05-29 12:16) [34]Забыл добавить, что если использовать
TIdAttachment.Create(M1.MessageParts, listbox2.Items[0]);
то работает, т.е. отсылается первый добавленный файл.
В цикле не получается, так как проявляется выше-выше описанная ситуация :(
← →
Palladin © (2008-05-29 12:30) [35]
> 2. Критика приветсвуется, так как это заставляет думать.
> (для меня)
ну и какие мысли"то в голову пришли? я же все объяснил, что происходит. тебе осталось лишь изменить порочные детали происходящего.
← →
Alex Ford (2008-05-29 12:38) [36]Как на счет этого:
procedure TForm1.FormCreate(Sender: TObject);
begin
FileList:= TStringList.Create;
end;TIdAttachment.Create(M1.MessageParts, FileList.Strings[i]);
← →
Alex Ford (2008-05-29 12:39) [37]Извиняй, пропустил это
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
filelist.Add(opendialog1.FileName);
end;
← →
Palladin © (2008-05-29 12:44) [38]а почему ты спрашиваешь у меня? результат выполнения, ответит куда более красноречивей...
← →
Alex Ford (2008-05-29 12:48) [39]Разобрался! заработало!
При создани формы создал StringList
При добавлени и файлов Opendialog1 добавляем его в список
Stringlist.Add(opendialog1.filename)
При отправке перебрал все имена в списке
for i:=0 to FileList.Count-1 do
TIdAttachment.Create(M1.MessageParts, FileList.Strings[i]);
Блин, а форум огромный получился.....
Спасибо Palladin!!!!!!!!!!!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.061 c