PDA

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



MoniSoft
20th February 2011, 05:04 PM
دریافت متن از دیگر برنامه ها در دلفی
در اینجا به نحوه ارتباط با دیگر برنامه ها در دلفی می پردازم . یک مثال ساده در پایین می تونه خیلی چیزها رو براتون روشن کنه. کاربردی که در پایین براتون عملی آوردم ، نمایش متن داخل باکس هایی است که به صورت ستاره (رمز) نمایش داده میشن ولی خودتون می تونید کاربرد هایی دیگه براش پیدا کنید.

کد نویسی برنامه بسیار آسونه ! این کار از طریق توابع API صورت میگیره . ابتدا باید شی ای که در مختصات ماوس قرار داره رو پیدا کرد ، سپس با فرستان دستور SendMessage می توان ازش متن داخلش رو دریافت کرد. در اینجا اصلا نمی خوام آموزشی بدم ، پس فقط به گذاشتن فایل اجرایی و سورس برنامه اکتفا می کنم. مطمئنا در آینده ای نزدیک بخشی رو هم برای آموزش در نظر می گیرم.


procedure TForm1.Timer1Timer(Sender: TObject); var rPos: TPoint; hWnd: THandle; Text : array [0..255] of char; begin if boolean(GetCursorPos(rPos))then begin; hWnd := WindowFromPoint(rPos) ; SendMessage(hWnd, WM_GETTEXT,SizeOf(Text), integer(@Text)) ; edit1.text := Text; end; end


http://blog.radmanco.ir/wp-content/uploads/2009/02/Get_Text.rar

