AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kein TOpenDialog für Android?

Ein Thema von Rued · begonnen am 14. Mär 2025 · letzter Beitrag vom 16. Mär 2025
Antwort Antwort
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
89 Beiträge
 
Delphi 12 Athens
 
#1

Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 18:32
Hallo!
Ich hatte aufgrund dieser Ausführungen in der Dokumentation zu DelphiFMX die Hoffnung, dass ich in meine Android-App Open- und SaveDialoge einbauen kann, aber da liege ich wohl falsch.

Jedenfalls wird folgender Code klaglos kompiliert, aber execute exekutiert nichts. Ohne jede Fehlermeldung passiert exakt nichts.
Delphi-Quellcode:
var
SD1:TOpenDialog;
begin
SD1:=TSaveDialog.Create(application);
SD1.InitialDir := TippPfad;
SD1.DefaultExt :='tip';
if SD1.Execute then Memo1.Lines.SavetoFile(SD1.FileName);
SD1.Free;
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.545 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 18:36
Nein, da musst Du Dir selber etwas bauen, wobei die Möglichkeiten, Dateien zu öffnen oder zu speichern auf den mobilen Systemen sowieso relativ begrenzt sind (Standard-Verzeichnisse, wie Documents oder Download, etc).
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
89 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 18:44
Nein, da musst Du Dir selber etwas bauen, wobei die Möglichkeiten, Dateien zu öffnen oder zu speichern auf den mobilen Systemen sowieso relativ begrenzt sind (Standard-Verzeichnisse, wie Documents oder Download, etc).
Okay - danke Harry!

Gruß
Rüd
Rüdiger Droste
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.163 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 19:48
Oder Du musst mal nach SAF - StorageAccessFrameWork - ScopedStorage googlen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.862 Beiträge
 
Delphi 12 Athens
 
#5

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 20:48
Das ist ein Beispiel mit einem Button und einem TImage, das ein ausgewähltes Bild anzeigt:
Delphi-Quellcode:
uses
  Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.JNI.Net,
  Androidapi.JNI.App, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, System.Messaging;

procedure OpenAndroidFileDialog;
var
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setType(StringToJString('*/*')); // image/* für Bilder
  Intent.setAction(TJIntent.JavaClass.ACTION_GET_CONTENT);
  TAndroidHelper.Activity.startActivityForResult(Intent, 0);
end;

procedure TForm286.FormCreate(Sender: TObject);
begin
  TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
end;

function OpenFileViaContentResolver(Uri: Jnet_Uri): JInputStream;
begin
  Result := nil;
  if Uri <> nil then
  begin
    Result := TAndroidHelper.Context.getContentResolver.openInputStream(Uri);
    if Result = nil then
      ShowMessage('Konnte die Datei nicht öffnen.');
  end;
end;

function JInputStreamToMemoryStream(InputStream: JInputStream): TMemoryStream;
var
  Buffer: TJavaArray<Byte>;
  BytesRead: Integer;
begin
  Result := TMemoryStream.Create;

  Buffer := TJavaArray<Byte>.Create(1024);
  repeat
    BytesRead := InputStream.read(Buffer, 0, Buffer.Length);
    if BytesRead > 0 then
      Result.Write(Buffer.Data^, BytesRead);
  until BytesRead <= 0;

  Result.Position := 0;
end;

procedure TForm286.ShowImageFromUri(Uri: Jnet_Uri);
var
  InputStream: JInputStream;
  Bitmap: TBitmap;
  BitmapStream: TMemoryStream;
begin
  InputStream := OpenFileViaContentResolver(Uri);

  if InputStream <> nil then
  begin
    BitmapStream := JInputStreamToMemoryStream(InputStream);

    try
      Bitmap := TBitmap.Create;
      try
        Bitmap.LoadFromStream(BitmapStream);
        Image1.Bitmap.Assign(Bitmap);
      finally
        Bitmap.Free;
      end;
    finally
      BitmapStream.Free;
    end;
  end
  else
    ShowMessage('Fehler: Bild konnte nicht geöffnet werden.');
end;

procedure TForm286.HandleActivityMessage(const Sender: TObject; const M: TMessage);
var
  IntentData: JIntent;
begin
  if M is TMessageResultNotification then
  begin
    if TMessageResultNotification(M).ResultCode = TJActivity.JavaClass.RESULT_OK then
    begin
      IntentData := JIntent(TMessageResultNotification(M).Value);
      if Assigned(IntentData) then
        ShowImageFromUri(IntentData.getData);
    end;
  end;
end;

procedure TForm286.Button1Click(Sender: TObject);
begin
  OpenAndroidFileDialog;
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
89 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kein TOpenDialog für Android?

  Alt 14. Mär 2025, 21:12
Danke Sebastian, das schaue ich mir morgen mal an.
Rüdiger Droste
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz