Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   OpenDialog compatible con Android? (https://www.clubdelphi.com/foros/showthread.php?t=89955)

wolfran_hack 09-03-2016 13:32:48

OpenDialog compatible con Android?
 


Según parece OpenDialog no es compatible con android, hay alguna alternativa para cargar archivos? como txt o csv en un listbox?

wolfran_hack 09-03-2016 18:09:13

De momento invente algo asi:

Edit2: Nombre del Archivo
Boton1: Cargar
ListBox1: Lista Final

Código Delphi [-]
procedure TTabbedForm.Button6Click(Sender: TObject);
var
   TextFile : TStringList;
   FileName : string;
begin
if Edit2.Text = '' then
begin
  ShowMessage('Ingrese le nombre del archivo.');
end
else
begin
try
  textFile := TStringList.Create;
  try
  {$IFDEF ANDROID}
     FileName := '/sdcard/'+Edit2.Text;
  {$ENDIF ANDROID}

  if FileExists(FileName) then begin
     textFile.LoadFromFile(FileName); //Carga el archivo en TStringList
     ListBox1.Items.Assign(textFile); //Mueve el TStringList a un ListBox.
  end
  else begin showMessage('Archivo no Existe.');

     //Para crear un nuevo archivo:
     //TextFile.Text := 'Creamos un archivo con este texto.';
     //TextFile.SaveToFile(FileName);

  end;
  finally
     textFile.Free;
  end;
except
  on E : Exception do ShowMessage('ClassError: '+e.ClassName+#13#13+'Message: '+e.Message);
   end;
end;
end;

y el usuario debe ingresar manualmente el nombre del archivo el cual debe estar en la memoria interna del dispositivo.

AgustinOrtu 10-03-2016 03:41:50

A ver, tengo 3 links en mis favoritos, desgraciadamente no he probado ninguno, pero aqui van:

1. FMXExpress - Launch Android Intent File Dialog And Get The Result

2. FMXExpress - File Manager Demo App

3. StackOverflow

cl2raul 08-08-2016 19:19:37

mi aporte
 
yo habia posteado algo parecido, con el componente OpenDialog q no esta disponible en FMX para android...
Ya habia pedido ayuda acerca de esto y no habia mucho que hacer y decidi hacerme algo parecido a OpenDialog de app de otros...

ya se sabe que en FMX cuando es para Android, los componentes de la paleta Dialog, se desabilitan, lo cual me parece una gran estupides y cabrona de Embarcadero al no poner esta opcion, pero bueno al no haber algun amiguete que me de luz yo se la ofresco, puede que tenga fallitos pero se que podeis mejorarla e incluso alguien la puede hacer componente (no me salen los componentes, jajaja, es tarea pendiente)... sin tanta baba adjunto esta todo, y aqui tambien:
Código Delphi [-]
unit OpenDialog;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Layouts, FMX.ListBox,
  System.StrUtils,System.IOUtils;

type
  TForm1 = class(TForm)
    Label1: TLabel;  //para el titulo, alineado Top
    ListBox1: TListBox;  //para mostrar los archivos y directorios y elegirlos, alineado Client
    Layout1: TLayout;  //separador para contener los botones siguientes, alineado Botton
    Button1: TButton;  //este es para ir atras, o sea entramos en un directorio y con este salimos de el hacia el anterior, alineado Left
    Button2: TButton;  //aceptar que encontrastes un fichero y ejecutas lo que quieras, alineado Rigth
    procedure verArchivos(tuDir: String; listado: TStrings);
    function loadDir(listaDir: TStringList):String;
    procedure ListBox1ItemClick(const Sender: TCustomListBox;
      const Item: TListBoxItem);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  //mis variables
  Direccion: TStringList;
  F: TextFile;

implementation

{$R *.fmx}

{ TForm1 }

//esto es para que busque y muestre directorios y los ficheros *.db, si quieres que muestre todo pones *.*
//este codigo es de trucomania
procedure TForm1.verArchivos(tuDir: String; listado: TStrings);
var
  FileSearch: TSearchRec;
  LList: TStringDynArray;
  I: Integer;
  LSearchOption: TSearchOption;
begin
  chDir(tuDir);
  if FindFirst('*.db', faReadOnly + faHidden, FileSearch)=0 then
    repeat
      listado.Add(FileSearch.Name);
    until
      FindNext(FileSearch)<>0;
  FindClose(FileSearch);

  LList:=TDirectory.GetDirectories(tuDir);
  for I:=0 to Length(LList)-1 do
    listado.Add(RightStr(LList[i],Length(LList[i])-Length(tuDir))+'/');
end;

//esta funcion es necesaria y la explicacion esta en el articulo mio de este foro llamado "Dudas con TStringList usando FMX para android"
function TForm1.loadDir(listaDir: TStringList): String;
var
  I: Integer;
begin
  for I:=0 to listaDir.Count-1 do
    begin
      Result:=Result+listaDir[i];
    end;
end;

//este es el boton similar a ir arriba o subir direcctorio o atras de windows
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Label1.Text<>#47 then
    begin
      Direccion.Delete(Direccion.Count-1);
      Label1.Text:=loadDir(Direccion);
      ListBox1.Clear;
      verArchivos(loadDir(Direccion),ListBox1.Items);
      ListBox1.ItemIndex:=-1;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Direccion:=TStringList.Create;
  Direccion.Add(#47);
  //usar la funcion loadDir es una estupidez aqui pero hacia pruebas y asi la deje
  verArchivos(loadDir(Direccion),ListBox1.Items);
  Label1.Text:=#47;
end;

//iportante esta, ya que si usamos onClick del ListBox1, es un desastre por lo que les recomiendo ItemClick 
procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
var
  g:string;
begin
  if (ListBox1.Selected.Text<>'') then
    begin
      g:=ListBox1.Selected.Text;
      Direccion.Add(g);
      ListBox1.Clear;
      Label1.Text:=loadDir(Direccion);
      if (RightStr(g,1)='/') then
        begin
          verArchivos(loadDir(Direccion),ListBox1.Items);
          ListBox1.ItemIndex:=-1;
        end;
    end;
end;

end.

Me gustaria que la mejoraran para que tenga uso general en una Unit o sea adicional la unit y ya esta a trabajar o mejor hacer un componente que nos quite el peso de diseñar como va a quedar la Caja de Dialogo, espero que asi sea, gracias a todos los lectores.

AgustinOrtu 08-08-2016 23:01:38

Muchas gracias por el aporte. Igual, no es que deshabilitan los diálogos porque son cabrones. Los deshabilitaron porque no los implementaron para las plataformas móviles :)


La franja horaria es GMT +2. Ahora son las 22:26:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi