• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

نمونه برنامه های VB6 -آموزش از روی مثال

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
خب، توی این تاپیک میخوایم به مرور زمان برنامه های نمونه خیلی ساده بسازیم، هدف کلی این تاپیک آشنایی و آموزش برنامه نویسی با Visual Basic 6 از روی ساخت نمونه برنامه هست.

برای اینکه تاپیک منحرف نشه و دوستان مباحث رو به راحتی دنبال کنن. من برای هر مبحث از یک عنوان شبیه "ادامه مطلب" و یا "قسمت بعدی" استفاده می کنم. پس دوستانی که سوالی داشتند به راحتی مطرح کنند و دوستانی که فقط می خوان موضوع تاپیک رو دنبال کنند، بدنبال عناوین باشند.

سعی می کنم مباحث رو به مرور زمان برای دوستان مطرح کنم.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
خب؛ من می خواستم اول از همه یکمی با محیط وی بی 6 آشنا بشیم.

بنابراین طرف دیتابیس و مفاهیم پیشرفته نرفتم. یک برنامه ساده دفترچه یادداشت طراحی می کنیم و می نویسیم. فکر میکنم هر کسی این برنامه رو بتونه بنویسه، منتها نخواستم در ابتدا بریم طرف مفاهیم پیشرفته.

هدفهای کلی:
- آشنایی با محیط وی بی 6
- آشنایی با کنترل های استاندارد وی بی 6
- آشنایی با کامپوننت Microsoft Common Dialog
- آشنایی با مفاهیم فایل و کار با آن
- طراحی یک اینترفیس کاربر پسند (user-friendly)
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
ما میخوایم یک دفترچه یادداشت کاملا ساده شبیه به NotePad ویندوز بسازیم. خب شروع میکنیم:


- یک فولدر در یک جایی از هارد به اسم MyNotes0.1 می سازیم.
- وی بی 6 رو باز می کنیم، از صفحه New Project که ظاهر میشه - قابل دسترسی از منوی File
Standard EXE رو انتخاب میکنیم و بعد Open!
- Project1 رو به mynotes تغییر نام میدیم. فرم پیش فرض رو هم از Form1 به frmNotes تغییر نام میدیم.
- Caption فرم رو به MyNotes تغییر نام میدیم.
- دکمه Save رو میزنیم و همه فایلهای برنامه رو توی فولدر MyNotes0.1 ذخیره میکنیم.

خب! ما الان یک فرم خالی داریم که میخوایم یک چیزی شبیه به NotePad بشه!
یه TextBox به فرم اضافه میکنیم با این خصوصیات:

کد:
Name: txtNotes
Left: 0
Top: 0
Multiline: True
ScrollBars: 3-Both
Font: Tahoma , size: 12 , Bold

خصوصیت Text رو هم که الان برابر Text1 هست، پاک میکنیم. بر روی فرم رفته و دابل کلیک میکنیم تا کد ادیتور ظاهر بشه ویا F7 رو میزنیم.

ابتدا به قسمت General Declarations با تنظیم دو منوی داخل ادیتور، میریم و کلمه کلیدی و مهم Option Explicit رو تایپ می کنیم.

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

بسیاری از باگهای یک برنامه وی بی، بخاطر تناقض و یا نبودن متغییرهای صحیح هست. همونطور که میدونیم اگر متغییری در وی بی 6 تعریف نشه، از نوع Variant در نظر گرفته میشه که این ممکن هست ایجاد مشکل کنه و اگر هم مشکلی بوجود نیاد حداقل حافظه بیشتری مصرف شده. وارد جزئیات ماجرا نمیشیم، اینکه حالا بماند!....

خب، کجا بودیم؟
Option Explicit رو تایپ میکنیم. حالا Form رو از منوی Object (اولی از چپ) در ادیتور کد انتخاب میکنیم و سپس Resize رو از منوی Procedure انتخاب میکنیم.

حالا ساب (پروسیجر) Form_Resize ساخته شد. کد زیر رو داخلش تایپ می کنیم:

کد:
Private Sub Form_Resize()
txtNotes.Width = frmNotes.ScaleWidth
txtNotes.Height = frmNotes.ScaleHeight
End Sub

