PDA

View Full Version : سوال: ذخیره اعمال برنامه در رجستری



Ninja-Assassin
سه شنبه 25 تیر 1392, 13:31 عصر
ســــلام دوستان
من یه مشکلی دارم میشه برام توضیح بدید چطوری میتونم یه کاری کنم که کاربر هر تغییری در برنامه داد در رجستری ذخیره شه که دفعه بعد برنامه رو باز کرد همون طوری مانده باشه ممنون میشم کمکم کنید

یه نمونه برنامه گذاشتم که با زدن دکمه میشه تصویر زمینه رو عوض کرد مخوام اگه زحمتی نیست این سورس رو برام اصلاح کنید که هر بار باز کرد با همون رنگ مونده باشه
ممنوووووووون..

m.4.r.m
سه شنبه 25 تیر 1392, 13:42 عصر
Private Sub Command1_Click()
CommonDialog1.ShowColor
lngcolor = CommonDialog1.Color
Form1.BackColor = lngcolor
SaveSetting App.EXEName, "BKColor", "Color", lngcolor

End Sub

Private Sub Form_Load()
lngcolor = GetSetting(App.EXEName, "BKColor", "Color", lngcolor)
Form1.BackColor = lngcolor
End Sub

Ninja-Assassin
چهارشنبه 26 تیر 1392, 11:07 صبح
ممنووووون خیلی عالی بود..

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

