رفتن به مطلب
  • 0

انتخاب فولدر در B4A


KINGmahan

سوال

سلام چطور میتونم چیزی درست کنم که کاربر یک مسیر رو انتخاب کنه و بعد از انتخاب، مسیر رو بده به برنامه؟ میخوام وقتی برنامه مسیر رو گرفت، بعدش کاربر اسم فایل مورد نظرش رو بنویسه و عملیات انجام بشه که البته اینارو میدونم چکار کنم. فقط میخوام یه جوری مسیر رو از کاربر بگیرم و توی یک متغیر ذخیره کنم همین. بقیه کاراش میدونم فقط همین رو راهنمایی کنید ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

4 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در ۱۴۰۰/۹/۱۰ در ۱۵:۴۵، امین شاهدی گفته است:

سلام برای این کار میتونید از کتابخانه های فایل پیکر یا فولدر پیکر استفاده کنید ، 

راه حل بدون کتابخانه استفاده از Intent ، به روش زیر میتونید پیش برید : 

ساخت اینتنت برای انتخاب فولدر که برای اجرای اون باید از StartActivityForResult استفاده کنیم که b4a به صورت عادی پشتیبانی نمیکنه و طبق گفته Erel میتونید با کتابخانه JavaObject اون رو بسازید :

Sub Globals
	Private ion As Object
End Sub

Sub StartActivityForResult(i As Intent)
	Dim jo As JavaObject = GetBA
	ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
	jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

Sub GetBA As Object
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class ".Length)
	jo.InitializeStatic(cls)
	Return jo.GetField("processBA")
End Sub

 

حالا با استفاده از کتابخانه AriaIntent (برای دانلود کتابخانه کلیک کنید) اینتنت رو میسازیم و با ساب StartActivityForResult اون رو اجرا میکنیم

	Dim i As AriaIntent
	i.initialize3(i.ACTION_OPEN_DOCUMENT_TREE)
	i.AddCategory(i.CATEGORY_DEFAULT)
	i.WrapAsIntentChooser("انتخاب پوشه")
	StartActivityForResult(i)

بعد از این کار صفحه انتخاب باز میشه و کاربر فولدر رو انتخاب میکنه و زمانی که به برنامه برمیگرده ساب زیر اجرا میشه که :

Args(0) کد جواب و Args(1) اینتنت ما هستش که میتونیم از اون آدرس انتخابی کاربر رو بگیریم و توی لاگ نمایش بدیم  

Sub ion_Event (MethodName As String, Args() As Object) As Object
   If Args(0) = -1 Then 'resultCode = RESULT_OK
     Dim i As Intent = Args(1)
     Dim jo As JavaObject = i
     Dim uri As String = jo.RunMethod("getParcelableExtra", _
       Array As Object("android.intent.extra.ringtone.PICKED_URI"))
     Log(uri)
   End If
   Return Null
End Sub

 

طبق توضیحات کد کامل اکتیویتی به شکل زیر در میاد

Sub Globals
	Private ion As Object
End Sub

Sub StartActivityForResult(i As Intent)
	Dim jo As JavaObject = GetBA
	ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
	jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

Sub GetBA As Object
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class ".Length)
	jo.InitializeStatic(cls)
	Return jo.GetField("processBA")
End Sub

Sub ButtonPickFolder_Click
	Dim i As AriaIntent
	i.initialize3(i.ACTION_OPEN_DOCUMENT_TREE)
	i.AddCategory(i.CATEGORY_DEFAULT)
	i.WrapAsIntentChooser("انتخاب پوشه")
	StartActivityForResult(i)
End Sub

Sub ion_Event (MethodName As String, Args() As Object) As Object
   If Args(0) = -1 Then 'resultCode = RESULT_OK
     Dim i As Intent = Args(1)
     Dim jo As JavaObject = i
     Dim uri As String = jo.RunMethod("getParcelableExtra", _
       Array As Object("android.intent.extra.ringtone.PICKED_URI"))
     Log(uri)
   End If
   Return Null
End Sub

 

سلام خیلی ممنون از توضیحات خوبتون. من همه این کارا که گفتید با دقت انجام دادم، حتی به حروف بزرگ و کوچک هم توجه کردم، ولی با اجرا فقط یه صفحه سفید میبینم. میشه بگید چه کدهایی رو جا انداختم؟

#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: False
#End Region

Sub Process_Globals

End Sub

Sub Globals
	Private ion As Object
End Sub

Sub StartActivityForResult(i As Int)
	Dim jo As JavaObject = GetBA
	ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
	jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

Sub GetBA As Object
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class".Length)
	jo.InitializeStatic(cls)
	Return jo.GetField("processBA")
End Sub

Sub Activity_Create(FirstTime As Boolean)

End Sub

Sub ButtonPickFolder_Click
	Dim i As AriaIntent
	i.initialize3(i.ACTION_OPEN_DOCUMENT_TREE)
	i.AddCategory(i.CATEGORY_DEFAULT)
	i.WrapAsIntentChooser("انتخاب مسیر")
	StartActivityForResult(i)
