Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX'de Filedialog kullanımı
#1
Merhaba;


Masaüstü için bir projem var fakat FMX'de TFiledialog yok. 
Amacım kullanıcının seçtiği klasöre excel veya txt olarak herhangi bir kayıt yapmak. 
Nette Tfiledialog yerine kullanabileceğim bir kod buldum fakat  FolderDialog.Show(Handle); kısmında derleme sırasında aşağıdaki hatayı alıyorum. Çözüm konusunda nasıl bir yol izlemeliyim?


[dcc32 Error] Main.pas(763): E2010 Incompatible types: 'HWND' and 'TWindowHandle'
[dcc32 Error] Main.pas(770): E2003 Undeclared identifier: 'ConfigPathEdit'
[dcc32 Error] Main.pas(770): E2066 Missing operator or semicolon
[dcc32 Error] Main.pas(770): E2014 Statement expected, but expression of type 'PWideChar' found
[dcc32 Error] Main.pas(786): E2003 Undeclared identifier: 'FDConnectionServer'
[dcc32 Error] Main.pas(799): E2029 '.' expected but ';' found
[dcc32 Fatal Error] BGConvert.dpr(6): F2063 Could not compile used unit 'Main.pas'



procedure TForm1.FileDialogAdress(Sender: TObject);
var
  FolderDialog: IFileDialog;
  Hr: HRESULT;
  IResult: IShellItem;
  FileName: PChar;
  Settings: DWORD;
begin
  if Win32MajorVersion >= 6 then
  begin
    Hr := CoCreateInstance(CLSID_FileOpenDialog, Nil, CLSCTX_INPROC_SERVER, IFileDialog, FolderDialog);
    if Hr = S_OK then
    begin
      FolderDialog.GetOptions(Settings);
      FolderDialog.SetOptions(Settings or FOS_PICKFOLDERS);
      FolderDialog.GetOptions(Settings);
      FolderDialog.SetOptions(Settings or FOS_FORCEFILESYSTEM);
      FolderDialog.SetOkButtonLabel(PChar('Select'));
      FolderDialog.SetTitle(PChar('Select a Directory'));
      Hr := FolderDialog.Show(Handle);
      if Hr = S_OK then
      begin
        Hr := FolderDialog.GetResult(IResult);
        if Hr = S_OK then
        begin
          IResult.GetDisplayName(SIGDN_FILESYSPATH, FileName);
          ConfigPathEdit.Text := FileName;
        end;
      end;
    end;
  end;
end;
Cevapla
#2
(31-12-2019, Saat: 02:57)Kerembacioglu Adlı Kullanıcıdan Alıntı: Merhaba;


Masaüstü için bir projem var fakat FMX'de TFiledialog yok. 
Amacım kullanıcının seçtiği klasöre excel veya txt olarak herhangi bir kayıt yapmak. 
Nette Tfiledialog yerine kullanabileceğim bir kod buldum fakat  FolderDialog.Show(Handle); kısmında derleme sırasında aşağıdaki hatayı alıyorum. Çözüm konusunda nasıl bir yol izlemeliyim?


[dcc32 Error] Main.pas(763): E2010 Incompatible types: 'HWND' and 'TWindowHandle'
[dcc32 Error] Main.pas(770): E2003 Undeclared identifier: 'ConfigPathEdit'
[dcc32 Error] Main.pas(770): E2066 Missing operator or semicolon
[dcc32 Error] Main.pas(770): E2014 Statement expected, but expression of type 'PWideChar' found
[dcc32 Error] Main.pas(786): E2003 Undeclared identifier: 'FDConnectionServer'
[dcc32 Error] Main.pas(799): E2029 '.' expected but ';' found
[dcc32 Fatal Error] BGConvert.dpr(6): F2063 Could not compile used unit 'Main.pas'



procedure TForm1.FileDialogAdress(Sender: TObject);
var
  FolderDialog: IFileDialog;
  Hr: HRESULT;
  IResult: IShellItem;
  FileName: PChar;
  Settings: DWORD;
