PDA

View Full Version : مشكل در ذخيره تنظيمات



hamaz562006
یک شنبه 08 دی 1387, 12:36 عصر
سلام خدمت اساتيد محترم
من ميخواستم در برنامه پيوست بعد از زدن setting و انتخاب option مورد نظر و زدن ok و اعمال رنگ مجددا وقتي setting رو ميزنم option انتخاب شده نشون داده بشه و همچنين بعد از بستن كامل برنامه تنظيمات قبلي ذخيره بشه ممنون ميشم برام كدشو بنويسيد و كدمامو اصلاح كنيد

فايل پيوست:
26933

r_oscar2007
یک شنبه 08 دی 1387, 13:52 عصر
شما بايد با تابع savesetting تنظيمات برنامه يتان را در ريجستري ثبت كنيد و موقع استفاده با تابع getsetting آن را بخوانيد و در يك متغير بندازيد

ƒxmahdi
یک شنبه 08 دی 1387, 15:42 عصر
سلام خدمت اساتيد محترم
من ميخواستم در برنامه پيوست بعد از زدن setting و انتخاب option مورد نظر و زدن ok و اعمال رنگ مجددا وقتي setting رو ميزنم option انتخاب شده نشون داده بشه و همچنين بعد از بستن كامل برنامه تنظيمات قبلي ذخيره بشه ممنون ميشم برام كدشو بنويسيد و كدمامو اصلاح كنيد


فايل پيوست:
26933

خیلی ساده است !

.:KeihanCPU:.
یک شنبه 08 دی 1387, 17:07 عصر
یک پروژه جدید باز کنید و یک Command Button و یک TextBox بذارید تو فرمتون و کد زیر رو تو قسمت جنرال فرمتون کپی کنید


Private Sub Command1_Click()
SaveSetting App.Title, "Setting", "Value", Text1.Text
End Sub
Private Sub Form_Load()
Text1.Text = GetSetting(App.Title, "Setting", "Value", "Hello")
End Sub

برنامه رو اجرا کنید و هر چی دلتون میخواد تو TextBox وارد کنید و بعد کلید Command1 رو بزنید و از برنامه خارج بشید. حالا اگه دوباره برنامه رو اجرا کنید میبینید متنی که دفعه قبل وارد کرده بودید سره جاشه و پاک نشده !
دستوات SeveSetting ، GetSetting ، DeleteSetting و GetAllSettings از توابع خود ویژوال بیسیک هستند و نیازی به فراخوانی اونا نیست. طرز کار این دستورات خیلی ساده ست، این دستورات فقط برای ثبت و بازیابی تنظیمات استفاده میشن و هیچ کار دیگه ای انجام نمیدن، در واقع محدوده عملیات این دستورات در رجیستری محدود به این آدرس است :



HKEY_CURRENT_USER\Software\VB and VBA Program Settings\نام برنامه\عملیات\اطّلاعات

.:KeihanCPU:.
یک شنبه 08 دی 1387, 17:11 عصر
شما با این دستوات نمیتونید به بخشهای دیگه رجیستری دسترسی داشته باشید. شکل کلّی این دستورات به صورت زیره :


Sub SaveSetting(AppName As String, Section As String, Key As String, Setting As String)
Function GetSetting(AppName As String, Section As String, Key As String, [Default]) As String
Function GetAllSettings(AppName As String, Section As String)
Sub DeleteSetting(AppName As String, [Section], [Key])

SevaSetting : این دستور بسیار ساده ست فکر کنم با توضیحات بالا دیگه نیازی به آموزش نیست، ببینید در واقع این دستور اولین کاری که میکنه، یک پوشه که بیانگر نام برنامه ست (AppName) در آدرسی که گفتم میسازه. بعدش میره سراغ پوشه بعدی (Section) یعنی عملیاتی که قراره انجام بدیم مثلاً اگر قراره که موقعیّت فرم رو ذخیره کنیم بهترین نامی که میتونیم برای این عملیات بذاریم Position است و بعد از اون هم کلید یا همون مقداری که باید ذخیره بشه مثل Top. به دستور زیر توجّه کنید :