چه کار کردیم؟ این ساب که در واقع یک event (رخداد) از خوده فرم (frmNotes) هست با کوچکترین تغییر اندازه فرم صدا زده میشه. ما میخوایم که txtNotes با تغییر اندازه فرم تغییر کنه و خودش رو کیپ به کیپ اندازه فرم نگه داره. پس اونرو به همون اندازه فرم در میارم. اگر هم قبلا توجه کرده باشید Left و Top کنترل تکست باکس مون صفر هست، پس اگر پهنا و درازای اون رو مساوی با پهنا و درازای فرم قرار بدیم، کافیه.
البته "frmNotes." ها در این کد اضافی هستند. چون در خود فرم کد رو مینویسیم لازم نیست برای صدا زدن خصوصیاتش از "frmNotes." استفاده کنیم.

چرا از ScaleWidth, ScaleHeight بجای Width, Height استفاده کردیم؟
خب، Width و Height اندازه فرم + عنوان و گوشه های فرم رو برمیگردونه. یعنی همه جای پنجره یک فرم، ولی ScaleWidth و ScaleHeight فقط اندازه قسمت داخلی فرم (خاکستری) برمی گردونه. تکست باکس ما فقط در همون محیط میتونه باشه، پس ما هم از همون مقادیر استفاده کردیم.

برنامه رو اجرا می کنیم (F5) ... خب این خیلی ساده بود، نه؟ پس تا برنامه بعد! :)

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

کد:
Option Explicit
 
Private Sub Form_Resize()
txtNotes.Width = ScaleWidth
txtNotes.Height = ScaleHeight
End Sub

از منوی File گزینه Make mynotes.exe رو انتخاب می کنیم. بعد از ساخت exe برنامه رو ذخیره میکنیم.
همونطور که گفتم در مباحث بعدی این برنامه رو بهینه می کنیم و امکان ذخیره و بازیابی از فایلها رو هم به برنامه اضافه می کنیم.

(سورس برنامه اتچ شده)

فعلا!
 

فایل های ضمیمه

  • MyNotes0.1.zip
    3.9 KB · نمایش ها: 632

zapata-es24

Guest
تاریخ عضویت
24 نوامبر 2005
نوشته‌ها
35
لایک‌ها
0
کار جالبیه . ادامه بده
ممنون
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام و تشكر از زحمتي كه مي كشيد. من راستش از مدتها پيش راجع به scaleheght و height سئوال داشتم.
من يك فرم را ، همان طور كه موقع باز كردن ويژوال بيسيك هست ، به اين عناصر نگاه كردم و مطابق ليست زير بود اين اندازه ها:
height=3600
scaleheight=3030
width=4800
scalewidth=4680

height difference=570
width difference=120​
تفاوتها ، جايي نوشته نمي شه ، من خودم حساب كردم.
راجع به طول ، همان طور كه شما فرموديد ، به علت تايتل بار است ، ولي 120 اختلاف در عرض ، براي چيست؟ آيا همان لبه هاي نازك است؟ البته عددش كوچك است و فكر كنم همان با عرض آن لبه هاي باريك جور باشد. نظر شما چيست؟
.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
خیلی ممنون از نظر لطف شما عزیزان.

در مورد سوال جناب saalek:
بله دقیقا همون لبه های کناری پنجره های ویندوز هستند که اگر با ماوس روی اونها برید آیکون ماوس تغییر میکنه. البته در ویندوزهای مختلف اندازش تفاوت داره. و البته این مقادیر به Twips هستند نه به Pixels

برای امتحان اگر BorderStyle یک فرم رو روی 0 - None قرار بدیم این مقادیر یکسان خواهند بود.

به اصطلاح به این قسمت از یک عنصر Window در ویندوز می گویند:
nonclient area که در وی بی 6 بدون استفاده از API قابل دسترسی نیستند.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
ممنون. توضيحات شما بسيار كامل بود و چند نكته هم اضافه ياد گرفتم.
حالا مي خواهم كمي بيشتر در بكار گيري اين عناصر طول و عرض فرم شرح دهيد. چون من جاي ديگر ، نه كتاب ، نه سايت، توضيحات خوبي پيدا نكرده ام. به مشكل من در زير توجه كنيد:
============================
.
من مدتهاست مي خواهم يك اديتور بسازم. و مورد استفاده اش اينه كه در يك richtextbox مطالبي را مي نويسم و رنگ و فونت و اندازه متن را تنظيم مي كنم و بعد با زدن دكمه اي ،
تگهاي فروم را خودش ايجاد مي كنه.
و بعد آنرا به كليپ بورد كپي مي كنه تا در فرومها پست بزنيم.