begin
  if Win32MajorVersion >= 6 then
  begin
    Hr := CoCreateInstance(CLSID_FileOpenDialog, Nil, CLSCTX_INPROC_SERVER, IFileDialog, FolderDialog);
    if Hr = S_OK then
    begin
      FolderDialog.GetOptions(Settings);
      FolderDialog.SetOptions(Settings or FOS_PICKFOLDERS);
      FolderDialog.GetOptions(Settings);
      FolderDialog.SetOptions(Settings or FOS_FORCEFILESYSTEM);
      FolderDialog.SetOkButtonLabel(PChar('Select'));
      FolderDialog.SetTitle(PChar('Select a Directory'));
      Hr := FolderDialog.Show(Handle);
      if Hr = S_OK then
      begin
        Hr := FolderDialog.GetResult(IResult);
        if Hr = S_OK then
        begin
          IResult.GetDisplayName(SIGDN_FILESYSPATH, FileName);
          ConfigPathEdit.Text := FileName;
        end;
      end;
    end;
  end;
end;

Merhabalar,

1.
var
secilenDizin:string;
begin
       if SelectDirectory('Lütfen dizin seçin', secilenDizin, secilenDizin) then
               ShowMessage(secilenDizin);


2.


uses ShlObj, ActiveX;

function KlasorSec: String;
var
 FileDialog: IFileDialog;
 hr: HRESULT;
 IResult: IShellItem;
 initfldr:ishellitem;
 FileName: PWideChar;
 Settings: Cardinal;
 Title: String;
begin
 hr := CoCreateInstance (CLSID_FileOpenDialog,nil,CLSCTX_INPROC_SERVER,IFileDialog, FileDialog);
 if hr = S_OK then
 begin
   FileDialog.GetOptions(Settings);
   Settings := Settings or FOS_PICKFOLDERS or FOS_FORCEFILESYSTEM;
   FileDialog.SetOptions(Settings);
   FileDialog.SetOkButtonLabel('Klasör Seç');
    Title := 'Dizin seçimi';
   FileDialog.SetTitle(PWideChar(Title));
   hr := FileDialog.Show(0);
   if hr = S_OK then
   begin
     hr := FileDialog.GetResult(IResult);
     if hr = S_OK then
     begin
       IResult.GetDisplayName(SIGDN_FILESYSPATH, FileName);
       Result := FileName;
     end;
   end;
 end;
end;

Kullanımı;
Edit1.Text:=KlasorSec;

FMX hiç kullanmadım.

Umarım işinize yarar.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
Merhaba, 
Paylaşmış olduğunuz kodlar Win API bağımlı olduğu için mobil platformda çalışmayacaktır.
Daha önce native kodlarla ve alternatif uygulamalarla yapılmış bir kaç örnek var. 
1 - Firemonkey External File Viewer. Detaylı bilgi: File Viewer (Android ve iOS platformları içindir)
2 - FireMonkey Android - Open Dialog (Yalnızca Android Platformu içindir)
3 - Android için dosya yöneticisi (Yalnızca Android Platformu içindir)
Cevapla
#4
(31-12-2019, Saat: 11:53)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba, 
Paylaşmış olduğunuz kodlar Win API bağımlı olduğu için mobil platformda çalışmayacaktır.
Daha önce native kodlarla ve alternatif uygulamalarla yapılmış bir kaç örnek var. 
1 - Firemonkey External File Viewer. Detaylı bilgi: File Viewer (Android ve iOS platformları içindir)
2 - FireMonkey Android - Open Dialog (Yalnızca Android Platformu içindir)
3 - Android için dosya yöneticisi (Yalnızca Android Platformu içindir)


Bilgi paylaşım için teşekkür ederim. Sadece PC kullanacağım.