SaveSetting "Project1", "Position", "Top", Me.Top

دستور فوق باعث ساخته شدن آدرس زیر میشه (قسمت پر رنگ) :


HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Project1\Position\

که در اون آدرس هم، کلید یا همون فایل Top قرار داره که حاوی یک عدد است (موقعیّت بالای فرم). به این ترتیب ما تونستیم با این دستور اطّلاعاتی (موقعیّت قرم) رو در رجیستری ذخیره کنیم. حالا برای بدست آودرن این اطّلاعات باید از دستور GetSetting استفاده کنیم.

GetSetting : این دستور هم خیلی ساده ست. شما باید آدرس و کلید مورد نظرتون رو تعیین کنید تا این تابع مقدار کلید رو برگردونه. به دستور زیر توجّه کنید :


Me.Top = GetSetting("Project1", "Position", "Top", "2000")

دستور فوق اطلاعات داخله فایله Top رو برمیگردونه و به فرم انتصاب میده. امّا اون عدد 2000 چیه؟ خب باید بگم که اون مقدار پیش فرضه تا اگه کلید Top در مسیر داده شده وجود نداشت و نتونست مقداری رو برگردونه، از مقدار پیش فرض استفاده کنه تا دچار خطا نشه، اگه از این دستور در برنامه استفاده کنید و کلیدی رو که تعیین کردید یافت نشه مثل زمانی که برای اولین بار برنامه رو اجرا میکنید، با پیغام خطا روبرو خواهید شد.

DeleteSetting : این دستور برای پاک کردنه یک کلید (فایل) یا پوشه از مسیر داده شده ست. به عنوان مثال اگه شما بخواید کلید Top رو پاک کنید باید از دستور زیر استفاده کنید :


DeleteSetting "Project1", "Position", "Top"

در دستور بالا کلید Top حذف میشه و اگه کلید Top رو تعیین نکنیم (DeleteSetting "Project1", "Position") پوشه Position پاک میشه و اگه پوشه Position رو هم تعیین نکنیم (DeleteSetting "Project1") پوشه Project1 حذف میشه. و مسلّماً در صورتی که فایل یا پوشه یافت نشه با پیغام خطا مواجه میشید. تا اینجا که خیلی ساده امّا تابع GetAllSettings کمی فرق میکنه.

GetAllSettings : این دستور کمی با دستورات قبلی تفاوت داره.



Private Sub Form_Load()
Me.AutoRedraw = True
Dim MySettings As Variant, intSettings As Integer


SaveSetting "MyApp", "Startup", "Number1", 50
SaveSetting "MyApp", "Startup", "Number2", 22
SaveSetting "MyApp", "Startup", "Number3", 36
SaveSetting "MyApp", "Startup", "Number4", 197
SaveSetting "MyApp", "Startup", "FName", "Amir"
SaveSetting "MyApp", "Startup", "LName", "Amiri"
SaveSetting "MyApp", "Startup", "Message", "Hello My Friend"


MySettings = GetAllSettings(appname:="MyApp", section:="Startup")


For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)
Print MySettings(intSettings, 0) & " = " & MySettings(intSettings, 1)
Next intSettings


DeleteSetting "MyApp"
End Sub

منبع:امیر امیری

butterfly8528
جمعه 13 دی 1387, 05:08 صبح
سلام
میتونی تنظیمات رو در یک فایل اینی (ini) ذخیره و در روال فرم لود فراخانیشون کنی


Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Sub Form_Load()
Dim Buffer As String

Buffer = String(255, 0)
WritePrivateProfileSection "Hello", "rad2=88", "c:\Hossein.ini"
GetPrivateProfileSection "Hello", Buffer, 255, "c:\Hossein.ini"
Text1.Text = Buffer
End Sub