1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    Dismiss Notice

یه سری آموزش های فوق العاده جالب برای دوستان عزیز

Discussion in 'Visual Basic' started by hector2141, Sep 10, 2012.

  1. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    اینم یه مبحث کلی در مورد install Sheild :
    برنامه InstallShield یکی از قویترین نرم‌افزارهای ساخت برنامه‌های نصب برای ویندوز است. این برنامه بهمراه WISE تنها نرم‌افزارهای مورد تایید مایکروسافت برای ساخت برنامه‌های نصب تحت سیستم عامل‌های این شرکت میباشند. InstallShield تاکنون در نگارش‌های مختلفی عرضه شده است و ما در اینجا از نسخه InstallShield Developer 7.0 استفاده خواهیم کرد.

    جهت شروع از Project Wizard که ساده‌ترین راه برای ساخت یک برنامه نصب است استفاده میکنم. برای اینکار InstallShield را اجرا کرده و از منوی File گزینه Project Wizard را انتخاب کنید. حال مرحله به مرحله صفحات این Wizard را مورد بررسی قرار میدهیم:

    Welcome to the Project Wizard
    این صفحه توضیحاتی درباره Project Wizard میدهد و امکانات آنرا معرفی میکند.

    Wizard Project
    در این صفحه گزینه Create a New Project را انتخاب کنید و نامی برای پروژه خود انتخاب کنید.

    Project Type
    حال باید مشخص کنید که قصد ساخت چه نوع پروژه‌ای را دارید. در این نسخه امکان ساخت دو نوع پروژه Standard و Basic MSI وجود دارد. در نوع Basic MSI برنامه نصب شما تماما" توسط Microsoft Windows Installer اجرا و کنترل میشود اما در نوع Standard شما از InstallScript نیز میتوانید برای کنترل برنامه نصب خود استفاده کنید. اما در هر صورت برنامه‌های نصب شما به Windows Installer احتیاج خواهند داشت.

    Application Information
    در این مرحله باید اطلاعاتی را درباره نرم‌افزاری که قصد ساخت برنامه نصب برای آن دارید را مشخص کنید. در قسمت‌های Application Name و Application Version نام و شماره نگارش نرم‌افزار خود را وارد کنید و توجه داشته باشید که شماره نگارش حتما" به صورت AA.BB.CCCC نوشته شود. در قسمت Default Destination Folder نیز مسیر پیش فرضی را که مایل به نصب برنامه خود در آنجا هستید را مشخص کنید. این مسیر با توجه به توصیه‌های مایکروسافت باید به صورت [ProgramFilesFolder]Company Name\Product Name باشد.

    عباراتی که داخل کروشه نوشته میشوند مشخص کننده یک متغیر Windows Installer هستند. در این مورد استفاده از [ProgramFilesFolder] باعث میشود که هنگام اجرای برنامه نصب بجای این عبارت از مسیر دایرکتوری Program Files کاربر استفاده شود.

    Company Information
    در این مرحله نیز اطلاعات شرکت خود شامل نام، شماره تلفن پشتیبانی و آدرس سایت وب را وارد کنید.

    Setup Languages
    زبان‌هایی که مایل به پشیبانی از آنها در برنامه نصب خود هستید را از لیست انتخاب کنید.

    Application Features
    این مرحله یکی از مهمترین مراحل ساخت یک برنامه نصب است. در این مرحله میتوانید برنامه خود را به چند زیرمجموعه (Feature) تقسیم کنید بطوریکه کاربر بتواند به دلخواه مشخص کند که کدام Featureها نصب شوند. برای مثال میتوان یک برنامه را به زیرمجموعه‌های فایل‌های اصلی (Program Files)، فایل‌های راهنما (Help Files)، و فایل‌های نمونه (Sample Files) تقسیم کرد تا کاربر تنها مواردی را که احتیاج دارد نصب کند. هر زیرمجموعه نیز میتواند خود شامل چندین زیرمجموعه دیگر باشد.

    Application Files
    حال میرسیم به مهمترین مرحله که مشخص کردن فایل‌هایی است که باید نصب شوند. برای اینکار ابتدا از لیست بالای صفحه یک زیرمجموعه (Feature) را انتخاب کنید سپس با استفاده از دکمه Add Files فایل‌هایی را که به این زیرمجموعه مربوط میشوند اضافه کنید.

    هنگام اضافه کردن فایل‌ها پنجره‌ای با عنوان Path Variable Recommendation ظاهر میشود که درباره نحوه رفتار با مسیر فایل سوال میکند. قبل از توضیح این قسمت لازم است با مفهوم Path Variable آشنا شویم. یک Path Variable متغیری است که به یک مسیر اشاره میکند. در نتیجه اگر برای مسیر C:\My Projects\My Program یک Path Variable با نام MyPath تعریف کرده باشید برای مشخص کردن فایلی که در این دایرکتوری با نام MyFile.exe وجود دارد میتوان از \MyFile.exe استفاده کرد. از جمله مزایای این روش سرعت و سهولت بیشتر هنگام کار با فایل‌ها است. همچنین اگر شما مجبور به تغییر دادن دایرکتوری محل قرارگیری فایل‌های خود شدید به جای تغییر دادن مسیر ده‌ها فایل تنها کافیست مقدار Path Variable را تغییر دهید.

    در این پنجره سه گزینه وجود دارد که گزینه اول امکان استفاده از یک Path Variable موجود را میدهد؛ گزینه دوم بر اساس مسیر فایل انتخاب شده یک Path Variable میسازد و از آن استفاده میکند و گزینه سوم نیز از مسیر کامل فایل به طور مستقیم استفاده میکند.

    Create Shortcuts
    در این مرحله میتوانید میانبرهایی را برای برنامه‌تان در سیستم کاربر ایجاد کنید. برای این کار ابتدا محلی که مایل هستید میانبر در آنجا ساخته شود را انتخاب کنید و سپس بوسیله دکمه سمت راست موس روی آن کلیک کرده و از منوی باز شده New Shortcut را انتخاب کنید و نامی برای آن مشخص کنید. در قسمت Features زیرمجموعه‌ای که میانبر به آن مربوط میشود را انتخاب کنید و در قسمت‌های Icon و Icon Index به ترتیب فایل حاوی آیکون و در صورتی که این فایل شامل چندین آیکون است شماره آنرا وارد کنید. در قسمت Target نیز باید نام فایلی که این میانبر آنرا اجرا خواهد کرد مشخص کنید. برای این مورد به یکی دیگر از متغیرهای Windows Installer نیاز داریم که نام آن [INSTALLDIR] است. محتوی این متغیر همان محلی است که کاربر هنگام نصب برنامه مشخص کرده است. بنابر این برای مشخص کردن فایل MyFile.exe کافیست [INSTALLDIR]\MyFile.exe را وارد کنید.

    Registry Data
    اگر برنامه شما نیاز به تنظیمات خاصی در رجیستری ویندوز دارد میتوانید در این مرحله یک فایل reg. را برای زیرمجموعه مربوط به آن مشخص کنید تا هنگام نصب به رجیستری اضافه شود.

    Dialogs
    در آخرین مرحله نیز کافیست پنجره‌هایی را که مایل هستید در طول فرایند نصب نشان داده شوند مشخص کنید.

    Wizard Summary
    اکنون میتوانید مروری بر تمام مواردی که مشخص کرده‌اید داشته باشید و اگر مشکلی وجود داشت با استفاده از دکمه Back به عقب باز گردید و آن را تصحیح کنید. اگر مایل هستید که بعد ساخته شدن پروژه، نسخه اجرایی آن هم ساخته شود مورد Build a Release را نیز انتخاب کنید.
     
    1 person likes this.
  2. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    ارسال متغير بصورت ByRef و ByValاگر موقع تعريف يک تابع قبل از نام متغير از عبارت ByRef استفاده نماييم هنگام فراخوانی تابع با قراردادن متغيری در تابع که دارای مقدارميباشد ، پس از محاسبات ، مقدار متغير نيز تغيير ميکند. در ضمن مقدار تابع با آخرين مقدار متغير محاسبه ميگردد:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    [/TD]
    [TD="class: code"]<font xmlns="XHTML namespace"><font xmlns="XHTML namespace">
    </font><font xmlns="XHTML namespace">Function Use_ByRef(ByRef intVar As Integer)
    intVar = intVar + 1
    Return intVar
    End Function

    Dim intMyVar As Integer
    intMyVar = 1
    Response.Write(intMyVar & "-----" & Use_ByRef(intMyVar))</font></font>

    [/TD]
    [/TR]
    [/TABLE]


     
    1 person likes this.
  3. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    ببخشید یادم رفت : ولی اگر در مثال فوق ازByVal استفاده کنيم ، پس از محاسبات مقدار متغير تغيير نميکند و نيز مقدار تابع با مقدار اوليه متغير محاسبه ميشود:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    [/TD]
    [TD="class: code"]<font xmlns="XHTML namespace"><font xmlns="XHTML namespace">
    </font><font xmlns="XHTML namespace">FunctionUse_ByVal(ByVal intVar As Integer)
    intVar = intVar + 1
    Return intVar
    End Function

    Dim intMyVar As Integer
    intMyVar = 1
    Response.Write(intMyVar & "-----" & Use_ByVal(intMyVar))</font></font>

    [/TD]
    [/TR]
    [/TABLE]


     
  4. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    متغير Staticاگر درون تابعی متغيری را بصورت Static تعريف نماييم و مقدار اين متغير طي عمليات تابع تغيير نمايد در هرفراخوانی متغير ياد شده با آخرين مقدارخود در محاسبات شرکت ميکند.
    اين مورد بر خلاف تعريف متغيير بوسيله دستور Dim است . چون در Dim متغيير بمحض تعريف شدن دوباره ، مقدار قبلي خود را از دست ميدهد.
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [/TD]
    [TD="class: code"]<font xmlns="XHTML namespace"><font xmlns="XHTML namespace">
    <b>FunctionUse_Static()
    Static intCount As Integer
    intCount = intCount+1
    Return intCount
    End Function

    Response.Write( "
    " & Use_Static)
    Response.Write( "
    " & Use_Static)
    Response.Write( "
    " & Use_Static)</b></font></font>

    [/TD]
    [/TR]
    [/TABLE]


     
    1 person likes this.
  5. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    تعریف توابع به صورت overloads
    در نظر بگيريد كه در جايي از برنامه خود احتياج داشته باشيد كه يك فانكشن را فراخواني و پارامترهاي ورودي آنرا كه استرينك است به آن پاس نماييد. حال اگر شما مجبور باشيد در مواقعي خاص به اين فانكشن بجاي استرينگ ، عدد يا يك متغيير از نوع ديگري پاس كنيد ، چكار بايد كرد؟ آيا بايد دو تا فانكشن با نامهاي متفاوت و نوع عملكرد متفاوت تعريف نمود ؟ آيا راه حل ديگري وجود ندارد؟
    در اينجا راه حل ديگري نيز وجود دارد كه اگر دو يا چند تابع را با يک نام ثابت ولی تعداد يا نوع متغير متفاوت در يک کلاس تعريف نماييم ميتوانيم از هر کدام برحسب نياز استفاده کنيم:
    [TABLE]
    [TR]
    [TD="class: gutter"]1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [/TD]
    [TD="class: code"]<font xmlns="XHTML namespace"><font xmlns="XHTML namespace">
    </font><font xmlns="XHTML namespace">Function Use_OverLoads(ByVal strVar1 As String, ByVal strVar2 As String)As String
    Return strVar1 & strVar2
    EndFunction

    Function Use_OverLoads (ByVal intVar As Integer) As Integer
    Return intVar + intVar
    EndFunction

    Response.Write(Use_OverLoads (5))
    Response.Write("
    " & Use_OverLoads("Over", "Loads"))</font></font>

    [/TD]
    [/TR]
    [/TABLE]


     
    1 person likes this.
  6. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    انتقال اطلاعات از یک پایگاه به پایگاه داده دیگر :

    [FONT=Tahoma, Arial, Helvetica, sans-serif]»[/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif] شاید یکی دیگر از جنبه های برنامه نویسی پایگاه داده توانایی کپی کردن اطلاعات از پایگاه داده ای به پایگاه داده دیگر است که بیشترین کاربرد این عمل در پشتیبان گیری یا انتقال اطلاعات از جدول فرعی به جدول اصلی ( مادر ) مشخص می شود . [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]»[/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif] برای انجام این انتقال دو نوع روش وجود دارد. روش اول این است که ما اطلاعات را به صورت رکورد به رکورد از جدول فرعی خوانده و به صورت رکورد به رکورد در جدول اصلی قرار دهیم و مراقب باشیم که اطلاعات تکراری در این عملیات کپی نگردند ، که انجام کد نویسی برای این روش به نظر من کاری مشکل و دشوار است . روش دوم استفاده از دستورات SQL است که برای انجام چنین عملیاتی ایجاد شده اند و امکان انجام همه این کارها را در یک خط کد نویسی فراهم می نمایند . در این درس من می خواهم روش دوم را به شما عزیزان آموزش دهم .
    [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]»[/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif] برای مثال شما دو پایگاه داده با نام های mdb1 ( پایگاه داده مادر ) و mdb2 ( پایگاه داده فرعی ) که دارای ساختار یکسانی هستند را در نظر بگیرید . ما قصد داریم اطلاعات موجود در پایگاه داده فرعی را بر روی اطلاعات موجود در پایگاه داده مادر بیفزاییم . پس در این حالت اطلاعاتی باید از پایگاه داده فرعی یا رابط به پایگاه داده مادر کپی گردند که نظیری در پایگاه داده مادر ندارند تا به این صورت از ذخیره سازی داده های تکراری در پایگاه داده مادر جلوگیری شود .
    [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]_ به دلیل این که انجام این کار در یک خط کد نویسی صورت می گیرد ما دیگر توانایی مراقبت از ورود داده های تکراری را نداریم . پس بهتر است که انجام این کار را هم بر عهده خود دستور قرار دهیم . به این صورت که اگر ما در پایگاه داده مادر فیلدی را به عنوان کلید قرار دهیم در هنگام انتقال داده ها این کلید به طور خودکار اجازه ورود داده های تکراری را نخواهد داد و فقط داده های کپی خواهند شد که در فیلد کلید نظیری ندارند . برای مثال شما دو پایگاه داده را به صورت زیر تنظیم نمایید :
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]»[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif] پایگاه داده مادر ( mdb1[/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif] ) :[/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif]--> یک جدول با نام [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Table1 دارای فیلد های زیر :[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]> [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]ID : از نوع عددی به عنوان کلید [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]> [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Name : از نوع متن[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]> [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Family : از نوع متن[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]»[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif] پایگاه داده فرعی ( mdb2[/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif] ) :[/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif]--> یک جدول با نام [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Table2 دارای فیلد های زیر :[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]> [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]ID : از نوع عدد [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]> [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Name : از نوع متن[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]> [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Family : از نوع متن[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif]» [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]دستور :[/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif]جدول فرعی SELECT _ FROM ' مسیر و نام جدول اصلی ' IN جدول اصلی INSERT INTO[/FONT]​

    [FONT=Tahoma, Arial, Helvetica, sans-serif]_[/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]در این دستور فقط مسیر و نام پایگاه داده مقصد ذکر می شود و پایگاه داده مبدا باید در اجرای برنامه گشوده شود . حال مثال را کامل می کنیم . ابتدا شما باید از دیالوگ References گزینه Microsoft DAO 3.51 Object Libraryرا تیک بزنید و کد زیر را در دکمه ای قرار دهید :
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]()Private Sub[FONT=Tahoma, Arial, Helvetica, sans-serif] CmdCopy_Click[/FONT][/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Dim DBase AsDatabase[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif]Dim SQL As String[/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif](Set DBase = OpenDatabase(App.Path & "\mdb2.mdb", True, False[/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif]" SQL = "[FONT=Tahoma, Arial, Helvetica, sans-serif] INSERT INTO Table1 IN '" & App.Path & "\mdb1.mdb' SELECT * FROM [/FONT][FONT=Tahoma, Arial, Helvetica, sans-serif]Table2[/FONT][/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif]DBase.Execute SQL [/FONT]
    [FONT=Tahoma, Arial, Helvetica, sans-serif][/FONT]

    [FONT=Tahoma, Arial, Helvetica, sans-serif] " vbInformation , " Copy Completed , " [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]عمل انتقال اطلاعات با موفقیت به پایان رسید" Msgbox [/FONT]​
    [FONT=Tahoma, Arial, Helvetica, sans-serif]
    [/FONT]
     
    1 person likes this.
  7. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    چگونه می توان هندل ( Handle ) یک Textbox را در یک پنجره بدست آورد ؟
    پاسخ : برای بدست آوردن هندل پنجره برنامه ای که هم اکنون باز است از تابع FindWindow استفاده کنید . نحوه declare کردن آن بصورت زیر است :
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    فرض کنید caption فرم برنامه مورد نظرتان در متغیر strWindowName قرار داشته باشد . با دستور زیر می توانید هندل پنجره آنرا بدست آورید :
    Dim hwndFound As Long
    hwndFound = FindWindow(vbNullString, strWindowName)
    نکته : برای پیدا کردن هندل پنجره برنامه ای که caption آنرا بطور دقیق نمی دانید می توانید از تابع FindWindowLike استفاده کنید .
    حال که هندل پنجره مورد نظرتان را استخراج کردید می توانید با استفاده از تابع FindWindowEx هندل اشیا موجود در آن پنجره را بدست آورید . نحوه declare کردن این تابع بصورت زیر است :
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    این تابع را بصورت زیر استفاده کنید :
    htextbox = FindWindowEx(hwndFound, ByVal 0&, "ThunderRT6TextBox", vbNullString)
    که ThunderRT6Textbox نام کلاس Rich Textbox ها در ویژوال بیسیک 6 است . دستور فوق هندل اولین Textbox موجود در پنجره را به شما بر می گرداند . برای بدست آوردن هندل سایر Textbox ها از حلقه زیر استفاده کنید :
    Dim lChild As Long
    Dim lLast As Long

    Do
    lLast = lChild
    lChild = FindWindowEx(lParent, lChild, "ThunderRT6Textbox", vbNullString)
    Loop While lChild
     
    1 person likes this.
  8. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    بعلت عدم وجود اشاره گر در ويژوال بيسيک عمليات کار با فايلها در آن نسبتاً ساده می باشد .
    بطور کلی فايلها بر دو نوع هستند :
    1 - فايلهای متنی Text File : اين فايلها فقط شامل کاراکترهای اسکی و برخی کاراکترهای خاص مانند انتهای خط و انتهای فايل هستند .
    ۲ - فايلهای باينری Binary File : شامل هر نوع کاراکتری می توانند باشند و کاربردهای گسترده ای دارند مانند بانک های اطلاعاتی ، فايلهای اجرائی ، فايلهای گرافيکی و غيره
    ويژوال بيسيک می تواند با هر دو نوع فايل کار کند .

    چگونگی باز کردن فايلها

    قبل از اينکه بتوان عمليات ورودی/خروجی را روی يک فايل انجام داد ابتدا بايستی آنرا باز کرد . باز کردن فايلها در ويژوال بيسيک توسط دستور Open انجام می شود . فرمت کلی اين دستور بصورت زير است :

    Open filename [For mode] [Access access][lock] As [#]filenumber [Len=reclen]x

    [ پارامترهای داخل کروشه اختياری هستند . ]
    filename نام فايلی است که می خواهيم آنرا باز کنيم .
    mode حالت باز کردن فايل است . اين حالتها عبارتند از :
    - Input : فايل بعنوان ورودی باز می شود .
    - Output : فايل بعنوان خروجی باز می شود .
    - Binary : فايل از نوع باينری باز می شود .
    - Append : فايل طوری باز می شود که بتوان به انتهای آن چيزی اضافه کرد .
    - Random
    access نوع دسترسی به فايل را مشخص می کند . انواع دسترسيها عبارتند از :
    - Read : خواندن فايل
    - Write : نوشتن در فايل
    - ReadWrite : خواندن و نوشتن فايل
    lock نوع دسترسی ساير برنامه ها به اين فايل را مشخص می کند . انواع دسترسيها عبارتند از :
    - Shared : دسترسی اشتراکی
    - Lock Read
    - Lock Write
    - Lock Read Write
    filenumber عددی است که ويژوال بيسيک از آن برای دسترسی به فايل استفاده می کند .اين عدد بايستی برای هر فايل منحصر بفرد و بين ۱ تا ۵۱۱ باشد . برای بدست آوردن اولين شماره آزاد می توان از تابع FreeFile استفاده کرد .
    reclen :طول بافر فايل است . اين عدد بايستی از ۳۲۷۶۷ کو چکتر باشد .

    در صورتی که فايلی که توسط filename مشخص شده وجود نداشته و فايل برای Append ، Binary ، Output و يا Random باز شده باشد در اينصورت يک فايل جديد با اين نام ساخته می شود .
    در صورتی که فايل بصورت باينری باز شده باشد پارامتر Len ناديده گرفته می شود .

    چگونگی بستن فايل

    پس از پايان کار با فايل برای بستن آن از دستور Close استفاده می کنيم . فرمت اين دستور بصورت زير است :

    Close #filenumber

    دستور Close بدون هيچ پارامتری تمام فايلهای باز را می بندد .

    کار با دايرکتوری

    ۱ - گرفتن Dir : توسط دستور Dir می توان نام فايلهای موجود در يک دايرکتوری را بر اساس پارامترهايي که به آن می دهيم پيدا کنيم . برای مثال :

    Myfile=Dir$("c:\text\*.txt)"x


    دستور فوق نام اولين فايل موجود در دايرکتوری C:\TEXT را که پسوند آنها txt باشد در متغير Myfile قرار می دهد . اگر دستور فوق را بدون پارامتر مجدداً اجرا کنيم نام دومين فايل برگرداننده می شد و الی آخر
    Dir دارای يک پارامتر اختياری است که نوع فايلهای مورد نظر را نيز می توان با آن مشخص نمود . مثال :

    Myfile=Dir$("c:\text\*.txt",vbNormal)x

    مقادير ممکن اين پارامتر عبارتند از :
    vbNormal ، vbHidden ، vbSystem ، vbDirectory
    ۲ - تغيير دايرکتوری : برای تغيير دايرکتوری از دستور ChDir استفاده می شود مثال :
    ChDir "c:\windows\system32"x
    ۳ - تغيير درايو : برای تغيير درايو از دستور ChDrive استفاده می شود مثال :
    ChDrive "E:"x
    ۴ - ساخت دايرکتوری : برای ايجاد دايرکتوری جديد از دستور MKDir استفاده می شود مثال :
    MKDir "c:\MyFolder"x
    ۵ - حذف دايرکتوری : برای حذف دايرکتوری از دستور RmDir استفاده می شود مثال :
    RmDir "C:\MyFoler"x
     
    1 person likes this.
  9. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    قسمت دوم :
    ساير عمليات کار با فايل :

    ۱ - حذف فايل : برای حذف يک يا چند فايل از دستور Kill استفاده می شود :
    Kill "C:\Temp\MyFile.txt"x
    Kill "C:\Temp\*.txt"x

    ۲ - انتقال فايل : برای انتقال يک فايل از يک دايرکتوری به دايرکتوری ديگر از دستور Name استفاده می شود . مبدا و مقصد بايستی روی يک درايو باشند . اگر دايرکتوری مبدا و مقصد يکی باشد فايل تغيير نام داده می شود :
    Name "C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x

    ۳ - کپی کردن فايل : برای کپی کردن يک فايل از يک دايرکتوری به دايرکتوری ديگر از دستور FileCopy استفاده می شود :
    FileCopy "\File1.txt\ To "C:\Temp\File2.txt"x

    ۴ - بدست آوردن تاريخ و زمان آخرين تغيير فايل و يا زمان ايجاد فايل : برای اين کار از دستور FileDateTime استفاده می شود . ابتدا بايستی يک متغير از نوع Variant تعريف کرده و سپس توسط اين دستور تاريخ و زمان موردنظر را استخراج کنيم :
    Dim FileInfo As Variant
    FileInfo=FileDateTime("C:\Temp\MyFile.txt")x

    ۵ - استخراج طول فايل : برای بدست آوردن طول يک فايل بر حسب بايت از دستور FileLen استفاده می شود :
    FileSize=FileLen("C:\MyFile.txt")x

    ۶ - تغيير صفت يک فايل : برای تغيير صفت يک فايل از دستور SetAttr استفاده می شود . پارامترهای اين دستور عبارتند از :
    0 : فايل معمولی
    2 : فايل مخفی
    4 : فايل سيستمی

    SetAttr FileNumber,FileAttrib

    مقابله با خطاهای کار با فايل :

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

    ۵۲ : شماره يا نام فايل صحيح نيست
    ۵۳ : فايل پيدا نشد
    ۵۴ : حالت فايل صحيح نيست
    ۵۵ : فايل قبلاً باز شده
    ۵۸ : فايل از قبل وجود دارد
    ۵۹ : طول رکورد صحيح نيست
    ۶۱ : ديسک پر است
    ۶۲ : عبور از انتهای فايل
    ۶۳ : شماره رکورد صحيح نيست
    ۷۰ : دسترسی ممنوع است
    ۷۱ : ديسک آماده نيست
    ۷۶ : مسير پيدا نشد

    در هنگام مقابله با خطا بهتراست از يک ساختار Select-Case استفاده کنيد :
    Select Case Err
    Case 71
    MsgBox "Drive is Not Ready"x
    .
    .
    .
    End Select
     
    1 person likes this.
  10. کاربر ارشد

    Joined:
    Sep 6, 2012
    Messages:
    14,318
    Likes Received:
    2,702
    Trophy Points:
    0
    Occupation:
    daneshjo
    پاسخ : یه سری آموزش های فوق العاده جالب برای دوستان عزیز

    تابع پیدا کردن تعداد یک اسم مشخص در یک آرایه ای که اسامی در آن ذخیره شده اند. فقط کافیه شما اسمهایی را که می خواید توی اون آرایه ذخیره کنید و بعد این تابعو فراخوانی کنید.



    Private Function GetCountOfName(strNames() As String, strKeyName As String) As Long

    Dim i As Integer

    Dim iUpperIndex As Integer

    Dim lCounter As Long


    iUpperIndex = UBound(strNames)

    For i = 0 To iUpperIndex

    If Trim(strNames(i)) = Trim(strKeyName) Then

    lCounter = lCounter + 1

    End If

    Next i

    GetCountOfName = lCounter

    End Function

    2-پیدا کردن مقلوب عدد:


    Private Function GetReverseNumber(lInputNumber As Long) As Long

    Dim strTemp As String

    strTemp = CStr(lInputNumber)

    strTemp = StrReverse(strTemp)

    GetReverseNumber = CLng(strTemp)

    End Function