اگه بتونین مشکل منو حل کنید خیلی ممنون میشم چند روزه رو این موضوع گیر کردم :(

m.4.r.m
چهارشنبه 26 تیر 1392, 12:55 عصر
این همه کار کردی یه خط دستور اضافه نکردی همین شما lngcolor رو در زیر تابع BackColor بدون مقدار اول تعریف کردی به همین خاطر مشکی نشون میده این کد رو جایگزین کنی درست میشه

Private Sub BackColorR()
Lngcolor = GetSetting(App.EXEName, "BColor", "Color", Lngcolor)
Form1.BackColor = Lngcolor
Form1.lbl1.BackColor = Lngcolor
Form1.lbl2.BackColor = Lngcolor
Form1.Frm1.BackColor = Lngcolor
Form2.BackColor = Lngcolor
End Sub

Ninja-Assassin
چهارشنبه 26 تیر 1392, 13:07 عصر
ممنووووون

ولی نشد :(
یعنی شما میگید تو روال BackColorB اون خط رو اضافه کنم؟
کردم نشد حتی رنگاشم عوض نمیشد

میشه اون نمونه کدی که بالا گذاشتم فایل زیپ(BackColor) رو برام تصحیح کنید بذارید بردارم ممنون میشم

m.4.r.m
چهارشنبه 26 تیر 1392, 13:30 عصر
بفرما تست کنید

Ninja-Assassin
چهارشنبه 26 تیر 1392, 13:45 عصر
ممنون

بله منم همینکارو کردم ولی شما خودتون ببینید تو فرم 2 دکمه backcolor هستش اون رنگ پس زمینه رو عوض نمیکنه یه بار عوض کرد دیگه عوض نمیکنه اصلا کار نمیکنه هر رنگی رو میزنم تغییری نمیکنه :(

نمیشه مثلا هر کاری کردی تو unload فرم سیو کنی؟
مثل این برنامه که گذاشتم من خواستم بکنم ولی چون یه رواله نتونستم روال رو تو اونجا بذارم اگه فقط یه دونه بود شاید میشد مثلا فقط رنگ پس زمینه ولی تو برنامه من به جزء پس زمینه چندتا کنترل دیگه هست که اونا هم باید رنگشون عوض شه که مجبور شدم روال بذارم

m.4.r.m
چهارشنبه 26 تیر 1392, 14:00 عصر
کد رنگ شما رو من چند بار تست کردم مشکلی نداشت ببین شما می تونی مجموعه ای اشیا فرم رو یکجا رنگش رو عوض کنی

Ninja-Assassin
چهارشنبه 26 تیر 1392, 14:06 عصر
من تست میکنم رنگش عوض نمیشه مال دکمه ها عوض میشه ولی مال پس زمینه عوض نمیشه

خوب بگید چطوری؟

Ninja-Assassin
چهارشنبه 26 تیر 1392, 14:25 عصر
ببینید به گفته ی شما این برنامه باید درست کار كنه

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

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

ببخشید دیگه زحمت میشه.. :خجالت:

saber67
چهارشنبه 26 تیر 1392, 14:47 عصر
کد زیر رو به جای کد خودت بنویس، مشکل حله

Dim Lngcolor As Long

Private Sub Command1_Click()
CommonDialog1.Flags = cdlCCRGBInit
CommonDialog1.ShowColor
CommonDialog1.CancelError = False
Lngcolor = CommonDialog1.Color
Me.BackColor = Lngcolor
Call SaveSetting(App.EXEName, "BC", "C", Lngcolor)
End Sub

Private Sub Form_Load()
Lngcolor = GetSetting(App.EXEName, "BC", "C", vbButtonFace)
Me.BackColor = Lngcolor
End Sub

m.4.r.m
چهارشنبه 26 تیر 1392, 15:19 عصر
اینم کد شما :

Dim IntOldX As Integer, IntOldY As Integer, Lngcolor As Long
Dim IntLineSize As Byte

Private Sub Command1_Click()
CommonDialog1.Flags = cdlCCRGBInit
CommonDialog1.ShowColor
Lngcolor = CommonDialog1.Color
Form1.BackColor = Lngcolor
SaveSetting App.EXEName, "BC", "C", Lngcolor
End Sub

Private Sub BackColorR()
Lngcolor = GetSetting(App.EXEName, "BC", "C", Lngcolor)
Form1.BackColor = Lngcolor
End Sub

Private Sub Form_Load()
If GetSetting(App.EXEName, "BC", "C", Lngcolor) = 0 Then
Lngcolor = vbButtonFace
Else
Lngcolor = GetSetting(App.EXEName, "BC", "C", Lngcolor)
Call BackColorR
End If
End Sub

Ninja-Assassin
چهارشنبه 26 تیر 1392, 19:40 عصر
واییییییییییی ممنون دوستان گرامی خیلی لطف کردین مشکلم حل شد

فقط اینکه میتونم برا کوتاه نویسی متغییر Lngcolor رو به یه روال بریزم؟

Form1.BackColor=LngColor
Form2.BackColor=LngColor
Form3.BackColor=LngColor
Form1.Label=LngColor


بجای این یه روال باشه که متغییر LngColor رو بریزم به همه ی اینا چطوری میتونم اینکارو کنم یه همچین چیزی میخوام مثل این

Call BackColor=LngColor

ممنون میشم راهنمایی کنید

saber67
چهارشنبه 26 تیر 1392, 20:05 عصر
یه روال به این شکل می نویسی:
Public Sub BackColor(ByVal lngColor As Long)
Form1.BackColor = lngColor
Form2.BackColor = lngColor
Form3.BackColor = lngColor
Form1.Label = lngColor
End Sub

و به این صورت فراخوانی می کنی:
Call BackColor(lngColor)

m.4.r.m
پنج شنبه 27 تیر 1392, 00:45 صبح
ببین با این کد می تونی تمام اشیائ روم فرم و حتی خود فرم رو یکجا رنگشونو ویرایش کنی

Dim frmThing as Form
Dim ctlThing as Control

For Each frmThing In Forms
frmThing.BackColor = vbYellow
For Each ctlThing In frmThing.Controls
If (TypeOf ctlThing Is TextBox) Or _
(TypeOf ctlThing Is CheckBox) Or _
(TypeOf ctlThing Is ComboBox) Then
ctlThing.BackColor = vbYellow
End If
Next
Next

Ninja-Assassin
پنج شنبه 27 تیر 1392, 12:27 عصر
ببین با این کد می تونی تمام اشیائ روم فرم و حتی خود فرم رو یکجا رنگشونو ویرایش کنی

Dim frmThing as Form
Dim ctlThing as Control

For Each frmThing In Forms
frmThing.BackColor = vbYellow
For Each ctlThing In frmThing.Controls
If (TypeOf ctlThing Is TextBox) Or _
(TypeOf ctlThing Is CheckBox) Or _
(TypeOf ctlThing Is ComboBox) Then
ctlThing.BackColor = vbYellow
End If
Next
Next


واییییییییی خیلی عالی بود ممنووووووووون :قلب:

حالا اگه بخوام به همه ی فرم ها اعمال شه چیکار کنم؟؟

Ninja-Assassin
پنج شنبه 27 تیر 1392, 12:28 عصر
یه روال به این شکل می نویسی:
Public Sub BackColor(ByVal lngColor As Long)
Form1.BackColor = lngColor
Form2.BackColor = lngColor
Form3.BackColor = lngColor
Form1.Label = lngColor
End Sub

و به این صورت فراخوانی می کنی:
Call BackColor(lngColor)

ممنووووون مونده بودم اینو چطوری انجام بدم مرسی

Ninja-Assassin
پنج شنبه 27 تیر 1392, 17:46 عصر
ممنون اون مشکلو حل کردم تو تمام فرم ها نشون بده کافی بود روال BackColorR رو Public کنم بعد تو اون یکی فرم ها Call کنم

یه سوال دیگه داشتم ببخشید

میشه فرم رنگش عوض نشه آخه من دو تا گزینه دارم یکی این که همه جاش رنگش عوض میشه تو اون کار کرد خیلی هم عالی بود یکیش اینه که فقط رنگ دکمه ها عوض شه میشه؟؟

m.4.r.m
جمعه 28 تیر 1392, 00:34 صبح
بابا یکم رو این کد ها مانور بدی سریع خودت درست می کنی کار خاصی نداره دیگه

Ninja-Assassin
جمعه 28 تیر 1392, 12:56 عصر
راس گفتی واقعا خودم ور رفتم درس شد مرسیییییییی خیلی کمکم کردی ممنووووون

فقط یه 3 تا سوال کوچیک دارم اگه جواب بدی دیگه حله ممنون میشم

1- من کلی آیکن برا برنامم دانلود کردم هیچ کدوم نمیتونم بذارم یه ارور میده شرایط خاصی داره؟ از نظر سایز اندازه اینا؟؟ یکیش به زور شد بقیه نمیشه :(
2- من برنامم رو رو Form layout کاملا به گوشه کشیدم ولی وقتی برنامم رو رو یه مانیتور بزرگ تر اجرا میکنم وسط اجرا میشه یه روشی هست تو هر نوع سایز مانیتور برنامم گوشه اجرا شه؟
3-
Private Sub Form_Load()
Check1.Value = GetSetting(App.Title, "Check1", "Value", "0")
End Sub

Private Sub Form_Unload(Cancel As Integer)
SaveSetting App.Title, "Check1", "Value", Check1.Value
End Sub

من این کدو برا ذخیره وضعیت CheckBox ها نوشتم که حالت پیش فرض غیر فعاله میخوام برا اولین بار که کاربر برنامه رو باز کرد فعال باشه بعد که تغییر داد اونجوری باقی بمونه

کد ذخیره ی وضعیت OptionButton هم برام بذارید ممنون میشم البته میخوام اونم اولین بار اجرا شد یکیش فعال باشه

مرسییییییی دیگه :قلب:

saber67
جمعه 28 تیر 1392, 22:50 عصر
1- VB6 از آیکون های 32 بیتی (اندازه نیست کیفیته!) و تصاویر PNG پشتیباین نمی کنه و حداکثر کیفیتی که قبول می کنه آیکون 24 بیتی هستش
البته بعد از مدتها جستجو و تلاش!! موفق شدم که روی فرم (آره دوستان درست خوندین روی خود فرم VB:چشمک:) از آیکون های 32 بیتی استفاده کنم، شاید در آینده نزدیک آموزشش رو گذاشتم:لبخند:

2- از کد زیر استفاده کن تا موقع لود شدن پنجره به مختصات دلخواه بره
Private Sub Form_Load()
Me.Top = 240
Me.Left = 240
End Sub

3- توی تابع GetSetting آخرین پارامتر (چهارمی) اختیاریه، یعنی باشه یا نباشه تابع بدون مشکل اجرا میشه
اما کارش چیه؟ این پارامتر دقیقا برای مشکل شماست! یعنی اگه اون تنظیمات وجود نداشت (چون بار اوله یا هر دلیل دیگه ای) چه مقداری رو برگردونه یعنی مقدار پیشفرضه! [Default]
شما به جای این خط
Check1.Value = GetSetting(App.Title, "Check1", "Value", "0")
خط زیر رو بزاری مشکل حله
Check1.Value = GetSetting(App.Title, "Check1", "Value", Checked)
در واقع به برنامه می گیم که به صورت پیشفرض باید در حالت Checked باشه
برای بقیه چیزا هم همین طور مقدار پیشفرض دلخواه رو وارد می کنی

saber67
پنج شنبه 11 مهر 1392, 12:48 عصر
اینم آموزشی که قول داده بودم:
برای دیدن آموزش استفاده از آیکن 32 بیتی روی فرم برنامه به این تاپیک (http://barnamenevis.org/showthread.php?422120-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%DB%8C%DA%A9%D9%86-32-%D8%A8%DB%8C%D8%AA%DB%8C-(32bpp)-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87) برید