حالا كه قضيه resize را گفتيد، مي خواهم بپرسم كه ، چطور نسبت هاي اندازه و محل قرار گيري دكمه ها و كومبوباكسها (3 كومبوباكس براي رنگ و فونت و اندازه) كه بالاي richtextbox قرار مي گيره را تنظيم كنم.

فكر كنم با دادن نسبتي از scalewidth و scaleheight ،
براي top و left دكمه ها و كومبو باكس ها و richtextbox بايد انجام بشه. براي طول و عرض richtextbox در اين حالت بايستي چه معادله اي از scalewidth و scaleheight را تشكيل داد تا هموراه دكمه ها و كومبو باكس در بالاي ريچ تكست باكس باشند و زير آن نروند. و ريچ تكست باكس هم از زير دكمه ها شروع بشه و تا پايين فرم را بپوشونه و تا سمت راست فرم را بپوشاند.
.

forumeditor.gif

.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
عرض کنم که، البته قرار هست در همین برنامه بعدا یک Toolbar هم بگذارم.

ببینید، طول و عرض کامبوباکس ها که تغییر نمی کنه؟ مکانشون هم در بالا بصورت افقی کنار هم در فرم ثابته؟ اگر اینطور باشه. اونها رو در design mode در جای مناسب روی فرم قرار میدیم. حالا ریچ تکست میمونه که باید کلیه فضای باقی مونده رو بگیره. خب، اگر Left تکست باکس صفر باشه، می تونید پهناش رو پهنای فرم قرار بدید:
کد:
rich1.Width=ScaleWidth
اگر تکست باکس رو در زیر سه کومبو بگذارید، بمقدار Top تا باید از ScaleHieght کم کنید که تا پایین فرم بیاد و بیرون از اون نره، اگر کم نکنید از پایین فرم بیشتر میشه:
کد:
rich1.Height=ScaleHieght - rich1.Top
(ادیت: من اسکرین شات رو ندیده بودم.)
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
برای این اسکرین شات:

کد:
 [LEFT]rich1.Height=ScaleHeight - rich1.Top - rich1.Left
rich1.Width=ScaleWidth - rich1.Left * 2
[/LEFT]
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
من براي اينكه كومبوباكس ها در(( سايزهاي مختلف فرم)) ، پخش بشوند( هر چند كه شايد اگر پخش نشوند در عرض فرم ، كاري منطقي تر باشه.) از فرمول زير استفاده كردم. براي دو كامند باتم هم ديگه ننوشتم. چون فكر كنم بايد اين كارها در تولبار باشه. پس ديگر بحث نمي كنم . چون تولبار علمي تر است. و منطقي تر. ولي راجع به اين قسمت ، كاملا برام جا افتاد.

Private Sub Form_Resize()
Text1.Height = ScaleHeight - Text1.Top
Text1.Width = ScaleWidth
a = Form1.ScaleWidth
Combo1.Left = 1 * (a / 10)
Combo2.Left = 4 * (a / 10)
Combo3.Left = 7.5 * (a / 10)
End Sub​
.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
حالا میخوایم برنامه MyNotes رو گسترش بدیم.​

ابتدا از فولدر قبلی یک کپی بگیرید و اسمش رو به MyNotes0.2 تغییر بدید. خب پروژه رو در وی بی 6 باز کنید.

ما میخوایم menu به برنامه اضافه کنیم. سه تا منو اضافه می کنیم؛ از منوهای استانداری که در اکثر برنامه های ویندوز دیده میشه. File, Edit و Help

فرم رو در وی بی باز می کنیم و از تولبار آیکونه Menu Editor رو انتخاب می کنیم و یا Ctrl+E
همونطور که می دونیم برای هر آیتمی در یک منو یک Caption و یک Name لازم هست. من ساختار منو رو در زیر میگذارم.
شما موقع ساختن منو کلمه ای رو که داخل [] گذاشتم برای Caption و دیگری رو برای Name استفاده بکنید.
... در این ساختار به معنی زیرشاخه بودن آیتم هست که در ادیتور توسط دکمه های جهت نما بوجود میان؛ و البته برای اضافه کردن آیتم جدید از دکمه Next و Insert استفاده میکنیم.

کد:
mnuFile [&File]
… mnuNew [&New]
… mnuSep1 [-]
… mnuOpen [&Open…]
… mnuSave [&Save…]
… mnuSep2 [-]
mnuExit [E&xit]
 
