yooSee
-
Постов
33 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Сообщения, опубликованные yooSee
-
-
В 12.02.2019 в 18:05, Barbanel сказал:
В поставке 10.3 есть примеры работы с правами.
Один из них можно найти по такому пути:
C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Media\PhotoEditorDemoЧто интересно, этот же код можно без изменений использовать под любой другой платформой.
На других платформах приложение будет считать что ему выдали все права, и соответственно запускать все коллбеки без каких-либо вопросов.Благодарю!
-
В 12.02.2019 в 00:26, Евгений Корепов сказал:
Для полноценной работы вам нужно добавить параметры в вызов (иначе вы не узнаете дал ли пользователь разрешение или нет)
PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], nil);
Вот так:
PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], PermissionRequestResult, ExplainReason);
PermissionRequestResult - это обработка ответа пользователя
procedure TForm.PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>); begin if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then begin // Ура! Пользователь дал разрешение на оба наших запроса. Выставялем глобальные флаги (к примеру) которые сигнализируют что можно читать/писать карту памти end else TDialogService.ShowMessage('Не возможно продолжить работу, требуемые разрешения не получены') end;
И ExplainReason - если пользователь сдуру не дал разрешение, то вам нужно объяснить ему что без этого приложение работать не будет.
procedure TForm.ExplainReason(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc); begin TDialogService.ShowMessage('Приложению нужен доступ к карте памяти для таких то целей, иначе приложение не сможет работать. Зайдите в настроки Андроид и дайте разрешение на доступ', procedure(const AResult: TModalResult) begin APostRationaleProc; end) end;
Спасибо за дополнение!
-
Всем привет, вот и я решил внести свою лепту в жизнь форума и сегодня мы разберемся с разрешениями на Delphi Rio под Андроид.
Для примера мы будем использовать разрешения на чтение и запись с памяти устройства, для начала в нашем проекте выставим в Delphi>Project>Application>Uses Permissions галочки на Read External Storage и Write External Storage.
в uses проекта добавьте следующее
uses System.Permissions, Androidapi.Jni.Os, Androidapi.Helpers,
далее создадим переменные
var Form: TForm; .... FPermissionWrite: string; FPermissionRead: string;
в Form.Create добавим следующий код
procedure TForm.FormCreate(Sender: TObject); begin FPermissionWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE); //Значение на запись FPermissionRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE); //Значение на чтение end;
и теперь сам не посредственно запрос на подтверждение наших прав
procedure TForm.Button1Click(Sender: TObject); begin PermissionsService.RequestPermissions ([FPermissionWrite, FPermissionRead], nil); end; //это вызовет окно с запросом разрешения прав
ну и для проверки бросим на форму TMemo и пару TButton , в них реализуем сохранение и чтение из файла с памяти устройства
procedure TForm.Button1Click(Sender: TObject); begin Memo1.Lines.LoadFromFile(TPath.Combine(TPath.GetSharedDocumentsPath, 'test.txt')); end; procedure TForm.Button2Click(Sender: TObject); begin Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetSharedDocumentsPath, 'test.txt')); end;
P.S. Напоминаю что для работы TPath нам понадобится подключить в Uses
uses System.system.ioutils;
Надеюсь материал будет полезен!
-
58 минут назад, x11 сказал:
с горем пополам скачал OrangeUI 1.75
а есть нормальные файломопойки, куда бы перевыложить?
в телеге ссылка на яд диск
-
Русская локализация - (может кому надо), ложить по пути \OrangeUI 1.75\OrangeUIDesign\Source
-
-
11 минут назад, x11 сказал:
не нужно было это публиковать в явном виде уже закрыли, видать эту лазейку
Если кто скачать 1,75, перевыложите, пожалуйста
Да это сайт их лагает, у меня 1.75 бетка есть
-
Так же в телеграмм создал группу и канал посвященный OrangeUI , всем кому интересен данный компонент добро пожаловать @orangeui , будем разбираться вместе
Канал - @orangeuichannel
Группа - @orangeui
-
помогло, спасибо! honor 8 - Android 8.0
-
2 часа назад, krapotkin сказал:
если у TText просто задать Align=top и AutoSize, то и размер посчитается автоматически
а когда размер подсчитается, размер контейнера тоже можно подсчитать
а если контейнер - скроллбокс то вроде и не нужно...
спасибо!
-
Привет Всем уважаемые!
Пытаюсь сделать растягивание по содержимому компонента. Как это реализовано в мессенджерах типа WhatsApp если большой текст то растягивает (выделяется) по содержимому большое поле, если короткий то малое.
Text2.Text := Memo1.Lines.Strings[4]; text2.Height := canvas.TextHeight(Text2.Text); //по высоте строки меняется т.к. там и есть одна строка в TText просто переносится WordWrap визуально. text2.Height:=canvas.TextWidth(text2.Text); // - так чушь
Как это вообще реализовано кто нибудь сталкивался?
-
28 минут назад, Роман Фил сказал:
begin AItem := ksTableView1.Items.AddItem('Новая строка', Memo1.Lines.Strings, 'Подробнее', atMore); AItem.Image.Bitmap.LoadFromUrl(Memo1.Lines.Strings); end; ksTableView1.EndUpdate; end)
так создаются и грузятся но первый список если нажать без картинок. нажимаю второй раз загружаются в старый список (уже созданный картинки) в новом нету и так далее
дополню при нажатии на строку картинка появляется. как будто обновляется
TThread.Synchronize(TThread.CurrentThread,
procedure
var
ICount: Integer;
AItem: TksTableViewItem;
i: Integer;
begin
Memo1.Text := AResult;
ksTableView1.BeginUpdate;
application.ProcessMessages;
try
for i := 0 to Memo1.Lines.Count - 1 do
beginAItem := ksTableView1.Items.AddItem('Новая строка',
Memo1.Lines.Strings, 'Подробнее', atMore);
AItem.Image.Bitmap.LoadFromUrl(Memo1.Lines.Strings);end;
finally
ksTableView1.EndUpdate;
end; в таком варианте почему о не обновляется -
begin AItem := ksTableView1.Items.AddItem('Новая строка', Memo1.Lines.Strings, 'Подробнее', atMore); AItem.Image.Bitmap.LoadFromUrl(Memo1.Lines.Strings); end; ksTableView1.EndUpdate; end)
так создаются и грузятся но первый список если нажать без картинок. нажимаю второй раз загружаются в старый список (уже созданный картинки) в новом нету и так далее
-
Привет ребят! Помогите кто знает, попытаюсь доходчиво объяснить -
имеется набор компонентов KernowSoftwareFMX - в нем использую TksTableView для вывода данных с Tmemo, в нем так же есть Image.
В Tmemo с сервера грузится файл txt внутри которого строки с ссылками на изображения вида http://бла-бла/1.png
Для загрузки использую FMX.Features.Bitmap.Helpers.pas - позволяет по прямой ссылке загружать изображение в TImage.
что пытаюсь сделать?
Нужно наполнять список TksTableView с Memo содержащий ссылки и в строках TksTableView - они же ListItem тоже самое что в ListView и загружать в image каждой строки картинки по ссылкам memo.
AItem.Image.Bitmap := Image4.MultiResBitmap.Bitmaps[1].LoadFromUrl(Memo1.Lines.Strings[i]); - так ругается [DCC Error] untMain.pas(92): E2010 Incompatible types: 'TBitmap' and 'procedure, untyped pointer or untyped parameter' AItem.Image.Bitmap := Image4.Bitmap.LoadFromUrl(Memo1.Lines.Strings[i]); - так тожн не работает
Глюк в том что первым делом создаются строки . а потом грузятся по очереди картинки в Image4.
Как заставить подгружать картинки в TksTableView?
Как ожидать хавершения загрузки каждой картинки в Image4 и после создавать AItem.Image.Bitmap?
-
@rareMax Интересно есть по данному компоненту справка? Не нахожу в гугле.Сылку что вы оставили не актуальна более
-
Всем привет пытаюсь грузить файлы изображения с телефона Android на сервер методом post запроса. Для этого один из параметров запроса должен содержать полный путь к файлу. В ActionList есть стандартная опция TakePhotoFromLibraryAction - к с нее выдрать путь??? Куда он ей передается и передается ли вообще? я и справки толком не нахожу или я слепой?
imgfile.Text:=TakePhotoFromLibraryAction1.????
-
10 часов назад, Rusland сказал:
Приложение свернуто или закрыто.
Отправляю один пуш, на телефоне в шторке появляется уведомление.
Отправляю еще один, появляется второе уведомление и так далее. Сколько пушей, столько и уведомлений.
Как сделать чтобы все уведомления собирались в одном уведомлении в шторке? (как делают telegram, whatsapp и т. п.)
Не знаю есть ли такое решение в намерениях но как альтернатива - копии в переменную количество созданных уведомлений , при появлении дубликата гаси ранее созданное и в заголовке нового уведомления выводи общее количество. В примерах где то видел подобное.
Если закрыто апк поднимай сервер
-
Привет ребят, созрел такой вопрос который меня мучает ! Вобщем пытаюсь загрузить картинку по прямой слыке с сервера. Картинка не грузится, не сохраняется не отображается.
Конечная платформа - Андроид. Пишу на Delphi xe 10 seatle.
Что я делаю? при нажатии на сам компонент TImage (созданный динамически), должна грузится картинка по адресу преждевременно записанное в hint (TImage) при создании вида (http://блаблабла.jpg)
Раньше код ниже работал сейчас нет не пойму что не так. Почему стал ковырять? потому что форма встает колом при загрузке изображений.
var s: string; fs: TFileStream; begin fs := TFileStream.Create(tpath.Combine(tpath.GetDownloadsPath, 'load.jpg'), fmCreate); NetHTTPClient1.Get((Sender as TImage).Hint, fs); fs.Free; (Sender as TImage).MultiResBitmap.Bitmaps[1].LoadFromFile (tpath.Combine(tpath.GetDownloadsPath, 'load.jpg'));
подключал еще pas нашел на этом форуме FMX.Features.Bitmap.Helpers.pas
(Sender as TImage).MultiResBitmap.Bitmaps[1].LoadFromUrl ((Sender as TImage).Hint);
как проще сделать посоветуете чтоб и грузилось и форма не висла?
-
В 16.06.2017 в 01:49, sinuke сказал:
не надо удалять/пересоздавать. просто нужно контролировать эти добавляющиеся строки в Memo. для этого можно использовать свойства Tag и TagString чтобы знать, какой компонент соответствует какой строке.
спасибо большое все помогло)
-
32 минуты назад, dnekrasov сказал:
TCustomMemo.CaretPosition.Line
спасибо дружище)
-
ПРивет, есть ли возможность узнать как то номер сроки в memo на delphi FMX в memo при нажатии на текст в поле memo?
для windows на vlc можно memo.CaretPos.Y либо через WinAPi заголовки. Как такое делать в FireMonkey FMX для андроид ума не приложу. Может кто делал, поделится опытом? -
30 минут назад, sinuke сказал:
я так понял, что ваш код выдает следующее:
а надо:
как я и говорил, нужно просто указывать координату вновь создаваемому компоненту:
var i: integer; p: Integer; txt: TText; begin p := 0; for i := Memo1.Lines.Count - 1 downto 0 do begin txt := TText.Create(self); txt.Parent := Form2; txt.Position.Y := p + 1; txt.Align := TALignLayout.Top; txt.Text := Memo1.Lines.Strings[i]; p := Round(p + txt.Height); end; end;
а если добавилась строка в memo то все компоненты удалять и пересоздавать с новым или проверять на наличие строк и создавать не достающие7 может есть еще какие варианты?
-
18 минут назад, sinuke сказал:
я так понял, что ваш код выдает следующее:
а надо:
как я и говорил, нужно просто указывать координату вновь создаваемому компоненту:
var i: integer; p: Integer; txt: TText; begin p := 0; for i := Memo1.Lines.Count - 1 downto 0 do begin txt := TText.Create(self); txt.Parent := Form2; txt.Position.Y := p + 1; txt.Align := TALignLayout.Top; txt.Text := Memo1.Lines.Strings[i]; p := Round(p + txt.Height); end; end;
Спасибо большое помог)
-
46 минут назад, sinuke сказал:
если я правильно понял проблему, то надо явно указывать координату для компонента, желательно чтобы она была "координата предыдущего + высота предыдущего + 1"
не кажется не в этом дело, теряется не пойму где. если делать так то все адекватно выходит.
var i: integer; begin for i := memo1.Lines.Count-1 downto 0 do begin memo2.Lines.Add(memo1.Lines.Strings[i]); end; end;
если делат атк к примеру то выведет сначала последний потом все по порядку, в чем затуп?
var i: integer; txt: TText; begin for i := Memo1.Lines.Count - 1 downto 0 do begin txt := TText.Create(self); txt.Parent := Form2; txt.Align := TALignLayout.Top; txt.Text := Memo1.Lines.Strings[i]; end; end;
Как правильно отправлять файлы через ACTION_SEND Android Api >26 Delphi FMX
в Использование стандартных приложений
Опубликовано
Привет форумчане, вопрос стоит в следующем.
На телефоне создается zip архив и его нужно передать через мессенджер "WhatsApp" используя намерения делфи.
как было раньше до Api 26
сейчас нужно использовать FileProvider и я сделал следующее:
В манифесте проекта прописано -
fileprovider.xml создан и добавлен в проект с содержимым
в данный момент не пойму как преобразовать данную строку в запрос Intent? Intent.setDataAndType .... ? Где описывается FileProvider ? что в URI?