End Sub

Sub ion_Event (MethodName As String, Args() As Object) As Object
	If Args(0) = -1 Then 'resultCode = RESULT_OK
		Dim i As Intent = Args(1)
		Dim jo As JavaObject = i
		Dim uri As String = jo.RunMethod("getParcelabelExtra", _
			Array As Object("anroid.intent.extra.ringtone.PICKED_URI"))
		Log(uri)
	End If
	Return Null
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

اینم کدهام توی لاگ هم چیزی نشون نمیده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خب شما کد اجرا رو تو ساب مربوط به باتن خوتون گذاشتین ؟ کدی که من دادم تو این ساب اجرا میشه :

ButtonPickFolder_Click

شما دقیقا همینو کپی کردین یعنی ؟ بعد کدتون رو چجوری اجرا میکنین پس ؟ تو دیزاینر دقیقا یه باتن به همین اسم ساختین یعنی ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۹/۱۳ در 00:19، امین شاهدی گفته است:

خب شما کد اجرا رو تو ساب مربوط به باتن خوتون گذاشتین ؟ کدی که من دادم تو این ساب اجرا میشه :

ButtonPickFolder_Click

شما دقیقا همینو کپی کردین یعنی ؟ بعد کدتون رو چجوری اجرا میکنین پس ؟ تو دیزاینر دقیقا یه باتن به همین اسم ساختین یعنی ؟

آها شرمنده متوجه نشدم دوبار کد رو نوشتم دفعه دوم که از اول نوشتم جا انداختم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام برای این کار میتونید از کتابخانه های فایل پیکر یا فولدر پیکر استفاده کنید ، 

راه حل بدون کتابخانه استفاده از Intent ، به روش زیر میتونید پیش برید : 

ساخت اینتنت برای انتخاب فولدر که برای اجرای اون باید از StartActivityForResult استفاده کنیم که b4a به صورت عادی پشتیبانی نمیکنه و طبق گفته Erel میتونید با کتابخانه JavaObject اون رو بسازید :

Sub Globals
	Private ion As Object
End Sub

Sub StartActivityForResult(i As Intent)
	Dim jo As JavaObject = GetBA
	ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
	jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

Sub GetBA As Object
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class ".Length)
	jo.InitializeStatic(cls)
	Return jo.GetField("processBA")
End Sub

 

حالا با استفاده از کتابخانه AriaIntent (برای دانلود کتابخانه کلیک کنید) اینتنت رو میسازیم و با ساب StartActivityForResult اون رو اجرا میکنیم

	Dim i As AriaIntent
	i.initialize3(i.ACTION_OPEN_DOCUMENT_TREE)
	i.AddCategory(i.CATEGORY_DEFAULT)
	i.WrapAsIntentChooser("انتخاب پوشه")
	StartActivityForResult(i)

بعد از این کار صفحه انتخاب باز میشه و کاربر فولدر رو انتخاب میکنه و زمانی که به برنامه برمیگرده ساب زیر اجرا میشه که :

Args(0) کد جواب و Args(1) اینتنت ما هستش که میتونیم از اون آدرس انتخابی کاربر رو بگیریم و توی لاگ نمایش بدیم  

Sub ion_Event (MethodName As String, Args() As Object) As Object
   If Args(0) = -1 Then 'resultCode = RESULT_OK
     Dim i As Intent = Args(1)
     Dim jo As JavaObject = i
     Dim uri As String = jo.RunMethod("getParcelableExtra", _
       Array As Object("android.intent.extra.ringtone.PICKED_URI"))
     Log(uri)
   End If
   Return Null
End Sub

 

طبق توضیحات کد کامل اکتیویتی به شکل زیر در میاد

Sub Globals
	Private ion As Object
End Sub

Sub StartActivityForResult(i As Intent)
	Dim jo As JavaObject = GetBA
	ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
	jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

Sub GetBA As Object
	Dim jo As JavaObject
	Dim cls As String = Me
	cls = cls.SubString("class ".Length)
	jo.InitializeStatic(cls)
	Return jo.GetField("processBA")
End Sub

Sub ButtonPickFolder_Click
	Dim i As AriaIntent
	i.initialize3(i.ACTION_OPEN_DOCUMENT_TREE)
	i.AddCategory(i.CATEGORY_DEFAULT)
	i.WrapAsIntentChooser("انتخاب پوشه")
	StartActivityForResult(i)
End Sub

Sub ion_Event (MethodName As String, Args() As Object) As Object
   If Args(0) = -1 Then 'resultCode = RESULT_OK
     Dim i As Intent = Args(1)
     Dim jo As JavaObject = i
     Dim uri As String = jo.RunMethod("getParcelableExtra", _
       Array As Object("android.intent.extra.ringtone.PICKED_URI"))
     Log(uri)
   End If
   Return Null
End Sub

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...