@hi_selamlar
Teşekkürler sorunumu çözdü.
Cevapla
#5
(31-12-2019, Saat: 11:53)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba, 
Paylaşmış olduğunuz kodlar Win API bağımlı olduğu için mobil platformda çalışmayacaktır.
Daha önce native kodlarla ve alternatif uygulamalarla yapılmış bir kaç örnek var. 
1 - Firemonkey External File Viewer. Detaylı bilgi: File Viewer (Android ve iOS platformları içindir)
2 - FireMonkey Android - Open Dialog (Yalnızca Android Platformu içindir)
3 - Android için dosya yöneticisi (Yalnızca Android Platformu içindir)
Benimde aradığım konuydu bende önce açılmış sevindim.

İilk Uygulama Permission DEnied hatası veriyor.
REad External Storage Write Exxternal Storage izinleri alınmış. EntitmentList den Secure Sharing aktif edilmiş ama hata hala devam ediyor.
İlk uygulama her ihi platform için de geliştirilmiş çalışsa güzel olurdu.

Jar dosylaarı eksik görünüyor.
[img]<a href=[/img]qAL2AZ.png" />

c:\program files (x86)\embarcadero\studio\20.0\lib\android\release\google-analytics-v2.dex.jar
adresine bakınca jar dosyasını olmadığını gördüm android sdk manager otomatik indirir mi bu dosyaları?
Cevapla
#6
(01-01-2020, Saat: 14:26)emre21 Adlı Kullanıcıdan Alıntı: bildiğim kadarıyla android de öyle bir yol yok filedialog açtıramazsınız, kendiniz bir formda dosya editör görünümünde hazırlayip, dosya erişim fonksiyonları ile folder ları listeletip seçtirmelisiniz bunun için listbox ile custom style design ile güzel bir arabirim hazırlayabilirisiniz thumbnail yükletmeli vs, ben öyle yapmıştım.

ios için zaten dosyalara erişemezsiniz, sadece app nizin klasöründen dosya okuyup yazabilirsiniz, fotoğraf içinde kendi özel apileri var ios için export edilmiş ücretsiz bir kodda yok, örneğin 1 den fazla fotoğrafı albümde ios da aynı anda seçip app ye geri döndertme kısmını ben delphi ile yapamamıştım, 400euro vermişdim zamanında embercadero forumunda dave nottage adında bir arkadaşa xcode den export etmişti bana kütüphanesini dosyalarını ve delphi unitlerini hazır olarak vermişti çalışır demo ile..

File exlorer yerine dosyayı istediğim konuma kullanıcıya kopyalatıp oradan almayı istesem.
Hangi konuma kopyalaması gerekir ? İşime yarar?

Uygulama içerisinde bu komutla fdconnection nesnesini Sqlite dosyasına bağlıyorum ama bu dosyayı Android Dosya Yöneticisinde bulamıyorum.
/Android/data/com.embarcadero.UylamaAdı klasörü altında görünmüyor. Documents kalsöründe de bulunmuyor.
Aynı komutla external dosyaya erişmeye çalıştım. Documents ve /Android/data/com.embarcadero.UygulamaAdı  kalösrlerine bu dosyayı kopyalamama rağmen dosyaya erişemiyor.

fdBaglan.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'db.s3db');
Edit:  Komut şu şekilde olmalıymış

Dosya:=TPath.Combine(TPath.GetSharedDocumentsPath,'db.s3db');
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Listview Drag drop Kullanımı [ÇÖZÜLDÜ.] codder71 10 1.400 28-06-2023, Saat: 18:03
Son Yorum: codder71
  Datasnap Kullanımı Hk. sadoal351 1 522 11-01-2023, Saat: 12:45
Son Yorum: hi_selamlar
  Binding ile SQL ve TMemo kullanımı dervis 1 527 30-10-2022, Saat: 22:32
Son Yorum: mcuyan
  REST image kullanımı codder71 12 3.034 19-04-2022, Saat: 22:41
Son Yorum: codder71
  Android Uygulamada ListView Kullanımı Hk. sadoal351 4 1.252 11-02-2022, Saat: 16:25
Son Yorum: sadoal351



Konuyu Okuyanlar: 1 Ziyaretçi