<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[فروم تخصصی - پشتیبانی CPSD - مقالات و مثال های آموزشی مرتبط با Trial Keeper Professional]]></title>
		<link>http://cpsd.ir/forum/</link>
		<description><![CDATA[فروم تخصصی - پشتیبانی CPSD - http://cpsd.ir/forum]]></description>
		<pubDate>Mon, 06 Apr 2026 14:55:25 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش دوم]]></title>
			<link>http://cpsd.ir/forum/showthread.php?tid=86</link>
			<pubDate>Sun, 14 Aug 2011 22:27:20 +0430</pubDate>
			<guid isPermaLink="false">http://cpsd.ir/forum/showthread.php?tid=86</guid>
			<description><![CDATA[<div style="text-align: justify;">ضمن سلام<br />
<br />
در ادامه مبحث قبلي ميخوام به روشي اشاره كنم كه علاوه بر كاهش زمان كاري به نوعي به عنوان يك پيچيدگي درجه سه هم جهت جلوگيري از شكسته شدن قفل به کار بیاد .<br />
<br />
يك كركر معمولاً مترصد اجراي يك رويداد ميمونه تا اون رو بتونه دور بزنه . ميتونيد به روش زير زمان انتظار اون رو اندكي به تعويق بندازيد .<br />
<br />
روال چك شدن تابع <span style="font-weight: bold;">Initialize</span> رو به صورت رندوم انجام بديد . در اين حالت قصد داريم فراخواني اين روال رو نه به صورت مستمر ، بلكه به صورت اتفاقي انجام بديم . در اين روش حتي اين امكان ميتونه به وجود بياد كه عمليات چك كردن رو در داخل يك رويداد تكرار پذير نيز به انجام برسونيد .<br />
بيايد با همديگه به ساختار دستور رندوم نگاهي بندازيم<br />
<br />
دستور رندوم و يا همون <span style="font-weight: bold;">Rnd</span> مقداري عددي از نوع <span style="font-weight: bold;">Single</span> رو برميگردونه و در هر بار اجرا ، اين عدد <span style="font-weight: bold;">متفاوت</span> از دفعه قبل خواهد بود .<br />
<br />
هميشه دقت كنيد اين تابع رو به همراه دستور <span style="font-weight: bold;">Randomize</span> به كار ببريد , تا پراكندگي عددي در هر بار فراخواني به وجود بياد . به مثال زير دقت كنيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Randomize<br />
Int ( Rnd * 100 + 1)</code></div></div>
</div>
<br />
<div style="text-align: justify;">دستور فوق اقدام به برگرداندن عددي بين 1 تا 100 ميكنه .<br />
خب اجازه بديد اون رو در داخل رويداد يك دكمه قرارش بديم تا در حالتي كه عدد برگشتي زوج بود برنامه اقدام به نمايش يك پيغام مزاحم كنه :<br />
<div style="text-align: left;"></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click ()<br />
Randomize<br />
If Int ( Rnd * 100 + 1 ) Mod 2 = 0 Then MsgBox "Sample Nag Message"<br />
End Sub</code></div></div>
</div>
حالا همون مثال بالا در خصوص تابع <span style="font-weight: bold;">Initialize</span> هم قابل استفاده هستش<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click()<br />
Randomize<br />
If Int ( Rnd * 100 + 1 ) Mod 2 = 0 Then Initialize ( … )<br />
End Sub</code></div></div>
</div>
<div style="text-align: justify;">در مثال فوق هم تابع <span style="font-weight: bold;">Initialize</span> به صورت اتفاقي فراخواني ميشه . شما <span style="font-weight: bold;">نمي تونيد </span>قبل از اجراي دستور ، از فراخواني تابع <span style="font-weight: bold;">Initialize</span> مطمئن باشيد چرا كه فراخواني اون رو به دست يك رويداد اتفاقي سپرديد .<br />
<br />
با 100 بار كليك بر روي دكمه فوق ، دستور Initialize بين 0 تا 100 بار ميتونه اجرا بشه .<br />
<br />
در همين جا مجدداً اشاره اي به يك توصيه عمومي دارم :</div>
<br />
<span style="color: #006400;"><div style="text-align: center;"><span style="font-weight: bold;">فاصله فيزيكي كدها در داخل اكسس از همديگه زياد باشه</span></div></span><br />
<br />
<div style="text-align: justify;">روالهاي كنترلي رو در فاصله اي <span style="font-weight: bold;">دور</span> از همديگه قرار بديد ، اينجوري <span style="font-weight: bold;">رديابي</span> كدها از طريق <span style="font-weight: bold;">اديتورهاي متني</span> موجود به سختي امكان پذيره . در پاسخ به اين سئوال كه چه جوري بايد اين كار رو انجام بديد ادامه مطلب رو مطالعه بفرماييد :<br />
<br />
يكي از كارهاي خيلي مؤثري كه ميتونيد انجام بديد ، انجام بخشي از عمليات در داخل توابع هستش .<br />
<br />
اجازه بديد روال نحوه برگردوندن يك عدد اتفاقي رو در داخل يك تابع با همديگه ببينيم ، در داخل يك ماژول اقدام به معرفي يك تابع با عنوان SeedRandomA كنيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Function SeedRandomA() As Integer<br />
Randomize<br />
SeedRandomA = Int(Rnd * 100 + 1 )<br />
End Function</code></div></div>
</div>
<div style="text-align: justify;">اين تابع دقيقاً همون كار رو انجام ميده , حالا بيايد نگاهي به نحوه استفاده از اون بندازيم .<br />
<br />
در داخل رويداد کلیک دكمه ، دستورات با به كار گيري اين تابع به صورت زير تغيير پيدا ميكنه :</div>
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click()<br />
If SeedRandomA Mod 2 = 0 Then Initialize ( … )<br />
End Sub</code></div></div>
</div>
<div style="text-align: justify;">هنوز هم جا براي بهينه سازي وجود داره ، اجازه بديد تغيير آخر رو هم اعمال كنيم و تابع رو به صورت زير تغيير بديم ، قبل از اون توجه شما رو به توضيح زير جلب ميكنم : <br />
<br />
دستور If SeedRandomA Mod 2 = 0 Then عملاً داره بررسي ميكنه كه اگر <span style="font-weight: bold;">شرط</span> صحيح باشه ( عدد زوج باشه ) آنگاه دستور مورد نظر رو به انجام برسونه . <br />
<br />
ما قصد داريم همين عمليات رو هم در داخل تابع و به دور از چشم كركر انجام بديم . ( منظورم فاصله فيزيكي بيشتر كد كنترلي هستش )</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Function SeedRandomB() As Boolean<br />
Randomize<br />
SeedRandomB = Int(Rnd * 100 + 1) Mod 2<br />
End Function</code></div></div>
</div>
<div style="text-align: justify;">به <span style="font-weight: bold;">نوع</span> مقدار برگشتي از تابع SeedRandomB دقت كنيد و تفاوت اون رو با حالت قبلي ببينيد . خروجي اين تابع بررسي ميكنه كه عدد مورد نظر زوج هست و يا نه ( تابع قبلی فقط عدد رو برميگردوند )<br />
در نهايت تغييرات رو با هم در داخل روال انتساب داده شده به دكمه اعمال ميكنيم :</div>
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click()<br />
If SeedRandomB Then Initialize ( … )<br />
End Sub</code></div></div>
</div>
دقت كنيد كه كد چقدر كوتاهتر و مرتب تر شد .<br />
<br />
<span style="color: #800000;"><span style="font-weight: bold;">مزيت اين كار توي چيه ؟!</span></span><br />
<br />
<div style="text-align: justify;">فهم الگوريتم به كار رفته و اعمال تغيير در داخل اون <span style="font-weight: bold;">دشوار تر</span> از حالت قبلي هستش ، كركر نياز داره كه به دنبال تابع SeedRandomB <span style="font-weight: bold;">بگرده</span> و عمليات داخلي اون رو ملاحظه كنه .<br />
شما امكان <span style="font-weight: bold;">فراخواني</span> توابع رو در جاي جاي برنامه داريد و اين همون معناي <span style="font-weight: bold;">يك بار </span>بنويس و <span style="font-weight: bold;">چندين بار </span>استفاده كن هستش .<br />
در صورتي كه نيازي به <span style="font-weight: bold;">تغيير</span> داشته باشيد ، شما فقط نياز داريد كه روال داخل تابع رو تغيير بديد و رفلكس اين تغيير رو در تمامي جاهاي ديگه كه از اون تابع استفاده به عمل اومده ، به صورت يكجا ببينيد . ( با ذكر يك تبصره )<br />
<br />
استفاده از توابع گامي در جهت يك برنامه نويسي <span style="font-weight: bold;">پويا</span> به حساب مياد .<br />
<br />
با اعمال اين تغييرات گامي ديگه به سمت طراحي برنامه اي با ديواره دفاعي <span style="font-weight: bold;">مستحكمتر</span> برداريد .<br />
در جلسه بعدي اين مبحث ، اشاره اي به رجيستري و نحوه كار با اون خواهم داشت .<br />
<br />
البته قصد باز كردن اون مبحث رو به صورت كامل ندارم چرا كه استفاده كارآمد از اين قابليت در مباحث قفل گذاري ، نيارمند تكنيكهايي خاص هستش كه متاسفانه امكان آموزش اونها در اين سطح وجود نداره .<br />
<br />
استفاده موثر از اين امكان در قفل گذاري نيازمند تكنيكهايي هستش كه يادگيري اونها براي شما دوستان زمان زيادي رو طلب ميكنه . كليه اون تكنيكها در داخل <span style="font-weight: bold;">Trial Keeper Professional </span>گنجونده شده و بر همين اساس از كنار اون مطلب با ديدي نه چندان عمقي عبور ميكنيم .<br />
<br />
در سرفصلهاي بعدي وارد مباحث عمقي تر قفل گذاري به كمك <span style="font-weight: bold;">Trial Keeper Professional</span> ميشيم . اين اكتيو ايكس بسياري از قابليتهاي حرفه اي رو در داخل خودش به صورت بالقوه حمل ميكنه كه سعي ميكنيم در اين سلسله مطالب اونها رو به صورت حرفه اي تر و كاملتر آموزش بديم و اجرا كنيم .<br />
<br />
<span style="font-weight: bold;">توضيح و يادآوري چندين باره : </span>تكنيك شكستن قفل در داخل Access متفاوت از فايلهاي اجرايي هستش ، بر همين اساس دوستاني كه با نحوه شكستن قفلهاي فايلهاي اجرايي آشنايي دارن شايد تناقضهايي رو با اصول موجود در اون نوع قفل شكني ها مشاهده كنند . برخي مطالب به صورت مشترك در داخل فايلهاي اجرايي نيز ميتونه مد نظر قرار بگيره ، ولي در حال حاضر قصد ايجاد مرزي مشخص رو در اون رابطه ندارم .<br />
خب اميدوارم اين مطلب هم مورد توجه شما قرار گرفته باشه . تا فرصتي ديگه خدا نگهدار .</div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">ضمن سلام<br />
<br />
در ادامه مبحث قبلي ميخوام به روشي اشاره كنم كه علاوه بر كاهش زمان كاري به نوعي به عنوان يك پيچيدگي درجه سه هم جهت جلوگيري از شكسته شدن قفل به کار بیاد .<br />
<br />
يك كركر معمولاً مترصد اجراي يك رويداد ميمونه تا اون رو بتونه دور بزنه . ميتونيد به روش زير زمان انتظار اون رو اندكي به تعويق بندازيد .<br />
<br />
روال چك شدن تابع <span style="font-weight: bold;">Initialize</span> رو به صورت رندوم انجام بديد . در اين حالت قصد داريم فراخواني اين روال رو نه به صورت مستمر ، بلكه به صورت اتفاقي انجام بديم . در اين روش حتي اين امكان ميتونه به وجود بياد كه عمليات چك كردن رو در داخل يك رويداد تكرار پذير نيز به انجام برسونيد .<br />
بيايد با همديگه به ساختار دستور رندوم نگاهي بندازيم<br />
<br />
دستور رندوم و يا همون <span style="font-weight: bold;">Rnd</span> مقداري عددي از نوع <span style="font-weight: bold;">Single</span> رو برميگردونه و در هر بار اجرا ، اين عدد <span style="font-weight: bold;">متفاوت</span> از دفعه قبل خواهد بود .<br />
<br />
هميشه دقت كنيد اين تابع رو به همراه دستور <span style="font-weight: bold;">Randomize</span> به كار ببريد , تا پراكندگي عددي در هر بار فراخواني به وجود بياد . به مثال زير دقت كنيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Randomize<br />
Int ( Rnd * 100 + 1)</code></div></div>
</div>
<br />
<div style="text-align: justify;">دستور فوق اقدام به برگرداندن عددي بين 1 تا 100 ميكنه .<br />
خب اجازه بديد اون رو در داخل رويداد يك دكمه قرارش بديم تا در حالتي كه عدد برگشتي زوج بود برنامه اقدام به نمايش يك پيغام مزاحم كنه :<br />
<div style="text-align: left;"></div>
<div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click ()<br />
Randomize<br />
If Int ( Rnd * 100 + 1 ) Mod 2 = 0 Then MsgBox "Sample Nag Message"<br />
End Sub</code></div></div>
</div>
حالا همون مثال بالا در خصوص تابع <span style="font-weight: bold;">Initialize</span> هم قابل استفاده هستش<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click()<br />
Randomize<br />
If Int ( Rnd * 100 + 1 ) Mod 2 = 0 Then Initialize ( … )<br />
End Sub</code></div></div>
</div>
<div style="text-align: justify;">در مثال فوق هم تابع <span style="font-weight: bold;">Initialize</span> به صورت اتفاقي فراخواني ميشه . شما <span style="font-weight: bold;">نمي تونيد </span>قبل از اجراي دستور ، از فراخواني تابع <span style="font-weight: bold;">Initialize</span> مطمئن باشيد چرا كه فراخواني اون رو به دست يك رويداد اتفاقي سپرديد .<br />
<br />
با 100 بار كليك بر روي دكمه فوق ، دستور Initialize بين 0 تا 100 بار ميتونه اجرا بشه .<br />
<br />
در همين جا مجدداً اشاره اي به يك توصيه عمومي دارم :</div>
<br />
<span style="color: #006400;"><div style="text-align: center;"><span style="font-weight: bold;">فاصله فيزيكي كدها در داخل اكسس از همديگه زياد باشه</span></div></span><br />
<br />
<div style="text-align: justify;">روالهاي كنترلي رو در فاصله اي <span style="font-weight: bold;">دور</span> از همديگه قرار بديد ، اينجوري <span style="font-weight: bold;">رديابي</span> كدها از طريق <span style="font-weight: bold;">اديتورهاي متني</span> موجود به سختي امكان پذيره . در پاسخ به اين سئوال كه چه جوري بايد اين كار رو انجام بديد ادامه مطلب رو مطالعه بفرماييد :<br />
<br />
يكي از كارهاي خيلي مؤثري كه ميتونيد انجام بديد ، انجام بخشي از عمليات در داخل توابع هستش .<br />
<br />
اجازه بديد روال نحوه برگردوندن يك عدد اتفاقي رو در داخل يك تابع با همديگه ببينيم ، در داخل يك ماژول اقدام به معرفي يك تابع با عنوان SeedRandomA كنيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Function SeedRandomA() As Integer<br />
Randomize<br />
SeedRandomA = Int(Rnd * 100 + 1 )<br />
End Function</code></div></div>
</div>
<div style="text-align: justify;">اين تابع دقيقاً همون كار رو انجام ميده , حالا بيايد نگاهي به نحوه استفاده از اون بندازيم .<br />
<br />
در داخل رويداد کلیک دكمه ، دستورات با به كار گيري اين تابع به صورت زير تغيير پيدا ميكنه :</div>
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click()<br />
If SeedRandomA Mod 2 = 0 Then Initialize ( … )<br />
End Sub</code></div></div>
</div>
<div style="text-align: justify;">هنوز هم جا براي بهينه سازي وجود داره ، اجازه بديد تغيير آخر رو هم اعمال كنيم و تابع رو به صورت زير تغيير بديم ، قبل از اون توجه شما رو به توضيح زير جلب ميكنم : <br />
<br />
دستور If SeedRandomA Mod 2 = 0 Then عملاً داره بررسي ميكنه كه اگر <span style="font-weight: bold;">شرط</span> صحيح باشه ( عدد زوج باشه ) آنگاه دستور مورد نظر رو به انجام برسونه . <br />
<br />
ما قصد داريم همين عمليات رو هم در داخل تابع و به دور از چشم كركر انجام بديم . ( منظورم فاصله فيزيكي بيشتر كد كنترلي هستش )</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Function SeedRandomB() As Boolean<br />
Randomize<br />
SeedRandomB = Int(Rnd * 100 + 1) Mod 2<br />
End Function</code></div></div>
</div>
<div style="text-align: justify;">به <span style="font-weight: bold;">نوع</span> مقدار برگشتي از تابع SeedRandomB دقت كنيد و تفاوت اون رو با حالت قبلي ببينيد . خروجي اين تابع بررسي ميكنه كه عدد مورد نظر زوج هست و يا نه ( تابع قبلی فقط عدد رو برميگردوند )<br />
در نهايت تغييرات رو با هم در داخل روال انتساب داده شده به دكمه اعمال ميكنيم :</div>
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>Private Sub cmdSampleButton_Click()<br />
If SeedRandomB Then Initialize ( … )<br />
End Sub</code></div></div>
</div>
دقت كنيد كه كد چقدر كوتاهتر و مرتب تر شد .<br />
<br />
<span style="color: #800000;"><span style="font-weight: bold;">مزيت اين كار توي چيه ؟!</span></span><br />
<br />
<div style="text-align: justify;">فهم الگوريتم به كار رفته و اعمال تغيير در داخل اون <span style="font-weight: bold;">دشوار تر</span> از حالت قبلي هستش ، كركر نياز داره كه به دنبال تابع SeedRandomB <span style="font-weight: bold;">بگرده</span> و عمليات داخلي اون رو ملاحظه كنه .<br />
شما امكان <span style="font-weight: bold;">فراخواني</span> توابع رو در جاي جاي برنامه داريد و اين همون معناي <span style="font-weight: bold;">يك بار </span>بنويس و <span style="font-weight: bold;">چندين بار </span>استفاده كن هستش .<br />
در صورتي كه نيازي به <span style="font-weight: bold;">تغيير</span> داشته باشيد ، شما فقط نياز داريد كه روال داخل تابع رو تغيير بديد و رفلكس اين تغيير رو در تمامي جاهاي ديگه كه از اون تابع استفاده به عمل اومده ، به صورت يكجا ببينيد . ( با ذكر يك تبصره )<br />
<br />
استفاده از توابع گامي در جهت يك برنامه نويسي <span style="font-weight: bold;">پويا</span> به حساب مياد .<br />
<br />
با اعمال اين تغييرات گامي ديگه به سمت طراحي برنامه اي با ديواره دفاعي <span style="font-weight: bold;">مستحكمتر</span> برداريد .<br />
در جلسه بعدي اين مبحث ، اشاره اي به رجيستري و نحوه كار با اون خواهم داشت .<br />
<br />
البته قصد باز كردن اون مبحث رو به صورت كامل ندارم چرا كه استفاده كارآمد از اين قابليت در مباحث قفل گذاري ، نيارمند تكنيكهايي خاص هستش كه متاسفانه امكان آموزش اونها در اين سطح وجود نداره .<br />
<br />
استفاده موثر از اين امكان در قفل گذاري نيازمند تكنيكهايي هستش كه يادگيري اونها براي شما دوستان زمان زيادي رو طلب ميكنه . كليه اون تكنيكها در داخل <span style="font-weight: bold;">Trial Keeper Professional </span>گنجونده شده و بر همين اساس از كنار اون مطلب با ديدي نه چندان عمقي عبور ميكنيم .<br />
<br />
در سرفصلهاي بعدي وارد مباحث عمقي تر قفل گذاري به كمك <span style="font-weight: bold;">Trial Keeper Professional</span> ميشيم . اين اكتيو ايكس بسياري از قابليتهاي حرفه اي رو در داخل خودش به صورت بالقوه حمل ميكنه كه سعي ميكنيم در اين سلسله مطالب اونها رو به صورت حرفه اي تر و كاملتر آموزش بديم و اجرا كنيم .<br />
<br />
<span style="font-weight: bold;">توضيح و يادآوري چندين باره : </span>تكنيك شكستن قفل در داخل Access متفاوت از فايلهاي اجرايي هستش ، بر همين اساس دوستاني كه با نحوه شكستن قفلهاي فايلهاي اجرايي آشنايي دارن شايد تناقضهايي رو با اصول موجود در اون نوع قفل شكني ها مشاهده كنند . برخي مطالب به صورت مشترك در داخل فايلهاي اجرايي نيز ميتونه مد نظر قرار بگيره ، ولي در حال حاضر قصد ايجاد مرزي مشخص رو در اون رابطه ندارم .<br />
خب اميدوارم اين مطلب هم مورد توجه شما قرار گرفته باشه . تا فرصتي ديگه خدا نگهدار .</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش اول]]></title>
			<link>http://cpsd.ir/forum/showthread.php?tid=76</link>
			<pubDate>Sat, 09 Jul 2011 22:46:02 +0430</pubDate>
			<guid isPermaLink="false">http://cpsd.ir/forum/showthread.php?tid=76</guid>
			<description><![CDATA[با سلام<br />
<br />
<div style="text-align: justify;">در این جلسه قصد دارم مقداری در خصوص فراخوانی تابع <span style="font-weight: bold;">Initialize</span> موجود در داخل  <span style="font-weight: bold;">Trial Keeper Professional</span> توضیحاتی رو ارائه کنم .<br />
<br />
در پروسه كنترل بايد دقت كنيد كه <span style="font-weight: bold;">حتما</span>ً روال كنترلی رو به صورت <span style="font-weight: bold;">چندين</span> باره در داخل خود برنامه هم تكرار كنيد ، تا در صورت غير فعال شدن هر يك از نقاط كنترلي در محلهايي ديگه بتونيد بر روي عملكرد قفل<span style="font-weight: bold;"> صحه گذاري </span>كنيد .<br />
<br />
تكرار چندين باره عمليات فراخواني قفل ميتونه تا حدودي بر روي سرعت اجراي خود برنامه تاثير گذار باشه ، نكات زير ميتونه به شما در كاهش اين زمان كمك كنه .<br />
<br />
در داخل <span style="font-weight: bold;">Trial Keeper Professional</span> اگه دقت كرده باشيد وضعيت جاري قفل از طريق كدي كه از تابع <span style="font-weight: bold;">Initialize</span> بازگردانده ميشه قابل تشخيصه .<br />
<br />
به طور مثال كد شماره 1 نشان دهنده عدم پايان دوره آزمايشي و كد شماره 10 نشاندهنده فعال بودن و يا همان ثبت بودن برنامه ميباشد .<br />
<br />
شما ممكنه در نقاط مختلفي بخوايد اين تابع رو بارگذاري كنيد و با استفاده از مقدار برگشتي اون به وضعيت جاري پي ببريد . به طور مثال شما ممكنه اين كد رو در داخل روال انتساب داده شده به دكمه اي كه عمليات نمايش يك گزارش رو به انجام ميرسونه فراخواني كنيد . در صورتي كه اين گزارش در يك جلسه كاري به دفعات زيادي از سوي كاربر مورد استفاده قرار ميگيره ، فراخواني چندين باره قفل ميتونه تا حدودي براي كاربر ايجاد مزاحمت كنه ( با توجه به مكثهاي صورت پذيرفته تا زمان اجراي فرمان مورد نظر )<br />
<br />
راه حل پيشنهادي رو در ادامه ذكر ميكنم تا سربار كاري رو به نحوي قابل توجه كاهش بديم :<br />
<br />
همونطوري كه ميدونيد ميشه اقدام به تعريف يك متغير كرد تا اين متغير عمليات نگهداري يك نوع داده رو به عهده بگيره .</div>
<br />
ما متغير رو به صورت زير تعريف ميكنم :<br />
<br />
<div style="text-align: left;">Dim <span style="font-weight: bold;">XYZ</span> As Byte</div>
<br />
<div style="text-align: justify;">دقت كنيد كه نام <span style="font-weight: bold;">XYZ</span> اختياري بوده و شما هر نامي رو ميتونيد به اين متغير اختصاص بديد .<br />
<br />
نوع اين متغير رو هم از نوع همون مقدار برگشتي از تابع <span style="font-weight: bold;">Initialize</span> قرار داديم يعني Byte .<br />
<br />
در داخل فرمها و گزارشها ميتونيد اين قطعه كد رو در بالاترين بخش ماژول موجود در داخل هر يك از اونها كپي كنيد .<br />
<br />
در اين حالت شما اين متغير رو به نحوي تعريف كرديد كه براي تمامي روالهاي موجود در داخل فرم و يا گزارش مورد نظر قابل دسترسي باشه .<br />
<br />
حال با يك بار فراخواني تابع Initialize و انتساب اون به اين متغير ، در دفعات بعدي شما فقط نيار داريد كه مقدار موجود در داخل اين متغير رو مورد بررسي قرار بديد . به قطعه كد زير توجه كنيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>XYZ=Initialize( ….. )</code></div></div>
</div>
<br />
<div style="text-align: justify;">قبلاً ممكن بود كه شما از خروجي تابع <span style="font-weight: bold;">Initialize</span> به صورت زير استفاده مي كرديد :<br />
<br />
به طور مثال در داخل روال On Click يك دكمه ، دستور زير رو فراخواني كرديد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>If Initialize(…..)&lt;&gt;10 Then<br />
<br />
MsgBox "Sample Nag Message"<br />
<br />
End if</code></div></div>
</div>
<br />
<div style="text-align: justify;">در قطعه كد بالا قصد داريد كه كاربر در صورتي كه برنامه رو ثبت نكرده پيغامي مزاحم رو مشاهده كنه . اگه دقت كرده باشيد در اين حالت كاربر علاوه برمشاهده پيغام مزاحم با <span style="font-weight: bold;">تاخيري</span> در اجراي فرمان مورد نظرش هم مواجه ميشه .<br />
<br />
كد بالا رو ميتونيد به صورت زير بنويسيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>If XYZ&lt;&gt;10 Then<br />
<br />
MsgBox "Sample Nag Message"<br />
<br />
End if</code></div></div>
</div>
<br />
<div style="text-align: justify;">نتيجه در هر دو حالت هموني ميشه كه شما انتظار داريد ولي اين بار <span style="font-weight: bold;">بدون تاخير</span> ناشي از اجراي تابع <span style="font-weight: bold;">Initialize</span><br />
<br />
<span style="font-weight: bold;">نكته : </span>در حالت دوم شما نياز داريد كه <span style="font-weight: bold;">حداقل يك بار </span>تابع <span style="font-weight: bold;">Initialize</span> رو فراخواني كرده باشيد . اين روال ميتونه در داخل رويدار On Load فرم بوده باشه . در اين حالت مقدار برگشتي به XYZ انتساب داده ميشه و شما ميتونيد از اون مقدار به دفعات متوالي در نقاط مختلف استفاده به عمل بياريد ، بدون اينكه تاثيري بر روي كارايي برنامه داشته باشه .<br />
<br />
خوشبختانه تابع <span style="font-weight: bold;">Initialize</span> به گونه اي طراحي شده كه حتي در صورت دور زدن روال كنترلي موجود در داخل برنامه شما ( فراخواني تابع ) كد برگشتي به گونه اي خواهد بود كه دال بر عدم ثبت بودن برنامه خواهد داشت و ليكن جهت حصول اطمينان بيشتر توجه شما رو به نكات زير جلب ميكنم :<br />
<br />
تابع <span style="font-weight: bold;">Initialize</span> رو <span style="font-weight: bold;">حداقل</span> در <span style="font-weight: bold;">دو</span> رويداد متفاوت مورد بازخواني قرار بديد به طور مثال در دو رويداد On Load و On Activate . در انتخاب اين رويدادها به نكات زير توجه داشته باشيد :<br />
<br />
رويداد مرتباً تكرار نشود ( مثل  On Current )<br />
<br />
در داخل رويدادهاي مورد نظر عملياتي ديگر نيز به انجام برسه تا در صورت حذف رويداد توسط كركر بخشي ديگر از برنامه نيز مختل بشه .<br />
<br />
به طور مثال در داخل رويدار On Load <span style="font-weight: bold;">علاوه</span> بر فراخواني قفل عمليات انتساب Control Source رو هم به انجام برسونيد .<br />
<br />
امكان فراخواني قفل در داخل رويدادهاي  تكرار پذير نيز ميتونه  ايده اي بسيار مناسب بوده باشه و ليكن جهت انجام اون نياز به انجام مرحله اي اضافه داريد تا در مجموع منجر به كاهش زمان سربار فراخواني تابع <span style="font-weight: bold;">Initialize</span> بشيد .<br />
<br />
ادامه آموزش رو به جلسه بعد موكول ميكنم .<br />
<br />
موفق باشيد</div>]]></description>
			<content:encoded><![CDATA[با سلام<br />
<br />
<div style="text-align: justify;">در این جلسه قصد دارم مقداری در خصوص فراخوانی تابع <span style="font-weight: bold;">Initialize</span> موجود در داخل  <span style="font-weight: bold;">Trial Keeper Professional</span> توضیحاتی رو ارائه کنم .<br />
<br />
در پروسه كنترل بايد دقت كنيد كه <span style="font-weight: bold;">حتما</span>ً روال كنترلی رو به صورت <span style="font-weight: bold;">چندين</span> باره در داخل خود برنامه هم تكرار كنيد ، تا در صورت غير فعال شدن هر يك از نقاط كنترلي در محلهايي ديگه بتونيد بر روي عملكرد قفل<span style="font-weight: bold;"> صحه گذاري </span>كنيد .<br />
<br />
تكرار چندين باره عمليات فراخواني قفل ميتونه تا حدودي بر روي سرعت اجراي خود برنامه تاثير گذار باشه ، نكات زير ميتونه به شما در كاهش اين زمان كمك كنه .<br />
<br />
در داخل <span style="font-weight: bold;">Trial Keeper Professional</span> اگه دقت كرده باشيد وضعيت جاري قفل از طريق كدي كه از تابع <span style="font-weight: bold;">Initialize</span> بازگردانده ميشه قابل تشخيصه .<br />
<br />
به طور مثال كد شماره 1 نشان دهنده عدم پايان دوره آزمايشي و كد شماره 10 نشاندهنده فعال بودن و يا همان ثبت بودن برنامه ميباشد .<br />
<br />
شما ممكنه در نقاط مختلفي بخوايد اين تابع رو بارگذاري كنيد و با استفاده از مقدار برگشتي اون به وضعيت جاري پي ببريد . به طور مثال شما ممكنه اين كد رو در داخل روال انتساب داده شده به دكمه اي كه عمليات نمايش يك گزارش رو به انجام ميرسونه فراخواني كنيد . در صورتي كه اين گزارش در يك جلسه كاري به دفعات زيادي از سوي كاربر مورد استفاده قرار ميگيره ، فراخواني چندين باره قفل ميتونه تا حدودي براي كاربر ايجاد مزاحمت كنه ( با توجه به مكثهاي صورت پذيرفته تا زمان اجراي فرمان مورد نظر )<br />
<br />
راه حل پيشنهادي رو در ادامه ذكر ميكنم تا سربار كاري رو به نحوي قابل توجه كاهش بديم :<br />
<br />
همونطوري كه ميدونيد ميشه اقدام به تعريف يك متغير كرد تا اين متغير عمليات نگهداري يك نوع داده رو به عهده بگيره .</div>
<br />
ما متغير رو به صورت زير تعريف ميكنم :<br />
<br />
<div style="text-align: left;">Dim <span style="font-weight: bold;">XYZ</span> As Byte</div>
<br />
<div style="text-align: justify;">دقت كنيد كه نام <span style="font-weight: bold;">XYZ</span> اختياري بوده و شما هر نامي رو ميتونيد به اين متغير اختصاص بديد .<br />
<br />
نوع اين متغير رو هم از نوع همون مقدار برگشتي از تابع <span style="font-weight: bold;">Initialize</span> قرار داديم يعني Byte .<br />
<br />
در داخل فرمها و گزارشها ميتونيد اين قطعه كد رو در بالاترين بخش ماژول موجود در داخل هر يك از اونها كپي كنيد .<br />
<br />
در اين حالت شما اين متغير رو به نحوي تعريف كرديد كه براي تمامي روالهاي موجود در داخل فرم و يا گزارش مورد نظر قابل دسترسي باشه .<br />
<br />
حال با يك بار فراخواني تابع Initialize و انتساب اون به اين متغير ، در دفعات بعدي شما فقط نيار داريد كه مقدار موجود در داخل اين متغير رو مورد بررسي قرار بديد . به قطعه كد زير توجه كنيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>XYZ=Initialize( ….. )</code></div></div>
</div>
<br />
<div style="text-align: justify;">قبلاً ممكن بود كه شما از خروجي تابع <span style="font-weight: bold;">Initialize</span> به صورت زير استفاده مي كرديد :<br />
<br />
به طور مثال در داخل روال On Click يك دكمه ، دستور زير رو فراخواني كرديد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>If Initialize(…..)&lt;&gt;10 Then<br />
<br />
MsgBox "Sample Nag Message"<br />
<br />
End if</code></div></div>
</div>
<br />
<div style="text-align: justify;">در قطعه كد بالا قصد داريد كه كاربر در صورتي كه برنامه رو ثبت نكرده پيغامي مزاحم رو مشاهده كنه . اگه دقت كرده باشيد در اين حالت كاربر علاوه برمشاهده پيغام مزاحم با <span style="font-weight: bold;">تاخيري</span> در اجراي فرمان مورد نظرش هم مواجه ميشه .<br />
<br />
كد بالا رو ميتونيد به صورت زير بنويسيد :</div>
<br />
<div style="text-align: left;"><div class="codeblock">
<div class="title">کد: <br />
</div><div class="body" dir="ltr"><code>If XYZ&lt;&gt;10 Then<br />
<br />
MsgBox "Sample Nag Message"<br />
<br />
End if</code></div></div>
</div>
<br />
<div style="text-align: justify;">نتيجه در هر دو حالت هموني ميشه كه شما انتظار داريد ولي اين بار <span style="font-weight: bold;">بدون تاخير</span> ناشي از اجراي تابع <span style="font-weight: bold;">Initialize</span><br />
<br />
<span style="font-weight: bold;">نكته : </span>در حالت دوم شما نياز داريد كه <span style="font-weight: bold;">حداقل يك بار </span>تابع <span style="font-weight: bold;">Initialize</span> رو فراخواني كرده باشيد . اين روال ميتونه در داخل رويدار On Load فرم بوده باشه . در اين حالت مقدار برگشتي به XYZ انتساب داده ميشه و شما ميتونيد از اون مقدار به دفعات متوالي در نقاط مختلف استفاده به عمل بياريد ، بدون اينكه تاثيري بر روي كارايي برنامه داشته باشه .<br />
<br />
خوشبختانه تابع <span style="font-weight: bold;">Initialize</span> به گونه اي طراحي شده كه حتي در صورت دور زدن روال كنترلي موجود در داخل برنامه شما ( فراخواني تابع ) كد برگشتي به گونه اي خواهد بود كه دال بر عدم ثبت بودن برنامه خواهد داشت و ليكن جهت حصول اطمينان بيشتر توجه شما رو به نكات زير جلب ميكنم :<br />
<br />
تابع <span style="font-weight: bold;">Initialize</span> رو <span style="font-weight: bold;">حداقل</span> در <span style="font-weight: bold;">دو</span> رويداد متفاوت مورد بازخواني قرار بديد به طور مثال در دو رويداد On Load و On Activate . در انتخاب اين رويدادها به نكات زير توجه داشته باشيد :<br />
<br />
رويداد مرتباً تكرار نشود ( مثل  On Current )<br />
<br />
در داخل رويدادهاي مورد نظر عملياتي ديگر نيز به انجام برسه تا در صورت حذف رويداد توسط كركر بخشي ديگر از برنامه نيز مختل بشه .<br />
<br />
به طور مثال در داخل رويدار On Load <span style="font-weight: bold;">علاوه</span> بر فراخواني قفل عمليات انتساب Control Source رو هم به انجام برسونيد .<br />
<br />
امكان فراخواني قفل در داخل رويدادهاي  تكرار پذير نيز ميتونه  ايده اي بسيار مناسب بوده باشه و ليكن جهت انجام اون نياز به انجام مرحله اي اضافه داريد تا در مجموع منجر به كاهش زمان سربار فراخواني تابع <span style="font-weight: bold;">Initialize</span> بشيد .<br />
<br />
ادامه آموزش رو به جلسه بعد موكول ميكنم .<br />
<br />
موفق باشيد</div>]]></content:encoded>
		</item>
	</channel>
</rss>