mnuEdit [&Edit]
… mnuCut [Cu&t]
… mnuCopy [&Copy]
… mnuPaste [&Paste]
… mnuSep3 [-]
… mnuSelAll [Select &All]
 
mnuHelp [&Help]
… mnuAbout [&About…]
خب این از منو اگر اشتباهی نکرده باشیم در صورت زدن OK منوی برنامه ساخته خواهد شد.
حالا موقع کد نویسی برای هر آیتم هست...

روی منو رفته و New رو انتخاب کنید تا رخداد مربوطه ایجاد بشه. حالا کد زیر رو توش می نویسیم:
کد:
Private Sub mnuNew_Click()
txtNotes.Text = ""
End Sub
فکر کنم به حد کافی ساده باشه. فعلا به Open و Save کاری نداریم. برای Exit هم همین کار رو می کنیم:
کد:
Private Sub mnuExit_Click()
Unload Me
End Sub
حالا میرسیم به Cut و Copy و Paste و Select All:
کد:
Private Sub mnuCut_Click()
If txtNotes.SelText <> "" Then
Clipboard.Clear
Clipboard.SetText txtNotes.SelText
txtNotes.SelText = ""
End If
End Sub
 
Private Sub mnuCopy_Click()
If txtNotes.SelText <> "" Then
Clipboard.Clear
Clipboard.SetText txtNotes.SelText
End If
End Sub
 
Private Sub mnuPaste_Click()
If Clipboard.GetFormat(vbCFText) = True Then
txtNotes.SelText = Clipboard.GetText(vbCFText)
End If
End Sub
 
Private Sub mnuSelAll_Click()
If Len(txtNotes.Text) > 0 Then
txtNotes.SelStart = 0
txtNotes.SelLength = Len(txtNotes.Text)
End If
End Sub
چه کار کردیم؟
برای Cut ما ابتدا چک کردیم که در تکست باکس چیزی انتخاب شده یا نه؟ بعد کلیپ برد رو پاک کردیم و مقدارش رو برابر متن انتخاب شده قرار دادیم. و در انتها متن انتخاب شده رو پاک کردیم.

برای Copy از روش مشابهی رو استفاده کردیم بجز اینکه دیگه متن رو پاک نمی کنیم.

برای Paste ابتدا چک می کنیم که آیا متنی از نوع تکست خام vbCFText در کلیپ برد ویندوز وجود داره یا نه؟ اگر بود پس ما می تونیم ازش استفاده کنیم و بجای متن انتخاب شده قرار میدیم.

برای Select All ابتدا برای اینکه خطایی در زمان اجرا نبینیم از وجود داشتن متن در تکست باکس مطمئن میشیم و بعد کل متن رو انتخاب می کنیم.

حالا آیتم About رو از منوی Help انتخاب می کنیم:
کد:
Private Sub mnuAbout_Click()
MsgBox "Learning VB6 - MyNotes" & vbNewLine & "PersianTools Forum Topic: http://forum.persiantools.com/showthread.php?t=31711", vbInformation
End Sub

حالا فقط دو آیتم باز کردن و ذخیره کردن متن باقی موند. برای این کار به کد نویسی بیشتری احتیاج هست. ما باید فایلها رو باز و بسته کنیم...

برای استفاده از هر فایلی چه برای خواندن یا نوشتن در وی بی 6، باید ابتدا فایل رو باز بکنیم. برای این کار دستور Open وجود داره. نوع های مختلفی برای باز کردن یک فایل وجود داره: Binary, Random, Input, Output, Append

برای باز کردن فایلهای ASCII خام همانند متونی که ما داریم که یکی از متداول ترین پسوندهاش txt میباشد، از دستورهای Random, Input و Append استفاده می کنیم. برای باز کردن کلیه فایلها شامل کداسکی خام یا هر نوع دیگه به هر دلیلی بطور مثال exe ها، میشه از Binary استفاده کرد.

ما متن اسکی خام داریم، پس از سه نوع اول استفاده میکنیم. برای اینکه یک فایل رو برای خواندن و نوشتن باز کنیم می تونیم از Random استفاده کنیم. در این صورت میتونیم رکورد هم تعریف کنیم. منتها ما در یک زمان واحد فقط یا میخوایم بخونیم یا بنویسیم پس:
برای باز کردن فایل و خوندن محتویاتش در برنامه، از مد Input استفاده می کنیم. برای نوشتن داخل یک فایل از Output استفاده می کنیم.