MoniSoft
20th February 2011, 05:06 PM
.wysiwyg { BACKGROUND: #f5f5ff; FONT: 10pt tahoma,tahoma,tahoma; COLOR: #000000 } P { MARGIN: 0px } .inlineimg { VERTICAL-ALIGN: middle } اشاره گرها چیستند؟
هیچ وقت نفهمیدم چرا وقتی افراد وارد حیطه برنامه نویسی میشوند، با شنیدن نام اشاره گرها (Pointers) وحشت میکنند؛ شاید چون هنوز خودم اشاره گرها را نشناخته ام!!!
اشاره گر را میتوان به معنای واقعی یک مفهوم اساسی در برنامه نویسی دانست، درک آن مشکل است ولی زمانی که آن را بشناسیم واقعا بهتر برنامه مینویسیم، شاید چون در خیلی از موارد عملکردها را حس میکنیم!
اشاره گرها یک نوع داده هستند مثل Integer،Char و همانند اینها که در واقع آدرسهای حافظه را ذخیره میکنند. مساله از این جهت مهم است که هر چیزی که استفاده میکنیم حتما یک محل دارد و بنابراین راه دسترسی به آن همین اشاره گرها هستند. ساده؛ اشاره گر به یک رشته (String) اشاره میکند، وقتی از یک شئ (Object) استفاده میکنیم یا حتی زمانی که یک رویداد (Event) را صدا میزنیم، همه و همه اشاره ای به یک اشاره گر هستند. فرض کنید میخواهیم در صفحه نمایش ایجاد افکتهای گرافیکی کنیم، این کار از طریق نوشتن مقادیر مورد نظر در نقاط صفحه نمایش (Pixels) امکان پذیر است، پس کافی است اشاره گری به اولین نقطه داشته باشیم و کل نقاط در اختیار ما هستند.
البته اشاره گرها در دلفی آنگونه که در زبانهای C و C++ مورد توجه هستند، استفاده نمیشود، خصوصا به این دلیل که در Object Pascal سعی شده تا حد امکان از درگیری مستقیم برنامه نویس با اشاره گرها جلوگیری شود. ۲٫ چرا به اشاره گرها نیاز داریم؟
خوب! واقعا من به عنوان یک برنامه نویس چه نیازی به دانستن محل حافظه یک متغییر دارم!؟
یک جا نوشته بود: “اشاره گرها میتوانند به هر چیزی اشاره کنند، پس به آنها نیاز داریم!!!!!!!!!!”
شاید بد نبود به ایشان میگفتیم: چقدر باهوش!!!!
اما با کمی دقت میتوان فهمید که همین حرف در واقع اصلی است که به ما میفهماند چرا اشاره گرها را به کار میگیریم! شما میتوانید با اشاره گری به یک شئ اشاره کنید و آنرا تغییر دهید. بعد به راحتی با تغییر آدرس اشاره گر مربوطه به یک شئ دیگر اشاره میکنید و آنرا تغییر میدهید و داستان ادامه دارد تا خسته شوید! هر چیزی -و به معنای واقعی هر چیزی- که در یک برنامه استفاده میشود در محلی از حافظه قرار گرفته است.
جالب است اگر به این صورت به اشاره گرها نگاه کنیم که آدرس داده های برنامه را در زمان اجرا در اختیار ما قرار میدهند، حتی آنهایی که در زمان اجرا ایجاد شده اند و شاید حتی نام مشخصی هم نداشته باشند.

گفته شد اشاره گرها هم یک نوع داده هستند، پس باید امکان تعریف کردن آنها را داشته باشیم، اما چگونه؟
برای تعریف اشاره گرها از علامت ^ استفاده میشود. مثال زیر تعریف اشاره گری به یک داده از نوع Integer را نمایش میدهد:

کد:
Var pntMyInt: ^Integer; ۳٫ استفاده از اشاره گرها در دلفی
اما بعد از تعریف اشاره گر چگونه یک آدرس به آن نسبت دهیم؟ گفته شد اشاره گرها میتوانند به هر چیزی اشاره کنند، یک متغییر، یک تابع یا هر چیز دیگری، برای نسبت دادن هر کدام از اینها به یک اشاره گر از علامت @ استفاده میشود:


کد:
Var tmpInt: Integer; pntMyInt: ^Integer; Begin … pntMyInt := @tmpInt; … End;
دقت شود کد فوق مقدار متغییر tmpInt را به pntMyInt منتقل نمیکند، بلکه فقط آدرس محل حافظه ای که tmpInt در آن قرار دارد را در pntMyInt ذخیره میکند. فرض کنید بخواهیم مقدار ذخیره شده در tmpInt را تغییر دهیم. کد زیر را ببینید:

کد:
Var tmpInt: Integer; pntMyInt: ^Integer; Begin … tmpInt := 100; … pntMyInt := @tmpInt; … pntMyInt^ := 102; … End;
کد فوق را بررسی میکنیم؛ در ابتدای کار با استفاده از روش مقدار دهی مستقیم عدد ۱۰۰ را به متغییر tmpInt نسبت دادیم. سپس در مراحل بعدی آدرس محل حافظه این متغییر را در اشاره گر pntMyInt ذخیره کردیم، توجه توجه! این کار با مساوی قرار دادن دو متغییر کاملا متفاوت است و در اینجا عدد ۱۰۰ در اشاره گر ما قرار نمیگیرد.
اما pntMyInt^ := 102 به چه معنی است؟ خیلی راحت: عدد ۱۰۲ را در محل حافظه ای که pntMyInt به آن اشاره دارد ذخیره کن، و آن محل حافظه جایی نیست جز متغییر tmpInt. چه اتفاقی افتاد؟ tmpInt := 102 ، به همین راحتی! هر گاه علامت ^ بعد از اشاره گر قرار گرفت مقدار ذخیره شده در آن محل حافظه مد نظر است.
خوب! پس ما میتوانیم محل حافظه ای که اشاره گر به آن اشاره میکند را بخوانیم یا بنویسیم (تغییر دهیم)، همچنین مقدار متغیری که در محل حافظه ای که اشاره گر به آن اشاره دارد را بخوانیم یا بنویسیم.
گفته شد که اشاره گرها به اشیاء هم اشاره میکنند پس نباید عجیب باشد اگر جایی ببینیم:
کد:
formPointer : ^TForm1;

اجازه دهید کمی درگیرتر شویم! با یک کد شروع میکنیم:

… کد:
type TMyObject = record MyCode: Integer; MyText: String; end; pntMyObject = ^TMyObject; … procedure CheckMyObjectPointer; var Object1, Object2: TMyObject; Pointer2Object: pntMyObject; begin Pointer2Object := @Object1; Pointer2Object^.MyCode := 25; Pointer2Object^.MyText := ‘First’; Pointer2Object := @Object2; Pointer2Object^.MyText := ‘Second’; end; …
صبر کنید! هنوز برای فرار کردن خیلی زوده!
به نظر پیچیده هست ولی اگر کمی دقت کنیم خیلی هم مشکل نیست. بیایید با هم این کد را بررسی کنیم:
در قسمت تعریف داده ها یک نوع شئ شخصی تعریف شد، خیلی هم مهم نیست، شما میتوانید از اشیاء موجود دلفی استفاده کنید. اما در قسمت دوم تعریف انواع داده ها هم اتفاق خاصی نیافتاده است. این قسمت را اینجا آوردم تا با این حالت هم آشنا شوید. شما میتوانید انواع اشاره گرها را به این صورت استفاده کنید، در واقع در اینجا هر وقت در برنامه بخواهیم اشاره گری به TMyObject تعریف کنید به جای ^TMyObject به راحتی از pntMyObject استفاده میکنید. اما در رویه (Procedure) نوشته شده، ابتدا در بخش تعریف متغیرها دو شئ از نوع TMyObject تعریف میشود ونیز یک اشاره گر به همان نوع شئ. در ابتدای رویه اشاره گر با آدرس شئ اول تنظیم میشود و خیلی راحت بااستفاده از مواردی که در بالا گفته شد مقدار دهی میشود. سپس اشاره گر ما به شئ دوم نسبت داده میشود و آدرس محل حافظه شئ دوم در آن قرار میگیرد و باقی ماجرا…
خواص (Property) یک شئ را در نظر بگیرید که به این صورت قابل تغییر هستند!
شاید از خودتان بپرسید چرا من مسیر خود را طولانی کنم؟ گفته بودم که دردلفی نیاز به اشاره گرها مانند C و C++ احساس نمیشود، اما به شما میگویم گاهی این کار مسیر شما را خیلی بیشتر از آن چیزی که فکر میکنید کوتاه میکند، استفاده از بعضی توابع API را در نظر بگیرید…

تا اینجا از اشاره گرهایی استفاده کردیم که به نوع داده مشخصی اشاره داشتند، در این حالت دلفی به اندازه کافی باهوش هست که اشتباهات ما را در استفاده از اشاره گر به ما گوشزد کند. اما گاهی مجبوریم از اشاره گرهای بی نام و نشانی استفاده کنیم که به آنها اشاره گر عمومی میگوییم و قادرند به هر چیزی بدون در نظر گرفتن نوع آن اشاره کنند. این نوع اشاره گرها در دلفی به نوع داده ای Pointer اطلاق میشوند. به مثال زیر توجه کنید:


کد:
… procedure CheckGenericPointer( const pntGPointer: Pointer); var tmpInt: ^Integer; MyCode: Integer; begin tmpInt := pntGPointer; MyCode := tmpInt^; … end; procedure CallCheckProc; var MyInt: Integer; begin MyInt := 100; CheckGenericPointer( @MyInt); end; … ۴٫ اشاره گرهای عمومی در دلفی

در کد فوق دو مورد در نظر گرفته شده است، هم از اشاره گرهای عمومی استفاده شده و هم نشان داده شده است که چگونه میتوانیم از اشاره گرها به عنوان پارامتر توابع استفاده کنیم. نکته ای که باید در نظر بگیریم نحوه استفاده از اشاره گر عمومی است. یک اشاره گر عمومی ابتدا باید به یک اشاره گر دیگر نسبت داده شود تا قابل استفاده باشد. باقی موارد پیش از این بررسی شده اند. قبول دارم که استفاده از اشاره گرها در این کد منطقی نیست، پس کجا از اشاره گرهای عمومی استفاده کنیم؟ تا به حال از آرایه های پویا استفاده کرده اید؟ هر جایی که به نوعی با مفهوم حافظه پویا (Dynamic Memory) سر و کار داشته باشیم اشاره گرها به کمک ما می آیند، هر چند دلفی در اکثر این موارد نیز کار ما را آسان نموده است. برای نمونه TList را در نظر بگیرید، نگاهی به مثالهای همراه دلفی برای این کلاس بیاندازید، ضرر نمیکنید…

فکر نمیکنم کلمه مناسبی برای بیان این مفهوم پیدا شود. یک اشاره گر که به هیچ عنصری نسبت داده نشده باشد میتواند خطرناک باشد. اشاره گرها به ما اجازه میدهند مستقیما با حافظه کامپیوتر کار کنیم. خوب پس با اشاره گرهایی که -فعلا- به چیزی اشاره نمیکنند چه کنیم؟ راه حل این مشکل nil است. nil ثابتی (Constant) است که میتوانیم آنرا به هر اشاره گری نسبت دهیم. وقتی nil به اشاره گری نسبت داده شود، آن اشاره گر به جایی رجوع نمیکند مثل یک آرایه پویای خالی! به این صورت از بروز حوادث نامطلوب پیشگیری میکنیم. کد زیر نمونه این کار را نمایش میدهد:
کد:
pntMyPointer := nil; ۵٫ اشاره گرهای Nil

طبیعی است که شما قصد استفاده از این اشاره گر را دارید بنابراین قرار نیست همواره به این

حالت باقی بماند، بنابراین نیاز به کنترل آن در قسمتهای دیگر برنامه دارید، کد زیر را ببینید:

کد:
If pntMyPointer <> nil then …


اگر nil بود آنرا به محل مورد نظر خود نسبت دهید. راه دیگر استفاده از تابع Assigned است:


کد:
If Assigned( pntMyPointer) Then …

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

MoniSoft
20th February 2011, 05:08 PM
محیط دلفی برای برنامه نویسی یکی از بهترین محیطهای برنامه نویسی است گذشته از کارکرد داخلی و کمپایلر آن که بسیار قوی و سریع است، محیط آن یعنی ide آنهم قدرت بسیار زیادی دارد که باعث شده یکی از بهترین ادیتورها باشد. در این مقاله من سعی بر این داشته ام تا با ارائه یک سری از نکات و کلیدهای میانبر که می توانند برای کار در دلفی بسیار مفید و کارا باشند، کمک کنم تا شما بتوانید با قدرت بیشتر به برنامه نویسی و کار در این محیط قدرتمند ادامه دهید.
در قسمت اول مقاله که در حال حاضر در مقابل شماست من یک سری از کلیدهای میانبر و ترکیبی مورد استفاده در ide دلفی را بصورت لیست وار و همراه یک توضیح کوچک آورده ام. دوستان عزیز برنامه نویس ممکنه که شما مدتها با دلفی مشغول برنامه نویسی بوده باشید اما من یقین دارم که در این لیست نکات و روشهای جدیدی را خواهید آموخت.


جستجو در متن بصورت مستقیم:
برای اینکار کلیدهای Ctrl+E را بفشارید و بدنبال آن شروع به تایپ کلمه مورد نظر کنید نتیجه آن را خود ببینید. برای اینکه به کلمه بعدی بروید کافیست کلید F3 را بزنید.


پرش به قسمت تعریف یک شی (Object):
ببنید شی مورد نظرتون (از قبیل VCL, Procedure, Function,…) در کجا و چطور تعریف شده می توانید کلید Crtl رو پایین نگه داشته و روی شی مورد نظر Click کنید


برای تغییر حالت کاراکترها:
شما می توانید یک قسمت از متن (که ممکن است با حروف بزرگ و یا کوچک تایپ شده باشد) را انتخاب کنید و با زدن کلیدهای Ctrl+O+U به ترتیب تمامی حروف کوچک آن قسمت از متن را به حروف بزرگ و تمامی حروف بزرگ آنرا به حروف کوچک تبدیل کنید. برای تعییر حالت یک کلمه نیز میتوانید روی کلمه مورد نظر رفته و کلیدهای Ctrl+K+F برای بزرگ کردن و کلیدهای Ctrl+K+E را برای کوچک کردن حروف آن کلمه بکار برد.


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

Ctrl+Shift+R را بفشارید و آن سری کارهایی را که می خواهید را انجام دهید و سپس برای اینکه به کار ضبط ماکرو پایان دهید کلیدهای Ctrl+Shift+R را دوباره بزنید. حال برای استفاده از ماکرو کافیست در هر جا که لازم بود کلیدهای Ctrl+Shift+P را بفشارید.
انتخاب متن بصورت مربعی:
اگر شما از کهنه کارهای کامپیوتر باشید حتما از زمان داس یادتون هست که برنامه ای بود به نام

PE2 که یکی از امکانات بسیار جالبش این بود که یک مربع از متن رو میتوانستین انتخاب کنید و آنرا کپی یا حذف کنید. بله درست متوجه شدید در محیط دلفی هم شما اینکار را میتوانید انجام دهید اما نه به مشکلی PE2 بلکه اینکار را میتوانید فقط با گرفتن کلید Alt و کشیدن موس روی متن انجام دهید. هر چند ممکن است در نگاه اول زیاد این امکان مفید به نظر نیاید ولی بعضی وقتهای خیلی کار را راحت میکنه، که حتماً تجربه خواهید کرد.

گذاشتن علامت روی متن:
این کار که به

BookMark معروف است بسیار مفید و کارا می باشد. در هنگامی که شما روی قسمتی از متن برنامه کار میکنید و می خواهید به یک قسمت دیگر بروید ممکن است برای برگشتن به مکان اول خود کمی مشکل پیدا کنید. ولی شما میتوانید با زدن چند دکمه به محل مورد نظرتون باز گردید. برای اینکار در خطی که قصد دارید علامت بگذارید کلیدهای Ctrl+Shift+0..9 را بفشارید. منظور اینست که کلیدهای Ctrl+Shift را نگه دارید و یکی از اعداد ۰ تا ۹ را وارد کنید تا آن خط به همان شماره علامت گذاری شود و سپس هر جا که خواستید بروید و سپس هر بار که کلید Ctrl را نگه دارید و شماره مورد نظر را وارد کنید به همان خط باز خواهید گشت. البته توجه داشته باشید که فقط می توانید ۱۰ خط را با این روش علامت گذاری بکنید و برای برداشتن علامت ها کافیست روی همان خط دوباره کلید Ctrl+shift و شماره‌ای که برای آن خط وارد کرده اید را بفشارید با اینکار علامت آن خط برداشته می شود.

ایجاد کلاس مورد نظر:
شما هنگامی که در قسمت
Private و یا Public یک type، روال یا تابع درست کردید لازم دارید که قسمتی را برای قرار دادن کدهای مربوط به آن روال یا تابع را ایجاد کنید. برای اینکار شما پس از اینکه نام تابع را تایپ کردید می توانید کلیدهای Ctrl+Shift+C را فشار دهید تا دلفی یک قسمت برای نوشتن کدهای مورد نظرتان ایجاد کند. ظاهر کردن پنجره
Codeinsight:

ظاهر کردن پنجره
Private و یا Public یک type، روال یا تابع درست کردید لازم دارید که قسمتی را برای قرار دادن کدهای مربوط به آن روال یا تابع را ایجاد کنید. برای اینکار شما پس از اینکه نام تابع را تایپ کردید می توانید کلیدهای Ctrl+Shift+C را فشار دهید تا دلفی یک قسمت برای نوشتن کدهای مورد نظرتان ایجاد کند. Codeinsight:



ظاهر کردن پنجره Codeinsight:
شما حتما به اهمیت و مفید بودن این قسمت دلفی واقفید که در هنگام کد نویسی تا چه حد می تواند کارها را راحت کند. بله در هنگام وارد کردن کدها بعد از وارد کردن نام یک کلاس و یا Object با زدن یک نقطه (.) پنجره Code Insight‌ ظاهر می شود. حال در بعضی وقتها شما ممکن است که نقطه را قبلا وارد کرده باشید و یا در مواقع دیگر این پنجره ظاهر نشود. در این صورت برای اینکه پنجره را ظاهر کنید باید دوباره نقطه را وارد کنید ولی راه آسانتری هم وجود دارد و آن اینست که کلیدهای Ctrl+Speacebar را فشار دهید.




ظاهر کردن پنجره CodeParameter:
همانند بالا در هنگام ظاهر شدن Hint مربوط به راهنمای توابع که معمولاً بعد از گذاشتن پرانتز مربوط ظاهر میشود و در مورد پارامترهای لازم می باشد نیز می توانید از کلیدهای Ctrl+Shift+SpaceBar استفاده کنید.


رفتن از قسمت تعریف توابع و روالها به قسمت کد آنها:
همیشه این نیاز وجود خواهد داشت که شما در هنگامی که دارید به دنبال یک روال در قسمت
type میگردید بعد از پیدا کردن نام آن می خواهید که خود آن تابع یا روال را نیز ببنید. برای اینکار خوب حتما نام آن را جستجو میکنید ولی یک راه آسانتر اینست که شما روی نام آن تابع قرار گیرید و کلیدهای Ctrl+Shift+Up/Down را بزنید. در اینحالت اگر روی کد تابع باشید به قسمت تعریف آن خواهید رفت.

MoniSoft
20th February 2011, 05:10 PM
اينتربيس چيست ؟

اينتربيس يك RDBMS محصول شركت بورلند است كه بخاطر footprint كوچك ، هزينه پايين و نيازمندي به ادمينيستريشن !! در حد صفر ، از ساير DMMS ها مجزا ميشود.و در دو نسخه سرور و دسكتاپ ، توسط بورلند عرضه ميشود .

اينتربيس را كجاها ميتوان اجرا كرد ؟

اينتربيس را ميتوان بر روي سيستم عاملهاي ويندوز( 2000، 2003 ، NT ، XP ) ، لينكس ( Redhat, SUSE‌( ، سولاريس ( 7و8و9) و پلتفرمهاي جاوا و دات نت ، اجرا نمود.

چه IDE هايي از اينتربيس حمايت ميكنند ؟

Delphi , Kylix, CPP Builder, C sharp Builder, J Builder بطور درون ساخت و مجتمع ، از اينتربيس حمايت ميكنند . براي مثال ، تصويرهايي از كامپوننتهاي كار با اينتربيس را در محيط دلفي ميتوان مشاهده نمود :

علاوه بر آن ، حمايت اينتربيس از JDBC , ODBC باعث ميشود كه IDE هاي ديگري نيز از آن طريق بتوانند از آن استفاده كنند.

http://www.heresmyimage.com/uploads/0ac7eb0517.png

ويژگيها . مزايا :

اينتربيس داراي يك معماري MultiVersion است كه توسعه دهندگان را از نگراني درباره مسائل همزماني ، بازيابي از برخورد و مديريت حافظه ، رهايي ميبخشد.

اينتربيس براي جايي طراحي شده كه هيچ ديتابيس ادميني حضور نداره ! crash recovery هاي اتوماتيك ، بك آپ هاي آنلاين ، مديريت اتوماتيك كاربران از جمله اين موارد است . بهينه سازي مبتني بر هزينه ي كوئري ها ، garbage collection خودكار و rebalance كردن ايندكسها بصورت اتوماتيك ، از جمله مواردي ست كه نياز به حضور ادمين را تقليل ميدهد.

Cross Platform بودن ، از ديگر ويژگيهاي اينتربيس هست كه باعث ميشود بتوان آنرا در ويندوز ، جاوا ، دات نت ، لينكس و سولاريس ، اجرا نمود.

Foot print پايين ، اين امكان را فراهم ميسازد كه بتوان اينتربيس را حتي بر روي سيستمي با 32 مگابايت فضاي RAM و 15 مگابايت فضاي ديسك سخت هم نصب و استفاده نمود.

چه كساني از اينتربيس استفاده ميكنند ؟

شركتهايي مانند متورولا ، نوكيا ، بوئينگ و بخشهايي از ارتش ايالات متحده و سازمان فضايي ناسا ، از جمله مشتريان اينتربيس هستند.

اينتربيس و رقبا :

اينتربيس و MySQL :



مزاياي اينتربيس درمقابل MySQL را ميتوان بصورت فهرست وار زير ، ليست كرد كه در ادامه ، توضيح مختصري نيز درباره برخي از آنها ارائه خواهد شد :



تريگرها
Stored Procedure ها
رخداد هاي سمت كلاينت
پشتيبان گيري آنلاين
Crash Recovery سريعتر
ارائه انواع داده اي جهت محاسبات دقيقتر اعشاري
كنترل دسترسي آسانتر توسط Role ها
View ها
ارائه انواع رشته اي ساده تر و سازگارتر با استانداردهاي ANSI
Default Value هاي قدرتمندتر .
ابزارهاي Performane Monitoring كاراتر
Configuration Option هاي بسيار كمتر و ساده تر
N-way Replication




پشتيبان گيري آنلاين :

InnoDB يك موتور ديتابيس MySQL است كه امكان پشتيبان گيري آنلاين را فراهم ميكند ( و فكر ميكنم تنها گزينه ي موجود باشد ) ، براي استفاده از آن ، بايستي InnoDB Hot Backup را به قيمت سالانه ي 450 دلار و يا دائمي 1150 دلار خريداري نماييد . اين درحاليست كه چنين امكاني بصورت درون ساخت در اينتربيس موجود هست . IBConsole براي چنين روزهايي در اينتربيس بوجود آمده !

سرعت ريكاوري :

مدت زمان لازم براي ريكاور كردن يا ريستارت كردن يك MySQL ، به سايز لاگهاي تراكنشهايي بستگي دارد كه بايستي رولبك ! و .. شوند بستگي دارد كه حتي آن هم به نحوه كانفيگ كردن ديتابيس توسط ادمين بستگي پيدا ميكند.

در حاليكه ريكاوري يا ريستارت بر روي اينتربيس ، بصورت * آني * صورت ميگيرد ، به اين دليل كه هيچ تغييري من جمله برگرداندن تراكنشها و ... لازم نيست كه بر روي ديتابيس صورت بگيرد . بلكه بجاي آن ، اينتربيس بسادگي يك بيت وضعيت را براي هر تراكنش ، ست ميكند ! و versioning engine بطور اتوماتيك ركوردهاي مزبور را درنظر نميگيرد . اين ركوردها هم در هنگام استفاده عادي از ديتابيس و بدون اينكه فشار جديدي به سيستم تحميل كنند ، بطور خودكار توسط Garbage Collector موجود در اينتربيس ، حذف ميشوند .

Domain ها :

موقعيتي را در نظر بگيريد كه ميخواهيد يكي از انواع داده اي فيلدهاي جداول را تغيير بدهيم . مثلا فيلدي براي شماره قطعات داشته ايم كه اكنون نياز به ذخيره اعداد بزرگتري داريم .... در هنگام استفاده از MySQL ، راه حل اين هست كه فيلد مزبور را در همه جدولهايي كه در آنها وجود دارد ، تغيير دهيم !

ولي اينتربيس ، نوع داده اي بنام Domain تعريف كرده كه آنرا ميتوانيم بر حسب يكي از انواع داده اي موجود در اينتربيس ،‌تعريف كنيم . مثلا در موقعيت بالا ، فرض كنيم كه فيلد اوليه ، 10 رقمي بوده باشد ، پس در اينتربيس ، چنين تعريف شده :





CREATE DOMAIN PART_NO_TYPE VARCHAR(1O) NOT NULL






و اكنون كه ميخواهيم براي مثال ، سايز آنرا به 14 كاراكتر تغيير دهيم ،‌كافيست كه چنين عمل كنيم :







ALTER DOMAIN PART_NO_TYPE VARCHAR(14)






همين ! ديگه لازم نيست به سراغ تك تك جداول برويد و تغييرات را اعمال كنيد !

ساير موارد :

اينتربيس علاوه بر پروتكولهاي TCP/IP و NetBEUI كه توسط MySQL نيز پشتيباني ميشود ، از IPX/SPX نيز پشتيباني ميكند.

ماكزيمم سايز ديتابيس در MySQL 4.1 alpha ، به ميزان 64000 گيگابايت ميباشد و اين سايز در اينتربيس ، * نامحدود * است

اينتربيس بر خلاف MySQL 4,1 alpha داراي انواع داده اي بولين ، نامريك ، دسيمال و كاراكتارهاي استاندارد Ansi نيز ميباشد .

اينتربيس بر خلاف MySQL 4.1 alpha ، از انواع Replication هاي N-way و سنكرون نيز حمايت ميكند.

اينتربيس و Micro$oft SQL Server ‌:

مزاياي اينتربيس نسبت به MsSQLServer عبارتند از :

Crash recovery سريعتر
مديريت ايونت ساده تر
سايز كوچكتر
هزينه هاي مالكيت و آموزش كمتر
نيازمنديهاي سيستمي كمتر
پشتباني Cross Platform
گزينه هاي Deployment متنوع تر
همزماني بيشتر در محيطهاي read/write

هنگامي كه سرويسهاي data analysis به يك view يه با ثبات از ديتا در يك زمان خاص احتياج دارند ، مكانيزم SQL Server اين هست كه با فراهم كردن قفلها ، ساير كاربران را از دسترسي به اطلاعاته مورد تحليل باز ميدارد تا كار تحليل تمام شود . !!

در حاليكه در اينتربيس چنين امكاني را بدون نياز به قفل كردن داده ها و مانع شدن از دسترسي كاربران به داده ها ، در اختيار داريم ، بدين صورت كه اينتربيس از ديتاهاي مورد نظر snap shot تهيه ميكند ...( و اگر اشتباه نكنم ، اين همان ايده اي است كه ماكروسافت بالاخره در SQL Server 2005 از آن تقليد كرده ! ) .

نحوه رفتار با Lock ها :

موقعيتي را در نظر بگيريد كه كاربر الف ، ركوردي را آپديت ميكند و سپس بدون كاميت كردن تراكنش مربوطه ، براي نماز و ناهار!! اتاقش را ترك ميكند . در همين حال ، كاربر ب ، دستور select ي اجرا ميكند كه حاوي ركورد قفل شده ي كاربر الف باشد !

مواجه ي SQL Server : تراكنش كاربر ب ، تا هنگامي كه تراكنش كاربر الف ، آزاد نشده ، بايستي كه منتظر بماند !! راه حل ماكروسافت به اين مشكل ، اين بوده كه time out در نظر بگيرد كه توسط دستور SET LOCK_TIMEOUT اعمال ميشود . ولي نقطه ضعف اين راهكار در اين هست كه اين دستور ،‌همه تراكنشهاي كانكشن جاري را تحت تاثير قرار ميدهد .

مواجه ي اينتربيس : اينتربيس سطوح ايزولاسيون تراكنش snap shot را فراهم نموده كه هميشه آخرين version از از سطري كه در زمان آغاز تراكنش ، commit شده بوده را ميخواند. كه نتيجتا" اخيارات زير را ممكن ميسازد :

يك : ميتوان عليرغم وجود يك نسخه commit نشده ، آخرين نسخه ي commit شده از سطر مزبور را خواند.

دو : ميتوان صبر كرد تا تكليف نسخه ي commit نشده ،‌معلوم شود !

سه : ميتوان فورا يك وارنينگ! دريافت كرد كه ميگويد نسخه اي commit نشده از سطر مزبور ، موجود است .

تنظيمات بالا ، در *سطح تراكنش* قابل تنظيم هستند . بنابراين انتخابي كه براي يك تزاكنش ميكنيم ، ساير تزاكنشها و بدتر از آن ، كل كانكشن را تحت تاثير قرار نميدهد.

اينتربيس ، از تريگرهاي Before هم پشتيباني ميكند ، در حاليكه Sql Server چنين امكاني ندارد . در عوض ماكروسافت تريگرهاي Instead of را ارائه كرده كه باز هم دچار مشكلاتي ميشوند كه در صورتي كه علاقمند بوديد ، در فرصته بعدي ، يك مطالعه موردي در اين زمينه ، ارائه ميشود !

سرعت ريكاوري بالاتر :

ريكاوري ديتابيسهاي SQL Server ، بستگي به check point هايي داره كه ادمين تعريف كرده و يا بطور اتوماتيك توسط خوده ديتابيس ، لحاظ ميشه . در هرحال ، براي ريكاوري ، لاگهاي تراكنشها توسط Sql Server پردازش ميشه و هي اونقدر به عقب برميگرده تا به آخرين check point برسد كه امري ست زمان بر !

در حاليكه اينتربيس براي ريكاوري ، از مكانيزم خشنگي استفاده ميكرد كه در بحث مقايسه اش با Sql Server به آن اشاره شد .

هزينه ها :

با فراموش كردن اين مطلب كه در ايران ميتوان نرم افزارها را به قيمت 350 تومان از حراجيهاي حوالي ميدان انقلاب و شايد داخل گاري ! تهيه كرد و با يادآوري اين مطلب كه * نرم افزار* در اون ور دنيا ، چيزي لوكس و تجملي نيست و حساب ، حسابه دودوتا چهار تا هست ! ، يك كم هم آمار و ارقام و هزينه هاي مالكيت را بررسي كنيم:

براي مثال ، هزينه مالكيت اينتربيس براي 20 كاربر و دوپردازنده ، 3300 دلار و براي Sql Server ، 4500 دلار هست و يا براي مثال ، هزينه اينتربيس 200 كاربره و چهارپردازنده ، معادل 7200 دلار و براي Sql Server معادل 20000 دلار ميباشه .

Deploy كردن ::

مثلا در مورد MSDE :: معايب : در درون MSDE‌ ، توسط كارمندان بشر دوست ماكروسافت ، چيزي گذاشته شده بنام concurrency workload governor كه لطف ميكنه و باعث ميشه كه اگر تعداد concurrent batch workload هاي شما از پنج عدد بيشتر شد ، عمدا باعث كند تر عمل كردن سيستم بشه !! و هرچي از پنج تا بيشتر بشه ، سرعت سيستمتون را پايين تر مياره و كندتر ميكنه تا اونقدر شاكي بشيد و اشكتون دربياد كه * پول * بدهيد و نسخه گرانقيمتي از ماكروسافت خريداري كنيد !

حداكثر سايز ديتابيس در MSDE ، 2 گيگ است ! همين ! تاكيد ميكنيم كه سايز كل ديتابيس ! نه فقط مثلا سايز جداول !

ساير موارد :

عدم وجود مشكل lock escalation در اينتربيس
عدم وجود مشكل conversion deadlock در اينتربيس
بهره مندي اينتربيس از تريگرهاي before
توانايي اينتربيس در تعيين و كنترل نوبت اجرا شدن تريگرها
Crash recovery آني در اينتربيس
15 مگابايت فضاي ديسك سخت جهت نصب اينتربيس ،‌در مقابل حدودا 250 مگابايت فضاي مورد نياز Sql Server

MoniSoft
20th February 2011, 05:12 PM
راهنماي استفاده ازmatlab
تهيه كننده : monisoft

MoniSoft
20th February 2011, 05:15 PM
اگه از دست پنجره (window) هاي مستطيلي خسته شدين مي تونين روال زير رو پيش بگيرين:

پس از ايجاد برنامه, يك جزء تصوير (TImage) روي فرم قرار دهيد.
فرم را جفت كليك كنيد تا روتين مربوط به FormCreat باز بشه. پروسيجر زير را «قبل» از FormCreat بنويسيد:


procedure TForm1.WMNCHitTest(var Message : TWMNCHitTest);
begin
inherited;
if Message.Result = htClient then Message.Result := htCaption;
end;



روتين مربوط به FormCreat را بصورت زير تغيير دهيد:



procedure TForm1.FormCreate(Sender: TObject);
var TransparentColor : TColor;
X,Y, dX, dY : integer;
Points : array[0..10000] of TPoint;
Vertex : array[0..5000] of Integer;
CountVertex : integer;
BeginPoligon : Boolean;
P : TPoint;
Region : HRGN;
Incr : Integer;
begin
L:=50;
TForm(Sender).BorderStyle := bsNone;
dY := Height - ClientHeight;
CountVertex := -1;
Incr := 1;
with Image1,Canvas do begin
dX := Left;
inc(dY,Top);
TransparentColor := Pixels[0,0];
Y := 0;
while Y < Height do begin
X := 0;
BeginPoligon := False;
while X < Width do begin
if (not BeginPoligon) and (Pixels[X,Y] <> TransparentColor) then begin
BeginPoligon := True;
P := Point(X + dX,Y + dY);
end;
if BeginPoligon and (Pixels[X,Y] = TransparentColor) then begin
BeginPoligon := False;
inc(CountVertex);
Vertex[CountVertex] := 4;
Points[CountVertex * 4] := P;
Points[CountVertex * 4 + 1] := Point(X + dX, Y + dY);
Points[CountVertex * 4 + 2] := Point(X + dX, Y + Incr + dY);
Points[CountVertex * 4 + 3] := Point(P.X, P.Y + Incr);
end;
inc(X,Incr);
end;
inc(Y,Incr);
end;
end;
Region := CreatePolyPolygonRgn(Points, Vertex, CountVertex, WINDING);
SetWindowRgn(TForm(Sender).Handle, Region, True);
end;


والسلام! كار تمومه. حالا يه تصوير (من باشم سياه و سفيد مي ذارم) در Image1 بار كنيد. توجه داشته باشيد كه پيكسل بالا سمت چپ هر رنگي داشته باشد, بعنوان رنگ زمينه انتخاب شده و شفاف خواهد شد (Transprant) يعني اگه همه ي تصويرتون مثلاً آبي باشه اما پيكسل اون گوشه زرد باشد, رنگ زرد ها بعنوان زمينه محسوب خواهند شد.
تصوير باز شده بايد bitmap باشد تا قابل پردازش باشد.
مثلا مي تونين از paint مال ويندوز استفاده كنين. يعني برين يه بيضي (توپر- توخالي- غير منظم-منظم و...) اونجا بكشين و save كنين. بياين تو Image1 باز كنين. حالا اگه برنامه رو اجرا كنين يه پنجره ي بيضي شكل دارين!
تبريك مي گم! از دست اين پنجره هاي مزخرف خلاص شدين. اونم فقط بدست دستور زير:
SetWindowRgn(TForm(Sender).Handle, Region, True

MoniSoft
20th February 2011, 05:17 PM
در برنامه هاي مختلف پردازش كلمه, هرگاه يكي از كليدهاي Capslock يا Insert زده مي شود, معمولاً وضعيت اين كليدها نشان داده ميشود. يعني (Capslock(on/off و Insert/Overwrite مشخص ميشوند. براي اين منظور تابع GetKeyState وجود دارد. (مربوط به خود دلفي نيست. مال WinAPI است. يعني منحصر به دلفي نيست. در C و VB هم مي توان استفاده كرد.) اين تابع با گرفتن كدِ اسكي (ASCII) كليد مربوطه در صفحه كليد, روشن خاموشي آن را نشان خواهد داد. براي كليدهاي معمولي نيز بالا يا پائين بودن را برمي گرداند.
براي Capslock:
مقدار برگشتي اين تابع روشن يا خاموش بودن چراغ CapsLock روي صفحه كليد است:
روشن و خاموشي با بيت كم ارزشترين تعيين مي شود. فشردن كليد و رها كردن با پر ارزش ترين بيت :
00000001 در مبناي دو: حروف بزرگ روشن است و كليد رها شده است.(مبناي ده: 1)
10000001 در مبناي دو: حروف بزرگ روشن است و كليد هنوز رها نشده است.(مبناي ده: 127)
00000000 در مبناي دو: حروف بزرگ روشن نيست و كليد رها شده است.(مبناي ده: 0)
10000000 در مبناي دو: حروف بزرگ روشن نيست و كليد هنوز رها شده است.(مبناي ده: 128)

اگر بخواهيم فقط روشن و خاموشي را چك كنيم, بايد با «1» عمل منطقي AND را انجام دهيم.
بعنوان مثال كارهاي زير را انجام دهيدhttp://forum.irpdf.com/images/smilies/frown.gifبعد از ايجاد برنامه)
چهار Label روي فرم قرار دهيد. مقدار Name براي هر Label را به چهار نام زير تغيير دهيد:
CapsLockLabel و NumLockLabel و ScrollLockLabel و InsLabel
حال بر روي قسمت خالي فرم كليك كرده و مقدار Keypreview را True كنيد. (با اين كار اجازه مي دهيم كه اگر بر روي هر كدام از اجزاي فرم, كليدي فشار داده شده باشد, رويدادِ OnKeyPress را اجرا كند.)

حال بر روي Object Inspector صفحه ي Events را انتخاب كنيد. بر روي اين صفحه جلوي OnKeyPress دابل كليك كنيد.
در صفحه اي باز شده عبارات زير را تايپ كنيدhttp://forum.irpdf.com/images/smilies/frown.gifيا از همين جا كپي كنيد!)


CapsLockLabel.Enabled:=GetKeyState(VK_CAPITAL) and 1 = 1;
NumLockLabel.Enabled:=GetKeyState(VK_NUMLOCK) and 1 = 1;
ScrollLockLabel.Enabled :=GetKeyState(VK_SCROLL) and 1 = 1;
InsLabel.Enabled:=GetKeyState(VK_INSERT) and 1 = 1;

حالا غذاي شما آماده ست! مي تونين اونو توي فر بذارين (compile كنين) بعد از اين پختين ش, حالا مي تونين اونو بخورين! (اجرا كنين)
اميدوارم كه از غذاي امروز كمال استفاده رو ببرين و پدر كاربر بيپاره رو در نيارين. يك بار ديگه مواد لازم رو خدمتتون مي گم, يادداشت كنين:
- Windows API يك قواره! Linux نمي شه, اصرار نكنين! شايد Lindows بشه.
- Delphi 7 يك وجب! (هفت رو واسه كلاس گذاشتن نوشتم. حتي دلفي 3 هم مي شه)
- Ram,hard,... به مقدار لازم.

shadmehr
24th September 2011, 02:17 PM
کسی...آموزش تصویری دلفی 2009 رو نداره...لینکی چیزی بزاره دنبالشم...مفتی گیرم بیاد نرم ده هزار تومن بدم به سیدیش.....[khande]
....البته از مبتدی...چون با منوی دلفی کار نکردم...زبان پاسکال با c++ رو بلدم...فقط کار با منو هاشو و طریقه ...خلاصه استفادشو میخام....

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد