Rusland Опубликовано 25 апреля, 2016 Поделиться Опубликовано 25 апреля, 2016 (изменено) Мне просто не понятно почему делается image1.Bitmap.LoadFromStream(picture); а не image1.Bitmap.Assign(picture); ? Покажите код передачи фото в иконку маркера. Изменено 25 апреля, 2016 пользователем Rusland Ссылка на комментарий
AndroidHalfNoob Опубликовано 25 апреля, 2016 Автор Поделиться Опубликовано 25 апреля, 2016 21 минуту назад, Rusland сказал: Мне просто не понятно почему делается image1.Bitmap.LoadFromStream(picture); а не image1.Bitmap.Assign(picture); ? Покажите код передачи фото в иконку маркера. Потому что image1.Bitmap.Assign(picture); выдает ошибку не соответствия типов :[DCC Error] Unit1.pas(54): E2010 Incompatible types: 'TPersistent' and 'TMemoryStream' Ссылка на комментарий
Rusland Опубликовано 25 апреля, 2016 Поделиться Опубликовано 25 апреля, 2016 39 минут назад, AndroidHalfNoob сказал: Потому что image1.Bitmap.Assign(picture); выдает ошибку не соответствия типов :[DCC Error] Unit1.pas(54): E2010 Incompatible types: 'TPersistent' and 'TMemoryStream' Что-то не сходится. Вы же писали код, в котором picture:=TBitmap.Create; а значит picture не может быть типа TMemoryStream! Поэтому я и спросил какого типа picture. Ссылка на комментарий
AndroidHalfNoob Опубликовано 25 апреля, 2016 Автор Поделиться Опубликовано 25 апреля, 2016 Вот полный текст процедуры Цитата var mapCenter,Position: TMapCoordinate; tapDescr: TMapMarkerDescriptor; tapMarker:TMapMarker; x:integer; risunok:TBitmap; ms:tmemorystream; begin for Marker in FMarkers do begin Marker.Remove; Marker.Free; end; FMarkers.Clear; MyConnection1.Connected:=true; MyTable1.Active:=true; MyTable1.First; for x := 1 to MyTable1.RecordCount do begin begin ms:=tmemorystream.Create; idhttp1.Get('http://сайт/images/Uchastniki/123.png',ms); end; risunok:=tbitmap.create; risunok.LoadFromStream(ms); Position:=TMapCoordinate.Create(MyTable1.FieldByName('Koord1').AsFloat,MyTable1.FieldByName('Koord2').AsFloat); tapDescr := TMapMarkerDescriptor.Create(Position, MyTable1.FieldByName('Nic').AsString); tapDescr.Icon:=risunok; tapDescr.Visible:=true; Marker:=UchastnikiMap.AddMarker(tapDescr); FMarkers.Add(Marker); ms.Free; risunok.free; MyTable1.Next; end; С добавлением разобрался. причем метод assign не работает. выдает ошибку. Работает именно этот вариант tapDescr.Icon:=risunok; Ссылка на комментарий
AndroidHalfNoob Опубликовано 26 апреля, 2016 Автор Поделиться Опубликовано 26 апреля, 2016 Пробую отправить фото на сервер Цитата procedure TForm1.Button2Click(Sender: TObject); var ms:tmemorystream; picture: TBitmap; begin picture:=TBitmap.Create; picture.Assign(Image1.Bitmap); ms:=tmemorystream.Create; picture.SaveToStream(ms); IdHTTP1.Put('http://сайт/images/Uchastniki/'+Edit1.Text+'.jpg',ms); ms.Free;picture.Free; end; Выдается ошибка HTTP/1.1 405 Not Allowed Хотя у хостинга для папки Uchastniki разрешения 777 поставил. Ссылка на комментарий
Rusland Опубликовано 26 апреля, 2016 Поделиться Опубликовано 26 апреля, 2016 (изменено) Цитата Пробую отправить фото на сервер procedure TForm1.Button2Click(Sender: TObject); var ms:tmemorystream; picture: TBitmap; begin picture:=TBitmap.Create; picture.Assign(Image1.Bitmap); ms:=tmemorystream.Create; picture.SaveToStream(ms); IdHTTP1.Put('http://сайт/images/Uchastniki/'+Edit1.Text+'.jpg',ms); ms.Free;picture.Free; end; Выдается ошибка HTTP/1.1 405 Not Allowed Хотя у хостинга для папки Uchastniki разрешения 777 поставил. По поводу 405 вики говорит: "405 Method Not Allowed — указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой." Посмотрите что возвращается в заголовке. По поводу кода... непонятно зачем дополнительно использовать picture: TBitmap; Можно же использовать сразу Image1: procedure TForm1.Button2Click(Sender: TObject); var ms:tmemorystream; begin ms:=tmemorystream.Create; Image1.Bitmap.SaveToStream(ms); IdHTTP1.Put('http://сайт/images/Uchastniki/'+Edit1.Text+'.jpg',ms); ms.Free; end; Изменено 26 апреля, 2016 пользователем Rusland Ссылка на комментарий
AndroidHalfNoob Опубликовано 26 апреля, 2016 Автор Поделиться Опубликовано 26 апреля, 2016 как посмотреть, что в заголовке? Ссылка на комментарий
AndroidHalfNoob Опубликовано 27 апреля, 2016 Автор Поделиться Опубликовано 27 апреля, 2016 (изменено) ни ужели ни у кого кода нет? вы же как-то сохраняете картинки? кучу примеров пересмотрел. или не рабочий или версия для отправки файла с жесткого диска компа на ФТП. Там другие переменные применяются. Функция AddFile, но на телефоне это не работает. Через IDHTTP выдает ошибку 405 а через IDFTP выдает ошибку, что файл или директория отсутствуют Изменено 27 апреля, 2016 пользователем AndroidHalfNoob Ссылка на комментарий
krapotkin Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 (изменено) код натырил в инете 15 сек procedure TForm1.SendFile; var Stream: TIdMultipartFormDataStream; begin Stream := TIdMultipartFormDataStream.Create; try Stream.AddFile(playerName, uploadFileName, 'multipart/form-data'); IdHTTP1.HandleRedirects := True; Memo1.text:=IdHTTP1.Post( URL, Stream ); finally Stream.Free; end; end; Изменено 27 апреля, 2016 пользователем krapotkin Ссылка на комментарий
krapotkin Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 если тебе FTP говорит, что директория отсутствует, то может и нет ее? Ссылка на комментарий
AndroidHalfNoob Опубликовано 27 апреля, 2016 Автор Поделиться Опубликовано 27 апреля, 2016 (изменено) 4 минуты назад, krapotkin сказал: если тебе FTP говорит, что директория отсутствует, то может и нет ее? и директория и файл есть. с правами 777 этот пример я тоже видел. тут мне не понятны параметры Цитата Stream.AddFile(playerName, uploadFileName, 'multipart/form-data'); Изменено 27 апреля, 2016 пользователем AndroidHalfNoob Ссылка на комментарий
krapotkin Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 тогда вот подробнее есть http://devdelphi.ru/?p=129 в любом случае на том конце кто-то этот файл должен принять если никто, тогда только FTP Ссылка на комментарий
Модераторы Равиль Зарипов (ZuBy) Опубликовано 27 апреля, 2016 Модераторы Поделиться Опубликовано 27 апреля, 2016 41 минуту назад, AndroidHalfNoob сказал: ни ужели ни у кого кода нет? вы же как-то сохраняете картинки? кучу примеров пересмотрел. или не рабочий или версия для отправки файла с жесткого диска компа на ФТП. Там другие переменные применяются. Функция AddFile, но на телефоне это не работает. Через IDHTTP выдает ошибку 405 а через IDFTP выдает ошибку, что файл или директория отсутствуют у меня код примерно такой же как дал krapotkin, но сохранение делает PHP Ссылка на комментарий
AndroidHalfNoob Опубликовано 27 апреля, 2016 Автор Поделиться Опубликовано 27 апреля, 2016 (изменено) а вас не смущает параметры функции MultiData.addFile? они все строковые. как мне передать туда поток изображения? мне кажется данная функция сюда не подходит Изменено 27 апреля, 2016 пользователем AndroidHalfNoob Ссылка на комментарий
Модераторы Равиль Зарипов (ZuBy) Опубликовано 27 апреля, 2016 Модераторы Поделиться Опубликовано 27 апреля, 2016 Только что, AndroidHalfNoob сказал: а вас не смущает параметры функции MultiData.addFile? они все строковые. как мне передать туда потом изображения? мне кажется данная функция сюда не подходит если у вас картинка в Image нужно сохранить в файл и этот путь указать Ссылка на комментарий
AndroidHalfNoob Опубликовано 27 апреля, 2016 Автор Поделиться Опубликовано 27 апреля, 2016 1 минуту назад, ZuBy сказал: если у вас картинка в Image нужно сохранить в файл и этот путь указать Да но получается надо картинку сохранять на устройство во внутренную память телефона а потом от туда уже ее отправлять. Думал сделать легче: сразу из компонента сохранять. А так занимать память на телефоне ну и сразу возникает проблема.... вычисления места где будет сохраняться фото на телефоне. Ссылка на комментарий
Модераторы Равиль Зарипов (ZuBy) Опубликовано 27 апреля, 2016 Модераторы Поделиться Опубликовано 27 апреля, 2016 1 минуту назад, AndroidHalfNoob сказал: Да но получается надо картинку сохранять на устройство во внутренную память телефона а потом от туда уже ее отправлять. Думал сделать легче: сразу из компонента сохранять. А так занимать память на телефоне ну и сразу возникает проблема.... вычисления места где будет сохраняться фото на телефоне. нет другого способа, да и проблем нет никаких. сохранил-отправил-удалил а сохранять можно в Temppath или DocumentsPath Kitty 1 Ссылка на комментарий
Vitaldj Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 Я закачиваю через php скрипт, который лежит на сервере. код для delphi: var par, path_windows:string; st:Tidmultipartformdatastream; RS: TStringStream ; begin path_windows:=extractfilepath(paramstr(0)); RS := TStringStream.Create(''); st:=Tidmultipartformdatastream.Create; par:= GetMIMETypeFromFile(path_windows+'\'+ 'имя файла') ; try st.AddFile( 'uploadfile',path_windows+'\'+имя файла' , par ); except messagedlg('Произошла ошибка. Файл архива не найден. При повторении ошибки, обратитесь к администратору.',mterror,[mbYes],0) ; exit; end; IdHTTP1.Request.ContentType := st.RequestContentType; try IdHTTP1.Post( 'http://'+имя сайта+'/директория на сайте/uploadfile3.php', st , RS); // uploadfile3.php - имя скрипта php except messagedlg('Произошла ошибка. Нет соединения с сервером. Это может быть вследствии его отсутствия или при наличии прокси сервера, неверная настройка программы.',mterror,[mbYes],0) ; exit; end; if RS.DataString = 'ok' и обработка Код для php: <?php if ( copy($_FILES['uploadfile']['tmp_name'],"uploads2/".basename($_FILES['uploadfile']['name']))) print "ok" ; else print "no" ; ?> Rusland и rareMax 2 Ссылка на комментарий
AndroidHalfNoob Опубликовано 27 апреля, 2016 Автор Поделиться Опубликовано 27 апреля, 2016 3 часа назад, Vitaldj сказал: Я закачиваю через php скрипт, который лежит на сервере. код для delphi: var par, path_windows:string; st:Tidmultipartformdatastream; RS: TStringStream ; begin path_windows:=extractfilepath(paramstr(0)); RS := TStringStream.Create(''); st:=Tidmultipartformdatastream.Create; par:= GetMIMETypeFromFile(path_windows+'\'+ 'имя файла') ; try st.AddFile( 'uploadfile',path_windows+'\'+имя файла' , par ); except messagedlg('Произошла ошибка. Файл архива не найден. При повторении ошибки, обратитесь к администратору.',mterror,[mbYes],0) ; exit; end; IdHTTP1.Request.ContentType := st.RequestContentType; try IdHTTP1.Post( 'http://'+имя сайта+'/директория на сайте/uploadfile3.php', st , RS); // uploadfile3.php - имя скрипта php except messagedlg('Произошла ошибка. Нет соединения с сервером. Это может быть вследствии его отсутствия или при наличии прокси сервера, неверная настройка программы.',mterror,[mbYes],0) ; exit; end; if RS.DataString = 'ok' и обработка Код для php: <?php if ( copy($_FILES['uploadfile']['tmp_name'],"uploads2/".basename($_FILES['uploadfile']['name']))) print "ok" ; else print "no" ; ?> я так понял extractfilepath(paramstr(0)); это версия для десктопа на телефоне будет работать? и как разместить скрипт? на сервере создать файл с расширением .php? Ссылка на комментарий
Vitaldj Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 18 минут назад, AndroidHalfNoob сказал: я так понял extractfilepath(paramstr(0)); это версия для десктопа на телефоне будет работать? и как разместить скрипт? на сервере создать файл с расширением .php? На телефоне? Вроде должно. Эта функция покажет путь, откуда вы запустили программу. А директорию документов, допишите ручками. Про php, да, просто создайте такой файл с расширением php. И рядом директорию, куда будите закачивать. У меня закачивает в директорию uploads2 Ссылка на комментарий
AndroidHalfNoob Опубликовано 27 апреля, 2016 Автор Поделиться Опубликовано 27 апреля, 2016 6 минут назад, Vitaldj сказал: На телефоне? Вроде должно. Эта функция покажет путь, откуда вы запустили программу. А директорию документов, допишите ручками. Про php, да, просто создайте такой файл с расширением php. И рядом директорию, куда будите закачивать. У меня закачивает в директорию uploads2 ок. буду пробовать. только вот с путями на телефоне проблема. ни разу не работал с физической памятью телефона. я так понял что путь может быть любой в зависимости от марки телефона Ссылка на комментарий
rareMax Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 12 минуты назад, AndroidHalfNoob сказал: ок. буду пробовать. только вот с путями на телефоне проблема. ни разу не работал с физической памятью телефона. я так понял что путь может быть любой в зависимости от марки телефона uses + System.IOUtils; Ссылка на комментарий
Vitaldj Опубликовано 27 апреля, 2016 Поделиться Опубликовано 27 апреля, 2016 (изменено) На знаю как в андроид (нет андроида), но в iOs доступна только директория documents , которая своя для каждого приложения. Вот пример, как я прописывал путь, для база данных (с картинками будет тоже самое) Путь = TPath.Combine(TPath.GetDocumentsPath, 'shoplist.s3db'); этот код рабочий и для андроида. Изменено 27 апреля, 2016 пользователем Vitaldj Ссылка на комментарий
AndroidHalfNoob Опубликовано 28 апреля, 2016 Автор Поделиться Опубликовано 28 апреля, 2016 не работает на андройде. компилятор ошибку выдает. Ссылка на комментарий
krapotkin Опубликовано 28 апреля, 2016 Поделиться Опубликовано 28 апреля, 2016 секретную, небось Vitaldj, rareMax и Pax Beach 3 Ссылка на комментарий
Рекомендуемые сообщения