بعد از انجام کار با فایل، فایل رو با دستور Close میبندیم.

برگردیم به برنامه
ما یک ساب پروسیجر جدید خودمون میسازیم که اسم یک فایل رو بگیره ، محتویاتش رو بخونه و داخل تکست باکس بریزه:
کد:
Sub open_file(strFilename As String)
 
On Error GoTo errs1
Dim f As Integer
Dim tmp As String
 
f = FreeFile
Open strFilename For Input As #f
tmp = Input(LOF(f), #f)
Close #f
 
txtNotes.Text = tmp
Exit Sub
errs1:
MsgBox "Error: Can not open file '" & strFilename & "'.", vbExclamation
Close #f
End Sub
چه کار کردیم؟

ابتدا برای گرفتن خطاهای احتمالی از قبیل در دسترس نبودن فایل، از On Error GoTo استفاده کردیم. یک متغییر به نام f برای نگهداری شماره فایلی که باز میکنیم گذاشتیم. با دستور FreeFile یک شماره فایل براش اختصاص دادیم. فایل رو برای خواندن باز کردیم. کلیه محتویات فایل رو در یک متغییر ریختیم. فایل رو بستیم و تکست باکس رو با متن داخل فایل پر کردیم.

دستور LOF به معنی: Length of File اندازه فایل به بایت رو برمیگردونه. دستور Input – منظور تابع هست نه نوع فایل، دو ورودی داره، تعداد بایتی که باید خونده بشه و شماره فایلی که باید ازش بخونیم. ما این دو رو بهش دادیم و در برگشت کل متن داخل فایل رو در یک متغییر ریختیم.

حالا میریم برای ذخیره کردن هم یک ساب بسازیم:
کد:
Sub save_file(strFilename As String)
On Error GoTo errs1
Dim f As Integer
Dim tmp As String
 
f = FreeFile
Open strFilename For Output As #f
Print #f, txtNotes.Text
Close #f
 
MsgBox "File saved successful.", vbInformation
Exit Sub
errs1:
MsgBox "Error: Can not save file '" & strFilename & "'.", vbExclamation
Close #f
End Sub
چه کار کردیم؟


فایل رو از نوع Output برای نوشتن باز میکنیم. در لحظه باز کردن با این نوع، در صورت وجود داشتن فایل کلیه محتوای اون پاک میشه و اندازش صفر بایت خواهد شد. در صورت وجود نداشتن، یک فایل صفر بایتی ساخته خواهد شد.
سپس توسط دستور # Print که دستوری مخصوص فایلها هست؛ محتوای کل تکست باکس رو داخل فایل ریختیم و در انتها؛ فایل رو بستیم.

خب، حالا تقریبا همه چیز برای استفاده آمادست. ما برای انتخاب یک نام برای فایلها در برنامه به روندی احتیاج داریم. بهترین کار استفاده از Common Dialog در وی بی 6 هست که به ما این قابلیت رو میده که بتونیم یک نام برای فایلها همانند روشی که در کلیه برنامه های ویندوز دیده میشه ، انتخاب کنیم، یعنی نمایش یک دیالوگ Open یا Save و انتخاب یک فایل.

برای استفاده از کامپوننت کامان دیالوگ در برنامه، به منوی Project در ویبی رفته و Components رو کلیک می کنیم از لیست Microsoft Common Dialog 6.0 رو انتخاب و تیک میزنیم و بعد OK . از روی تولبار ویبی یک کنترل CommonDialog روی فرم میگذاریم با این مشخصات:
کد:
Name: cdlgDialog
Filter: *.txt|*.txt
Flags: 6
حالا از منوی File آیتم Open رو انتخاب میکنیم:
کد:
Private Sub mnuOpen_Click()
On Error GoTo errs1
cdlgDialog.CancelError = True
cdlgDialog.ShowOpen
 
If cdlgDialog.FileName <> "" Then
open_file cdlgDialog.FileName
End If
errs1:
End Sub
ابتدا CancelError رو برابر True قرار میدیم. این کار باعث میشه که در صورتی که کاربر بر روی Cancel کلیک بکنه یک خطا رخ بده. ما این خطا رو میگیریم و می فهمیم که کاربر منصرف شده و فایلی رو انتخاب نکرده پس از ساب میریم بیرون. در صورتی که فایلی رو انتخاب کرده باشه اون فایل رو توسط ساب open_file که ساختیم باز میکنیم.




برای Save از منوی File هم:

کد:
Private Sub mnuSave_Click()
On Error GoTo errs1
cdlgDialog.CancelError = True
cdlgDialog.ShowSave
 
If cdlgDialog.FileName <> "" Then
save_file cdlgDialog.FileName
End If
errs1:
End Sub
همون کار رو کردیم منتها برای نمایش دایالوگ Save از ShowSave استفاده و برای ذخیره به اسم فایلی که انتخاب میشه از save_file استفاده کردیم.

خب اینم از این ورژن از برنامه. جالب بود نه؟ پس تا برنامه بعد!!! :happy:

سورس ورژن جدید:
کد:
Option Explicit
 
Private Sub Form_Resize()
txtNotes.Width = ScaleWidth
txtNotes.Height = ScaleHeight
End Sub
 
Private Sub mnuAbout_Click()
MsgBox "Learning VB6 - MyNotes" & vbNewLine & "PersianTools Forum Topic: http://forum.persiantools.com/showthread.php?t=31711", vbInformation
End Sub
 
Private Sub mnuCut_Click()
If txtNotes.SelText <> "" Then
Clipboard.Clear
Clipboard.SetText txtNotes.SelText
txtNotes.SelText = ""
End If
End Sub
 
Private Sub mnuCopy_Click()
If txtNotes.SelText <> "" Then
Clipboard.Clear
Clipboard.SetText txtNotes.SelText
End If
End Sub
 
Private Sub mnuOpen_Click()
On Error GoTo errs1
cdlgDialog.CancelError = True
cdlgDialog.ShowOpen
 
If cdlgDialog.FileName <> "" Then
open_file cdlgDialog.FileName
End If
errs1:
End Sub
 
Private Sub mnuSave_Click()
On Error GoTo errs1
cdlgDialog.CancelError = True
cdlgDialog.ShowSave
 
If cdlgDialog.FileName <> "" Then
save_file cdlgDialog.FileName
End If
errs1:
End Sub
Private Sub mnuPaste_Click()
If Clipboard.GetFormat(vbCFText) = True Then
txtNotes.SelText = Clipboard.GetText(vbCFText)
End If
End Sub
 
Private Sub mnuSelAll_Click()
If Len(txtNotes.Text) > 0 Then
txtNotes.SelStart = 0
txtNotes.SelLength = Len(txtNotes.Text)
End If
End Sub
 
Private Sub mnuExit_Click()
Unload Me
End Sub
 
Private Sub mnuNew_Click()
txtNotes.Text = ""
End Sub
Sub open_file(strFilename As String)
On Error GoTo errs1
Dim f As Integer
Dim tmp As String
 
f = FreeFile
Open strFilename For Input As #f
tmp = Input(LOF(f), #f)
Close #f
 
txtNotes.Text = tmp
Exit Sub
errs1:
MsgBox "Error: Can not open file '" & strFilename & "'.", vbExclamation
Close #f
End Sub
Sub save_file(strFilename As String)
On Error GoTo errs1
Dim f As Integer
Dim tmp As String
 
f = FreeFile
Open strFilename For Output As #f
Print #f, txtNotes.Text
Close #f
 
MsgBox "File saved successful.", vbInformation
Exit Sub
errs1:
MsgBox "Error: Can not save file '" & strFilename & "'.", vbExclamation
Close #f
End Sub
در قسمت بعدی، امکانات بیشتری به برنامه اضافه میکنیم...
تا بعد!

ادیت: برنامه دیباگ شد.
Clipboard.SetText txtNotes.SelText صحیح است.
MsgBox "Error: Can not save file صحیح است.
 

فایل های ضمیمه

  • MyNotes0.2.zip
    8.6 KB · نمایش ها: 496

zapata-es24

Guest
تاریخ عضویت
24 نوامبر 2005
نوشته‌ها
35
لایک‌ها
0
سلام بلا بلا جان
بابا خیلی بلایی:D قوربون دستت یه کاری کن ما تا آخر این ماه یه آفیس واسه خودمون ردیف کنیم روی این ماکروسافت رو کمی تا قسمتی کم کنیم. :cool: :eek:
چند تا چیز جدید توی این کدها به چشمم خورد. برم ببینم کجا چه خبره.:blink:
thanks soooooooo much
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
جالب بود . دستت درد نكنه
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
خب ما به اهداف کلی برنامه رسیدیم. از دوستان هم چندتا سوال در مورد آرایش فرم داشتیم، کمی بیشتر برنامه رو پیشرفته میکنیم. حالا میخوایم با برخی از کنترلهای Microsoft Windows Common Controls هم آشنا بشیم.

یک کپی از فولدر ورژن 0.2 میگیریم به نام MyNotes0.3 و پروژه رو باز می کنیم...

از منوی Project گزینه Components رو انتخاب میکنیم و از لیست:
Microsoft Windows Common Controls 6.0 رو تیک میزنیم.

ما میخوایم یک Toolbar به برنامه اضافه کنیم.

روی فرم یک کنترل Toolbar میکشیم که خود به خود بالای فرم می چسبه. یک ImageList هم اضافه میکنیم...

خصوصیات شون رو به این صورت تنظیم میکنیم:
Toolbar:
کد:
[FONT=Tahoma]Name: tbrStandard[/FONT]
[FONT=Tahoma]Allow Customize: False[/FONT]
[FONT=Tahoma]Style: 1- tbrFlat[/FONT]
ImageList:
کد:
[FONT=Tahoma]Name: imgList[/FONT]
خب؛ برای دکمه های تولبار ما به چندتا آیکون احتیاج داریم که من اتچشون کردم. imgList رو انتخاب میکنیم و Custom رو از پراپرتیهاش انتخاب میکنیم. بعد به تب (صفحه) Images میریم.

با استفاده از Insert Picture به ترتیب این آیکنها رو اضافه میکنیم:
کد:
[FONT=Tahoma]New.ico[/FONT]
[FONT=Tahoma]Open.ico[/FONT]
[FONT=Tahoma]Save.ico[/FONT]
[FONT=Tahoma]Cut.ico[/FONT]
[FONT=Tahoma]Copy.ico[/FONT]
[FONT=Tahoma]Paste.ico[/FONT]

حالا OK رو میزنیم.

tbrStandard رو انتخاب و به فرم Custom میریم برای ImageList و DisabledImageList و HotImageList گزینه imgList رو انتخاب میکنیم. با این کار ما کنترل ایمیج باکسمون رو به این تولبار متصل میکنیم که آیکونهامون رو برای دکمه هاش استفاده کنیم.

حالا تب Buttons رو میاریم:
اولین دکمه رو با استفاده از Insert Button میسازیم:
Caption: New
Image: 1

دومین با استفاده از Insert Button:
Caption: Open
Image: 2

و سومی:
Caption: Save
Image: 3

حالا یک جدا کننده روی تولبار ایجاد میکنیم:

اول Insert Button بعد
Style: 3- tbrSeparator

حالا دکمه بعدی:
Caption: Cut
Image: 4
و

Caption: Copy
Image: 5

و آخری:
Caption: Paste
Image: 6

خب، حالا OK رو میزنیم و تولبار ما آماده شد. کدنویسیش مونده :blink:

دابل کلیک میکنیم روی تولبار تا ساب مربوطه ساخته بشه و این کد رو توش مینویسیم:
کد:
[FONT=Tahoma]Private Sub tbrStandard_ButtonClick(ByVal Button As MSComctlLib.Button[/FONT][FONT=Tahoma])[/FONT]
[FONT=Tahoma]Select Case Button.Index[/FONT]
[FONT=Tahoma]Case 1 'new[/FONT]
[FONT=Tahoma]mnuNew_Click[/FONT]
 
[FONT=Tahoma]Case 2 'open[/FONT]
[FONT=Tahoma]mnuOpen_Click[/FONT]
 
[FONT=Tahoma]Case 3 'save[/FONT]
[FONT=Tahoma]mnuSave_Click[/FONT]
 
[FONT=Tahoma]Case 4 'separator[/FONT]
[FONT=Tahoma]'[/FONT][FONT=Tahoma]nothing[/FONT]
 
[FONT=Tahoma]Case 5 'cut[/FONT]
[FONT=Tahoma]mnuCut_Click[/FONT]
 
[FONT=Tahoma]Case 6 'copy[/FONT]
[FONT=Tahoma]mnuCopy_Click[/FONT]
 
[FONT=Tahoma]Case 7 'paste[/FONT]
[FONT=Tahoma]mnuPaste_Click[/FONT]
 
[FONT=Tahoma]End Select[/FONT]
[FONT=Tahoma]End Sub[/FONT]
چه کار کردیم؟ خب ما در این ساب/ایونت یک ورودی داریم به اسم Button که خصوصیات دکمه فشرده شده رو برمیگردونه. قبلا هم که کلی کد برای منوها نوشتیم؟ ما Index هر دکمه رو چک می کنیم و ساب پروسیجر منوی مناسب رو صدا میزنیم.

حالا یک تغییر کوچک هم در ایونت Resize فرم لازم داریم. ما الان یک تولبار بالای فرم گذاشتیم، باید تکست باکسمون رو بیاریم پایین و از طرفی، اندازه درازاش رو هم تنظیم کنیم، ساب Form_Resize جدید اینطوری خواهد بود:
کد:
[FONT=Tahoma]Private Sub Form_Resize[/FONT][FONT=Tahoma]()[/FONT]
[FONT=Tahoma]On Error Resume Next[/FONT]
[FONT=Tahoma]txtNotes.Width = ScaleWidth[/FONT]
[FONT=Tahoma]txtNotes.Top = tbrStandard.Height[/FONT]
[FONT=Tahoma]txtNotes.Height = ScaleHeight - tbrStandard.Height[/FONT]
[FONT=Tahoma]End Sub[/FONT]

برای چی از on error استفاده کردیم؟ اگر نمیگذاشتیم، در موقع اجرای برنامه اگر فرم رو بیش از حد از نظر درازا کوچک میکردیم، یعنی از خود تکست باکس بالاتر ، مقدار ScaleHeight – tbrStandard.Height منفی میشد و خطا میگرفتیم. راحتترین کار اینکه این خطا رو در نظر نگیریم. ;)

خب اینم از ورژن جدید، جالب بود نه؟ پس...

سورس و آیکون ها اتچ شدند.
اگر باگی پیدا کردید حتما گوش زد کنید. تشکر
 

فایل های ضمیمه

  • MyNotes0.3.zip
    13.2 KB · نمایش ها: 301

شايان

مدیران قدیمی
تاریخ عضویت
2 سپتامبر 2003
نوشته‌ها
4,814
لایک‌ها
9
به به !!!‌

باغت آباد انگوری ! :D

آقا تا اینجاش که خیلی خوبه ! ۲ تا چیز اضافه کنی بد نیست ! یکی اینکه وقتی متن ادیت میشه ، موقع بستن ش بخواد که save کنه ... یعنی یه گزینه save هم اضافه بشه ... اگر بار اول بود کار save as ... رو بکنه ... اگر نبود که که رو قبلی save بشه ...

بعد یه کم هم شیرین کاریه API بدن بهش اضافه کن ... من دوست دارم API :D :D

اقا دمت گرم ! به این میگن کاربر فعال !!! باید ازت قدر دانی بشه :D
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
42
محل سکونت
یه خورده اونورتر
به نقل از شايان :
به به !!!‌

باغت آباد انگوری ! :D

آقا تا اینجاش که خیلی خوبه ! ۲ تا چیز اضافه کنی بد نیست ! یکی اینکه وقتی متن ادیت میشه ، موقع بستن ش بخواد که save کنه ... یعنی یه گزینه save هم اضافه بشه ... اگر بار اول بود کار save as ... رو بکنه ... اگر نبود که که رو قبلی save بشه ...

بعد یه کم هم شیرین کاریه API بدن بهش اضافه کن ... من دوست دارم API :D :D

اقا دمت گرم ! به این میگن کاربر فعال !!! باید ازت قدر دانی بشه :D
خیلی ممنون.
حتما این قابلیتها رو هم اضافه میکنم. در مورد ذخیره کردن ، با یکی دوتا بیت ماسک میشه اینها رو کنترل کرد که در ورژن بعدی میگم.
به این برنامه API هم میشه اضافه کرد تا حدودی ولی نه زیاد. حالا در نمونه برنامه های دیگه هم از API استفاده میکنیم.

باز هم تشکر از لطف همه دوستان :)
 

zapata-es24

Guest
تاریخ عضویت
24 نوامبر 2005
نوشته‌ها
35
لایک‌ها
0
ای ول بابا:D دس خوش جیگر:p
برو که داری خوب میری. مممممممممممممنون:happy:
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
من هم تشكر مي كنم. و در حال دنبال كردن بحث.
اگر
api
گفتيد ، كمي بيشتر توضيح بدهيد اولش را تا من مبتدي هم بفهمم.
.
 
بالا