PDA

View Full Version : سوال: لطفا توضیح بدید : Savesetting ,Getsetting



MBG73
پنج شنبه 05 شهریور 1388, 03:35 صبح
سلام

کسی میتونه این 2 تا رو برای من توضیح بده که چیجوری میتونم با savesetting سیو کنم و با getsetting اطلاعات رو بگیرم ؟

ممنون

xxxxx_xxxxx
پنج شنبه 05 شهریور 1388, 06:24 صبح
جستجو کنید:
روش کار با savesetting و getsetting (http://barnamenevis.org/forum/showthread.php?t=172812)
و
http://barnamenevis.org/forum/showthread.php?t=151559

MBG73
پنج شنبه 05 شهریور 1388, 06:48 صبح
جستجو کنید:
روش کار با savesetting و getsetting (http://barnamenevis.org/forum/showthread.php?t=172812)
و
http://barnamenevis.org/forum/showthread.php?t=151559


ممنون از شما

میتونید لطفا شکل کلی این دستورات رو برام بنویسید ؟

ممنون

xxxxx_xxxxx
پنج شنبه 05 شهریور 1388, 07:18 صبح
کار تابع SaveSetting:
ایجاد کلید و value در رجیستری در مسیر زیر:

HKEY_CURRENT_USER\Software\VB And VBA Program Settings\شکل کلی تابع:

SaveSetting AppName as String,Section as String,Key as String,Setting as StringAppName as String: نام SubKey در مسیر بالا
Section as String: نام SubKey در AppName
Key as String: نام Value از نوع String
Setting as String: مقداری که در Key قرار میگیرد.

تابع GetSetting هم دقیقاً مشابه همین هست با این تفاوت که آخرین پارامتر رو نداره و مقدار درون Key رو برمیگردونه.

MBG73
پنج شنبه 05 شهریور 1388, 07:24 صبح
1. خوب حالا اگه بخوایم اطلاعات save شده رو پاک کنیم باید چی کار کنیم ؟

2. ادرسی که گفتین کجا هست ؟؟

HKEY_CURRENT_USER\Software\VB And VBA Program Settings\

amir_en
پنج شنبه 05 شهریور 1388, 09:23 صبح
1. خوب حالا اگه بخوایم اطلاعات save شده رو پاک کنیم باید چی کار کنیم ؟

2. ادرسی که گفتین کجا هست ؟؟

HKEY_CURRENT_USER\Software\VB And VBA Program Settings\



منوی start تو کادر Run تایپ کن : regedit
مقدار Key رو اونجا میتونی تغییر بدی:چشمک:

amir_en
پنج شنبه 05 شهریور 1388, 09:26 صبح
حالا خودم یه سوال داشتم:لبخند:
اگه AppName رو تو save Setting تغییر بدم مشکلی پیش میاد یا مقدار key رو اونجا ذخیره میکنه؟

xxxxx_xxxxx
پنج شنبه 05 شهریور 1388, 11:31 صبح
1. خوب حالا اگه بخوایم اطلاعات save شده رو پاک کنیم باید چی کار کنیم ؟

2. ادرسی که گفتین کجا هست ؟؟
HKEY_CURRENT_USER\Software\VB And VBA Program Settings\
1- باید از تابع DeleteSetting استفاده کنید. AppName رو حتماً باید بدید بهش، section و key الزامی نیست.
2- آدرس رجیستری هست. دوستمون amir_en توضیح دادند.



حالا خودم یه سوال داشتم:لبخند:
اگه AppName رو تو save Setting تغییر بدم مشکلی پیش میاد یا مقدار key رو اونجا ذخیره میکنه؟
یک SubKey جدید، با همون نام جدید ایجاد میشه.

MBG73
پنج شنبه 05 شهریور 1388, 16:59 عصر
ببخشید از سوالات زیادم

حالا من 256 command و 256 Label دارم که میخوام خاصیت visible و Caption اونارو save کنم .

چیجوری باید از حلقه استفاده کنم ؟

xxxxx_xxxxx
پنج شنبه 05 شهریور 1388, 19:57 عصر
اگر Command ها و Label هاتون Index گذاری شده اند (آرایه هستند) که خوب تو یه حلقه می تونید این کارو انجام بدید. مثلاً برای ذخیره Caption در Command ها:

For i = 0 To 255
SaveSetting "MyApp", "Commands", "CMD" & i, Command1(i).Caption
Next i

برای بازیابی هم به همین صورت. اما اگه برای ذخیره Visible اشیاء از همین کلیدها استفاده کنید فکر کنم بهتر باشه. چون Visible دو حالت بیشتر نداره، یا 0 هست یا 1. حالا اگر 1 بود به آخر Caption همون شئ یک عدد 1 هم اضافه شه و اگر 0 بود عدد 0 اضافه شه. برای بازیابی مقادیر هم آخرین کاراکتر از Caption رو Visisble شئ درنظر بگیرید.
موفق باشید/

.:KeihanCPU:.
جمعه 06 شهریور 1388, 11:58 صبح
خب اوّل یک مثال میزنم و بعد میرم سره آموزش تا بهتر یاد بگیرید.

یک پروژه جدید باز کنید و یک 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\نام برنامه\عملیات\اطّلاعات

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


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






ستون 0



ستون 1



سطر 0



Number1



50



سطر 1



Number2



22



سطر 2



Number3



36



سطر 3



Number4



197



سطر 4



FName



Amir



سطر 5



LName



Amiri



سطر 6



Message



Hello…


خب این مثال میتونه کمک خیلی خوبی باشه. در واقع تابع GetAllSetting همون کاری رو میکنه که تابع GetSetting میکرد، با این تفاوت که در GetAllSettings کلید تعیین نمیشه بلکه پوشه ای که کلیدها در اون قرار دارن تعیین میشه و همچنین مقدار برگشتی هم یک مقدار از نوع متنی نیست بلکه آرایه ای دو بعدی از داده های موجود در پوشه ست که نام کلید در ستون 0 و مقدار کلید در ستون 1 قرار میکیره. میبینید که در ابتدا مقادیری رو با نامهای متفاوت در رجیستی ذخیره کردیم و بعد تمام اطّلاعات ذخیه شده رو با یک دستور درون متغیّر MySettings ذخیره کردیم، امّا دسترسی به این اطّلاعات چطور امکان پذیره؟

شکل بالا ساختار متغیّر MySettings رو نشون میده :

متغیّر MySettings که از نوع Variant تعریف شده، بوسیله تابع GetAllSettings به شکلی که میبینید مقدار دهی شده. حالا اگه به نام کلید نیازی ندارید میتونید فقط از ستون 1 که مقدارها درونش هستن استفاده کنید.

در این مرحله اگه با آرایه ها آشنا باشید کار کردن با این تابع براتون آسونه. موفق باشید.
اینجا (http://keytak.blogfa.com/post-84.aspx)رو ببینید