|
بخشی از ويژگيهای جديد Borland Developer Studio 2006
|
| بخشي از ويژگيهاي جديد محيط BDS 4.0 یا (Borland Developer Studio 2006) یا دلفی ۲۰۰۶
- Method Navigation (حركت/ پرش بين متدها با استفاده از تركيب كليدها)
- Class Lock (براي اينكه حركت بين متدها را به يك كلاس خاص محدود كنيد )
- Help Insight (راهنمايي كه با قرار دادن اشاره گر ماوس روي يك كلمه نمايش داده خواهد شد)
- UML Designer (همان Together هست كه در BDS 2006 جا داده شده)
- Form Positioner (موقعيت فرم در صفحه نمايش را در زمان اجراي برنامه نشان می دهد)
- Block Completion (بااین ويژگي در Code Editor ميتوانيد بلاكهاي خود را تكميل كنيد)
- Live (Code) Templates (اين ويژگي واژه نامه اي شامل كدهاي از قبل نوشته شده است)
- Block Comments (با اين ويژگي ميتوانيد خطي كه در آن هستيد را Comment كنيد)
- Code Folding and Region (متد یا تمام بخشهای یك یونیت را میتوانید ببندید یا باز كنید)
- Refactoring (دوباره ساختن و اصلاح كد جاری تا رفتار كد جاری به همانصورت باقی بماند)
- Extract Resource String (برای انتقال یك متغیر رشته ای به بخش resource string)
- Rename Refactoring (تغییرنام یك Property و متدهای مربوط به آن و ... )
- Extract Method Refactoring (یك قطعه كد را تبدیل به یك متد میكند)
- Extract Interface (خارج كردن یك متد از یك كلاس و قرار دادن آن در یك Interface)
- Introduce Variable و Introduce Field
اطلاعات فوق توضیح خیلی جزئی از امکانات جدید محيط BDS 4.0 بود. برای مشاهده کل امکانات و توضیح کامل آنها بر روی ادامه مطلب کلیک نمائید. ادامه مطلب نوشته شده توسط ابراهیم خدائی در پنجشنبه بیست و سوم فروردین 1386 ساعت 14:20 | لینک ثابت |
|
|
 |
|
Graphics Device Interface
|
| GDI در دلفی
GDI مخفف کلمه Graphics Device Interface و تکنیک رسم گرافیک دو بعدی ویندوز است. این روش متاسفانه روش بسیار کندی برای ترسم گرافیکی میباشد ولی بدلیل اینکه اساس برنامه نویسی گرافیک است یاد گیری آن بعنوان پایه برنامه نویسی گرافیک برای برنامه نویسان لازم به نظر میرسد. اولین نکته قابل توجه در این رابطه این است که نباید سعی کنید از GDI برای ایجاد هر جلوه خیالی گرافیکی استفاده کنید بدلیل اینکه GDI یک تکنیک ابتدایی در گرافیک است . برای استفاده حرفه ای از گرافیک سعی کنید از DirectX , OpenGL و ... بهره بگیرید. اگرچه شما با کمی خلاقیت قادر ید جلوه های ساده را با GDI ایجاد کنید .
یکی از کلمات عمومی که در GDI زیاد با آن برخورد خواهید کرد DC (Device Context ) است که نشان دهنده همان ناحیه ای است که ترسیم روی آن صورت میگیرد و در دلفی با TCanvas نشان داده میشود . در واقع DC محل نشان دادن خروجی توابع گرافیکی است . بنابرین شما میتوانید از برخی توابع ترسیم برای ترسیم در صفحه نمایش یا پرینتر استفاده کنید . نکته دیگری که باید مورد توجه قرار بگیرد این است که توابعی که شما از آن استفاده میکنید توابع گرافیکی استاندارد دلفی بوده و پوششی برای توابع گرافیکی ویندوز است و دلفی آنها را برای ایجاد یک رابط کاربر خوب و مناسب آماده کرده است.
برای مشاهده کل مطلب بر روی ادامه مطلب کلیک کنید. ادامه مطلب نوشته شده توسط ابراهیم خدائی در چهارشنبه بیست و دوم فروردین 1386 ساعت 2:50 | لینک ثابت |
|
|
 |
|
Borland Developer Studio 2006 (دلفی 2006)
|
| Borland Developer Studio 2006 (دلفی 2006)
محصول جدید بورلند یعنی BDS 2006 با کد نام دکستر ("DeXter") شامل یک محیط توسعه یکپارچه (IDE) ، بسیار عالی است که حاوی Borland C++ for .Net و Borland C# for .Net و Borland Delphi for .Net و Borland Delphi for Windows و امکانات دیگر بر حسب نوع نسخه ای که خریداری می کنید ، می باشد.
نسخه حرفه ای (Professional Edition) : این نسخه شامل محیط توسعه یکپارچه ای است جهت طراحی برنامه هایی برای سازمانهای با مقیاس یا اندازه کوچک ، که امکان طراحی وب برای بانک های اطلاعاتی محلی (Local DB) نیز در آن فراهم آمده است.
نسخه اینترپرایز (Enterprise Edition): این نسخه برای شرکتهای با مقیاس متوسط ،که نیاز به سرورهایی با قدرت بالا دارند، طراحی شده است.
نسخه معمار (Architect Edition): این نسخه دارای قابلیت های نسخه Enterprise است، که قابلیت ECO 3 یا Enterprise Core Object نیز به آن اضافه شده است.
برای مشاهده کل اطلاعات بر روی ادامه مطلب کلیک نمائید. ادامه مطلب نوشته شده توسط ابراهیم خدائی در سه شنبه بیست و یکم فروردین 1386 ساعت 14:3 | لینک ثابت |
|
|
 |
|
بورلند استودیو در یک نگاه
|
| منابع و مطالب زیادی در مورد دلفی 2006 و چرایی و چگونگی استفاده از نسخه جدید را در مراجع زیر بیابید . لیست کتابهای منتشر شده در زمینه دلفی 2006:
چند لینک مفید در زمینه دلفی 2006:

بورلند استودیو در یک نگاه نوشته شده توسط ابراهیم خدائی در سه شنبه بیست و یکم فروردین 1386 ساعت 13:52 | لینک ثابت |
|
|
 |
|
فایل های INI در دلفی
|
| فایل های INI در دلفی
فایل های .INI دارای ساختاری بر اساس فایلهای متنی هستند و برای نگهداری اطلاعات پیکر بندی برنامه های کاربردی استفاده میشوند که هم براحتی بوسیله ما قابل ویرایش هستند و هم بوسیله یک ساختار ساده در هر برنامه ساده قابل دسترسی هستند .
بدلیل اینکه ویندوز داری Registry هست کسانی که از ویندوز استفاده میکنند آشنایی کمی با فایلهای .ini دارند ولی در ویندوز هنوز هم از فایلهای .ini استفاده میشود. مثل Win.ini و System.ini . ویندوز از این فایلها برای ذخیره اطلاعات مهمی از جمله اطلاعات پیکربندی استفاده میکند که براحتی قابل پاک شدن ، ویرایش و دیدن هستند. بسیاری از برنامه های تحت ویندوز برای ذخیره اطلاعات پیکربندی خود از Registry استفاده میکنند در حالیکه استفاده از فایلهای .ini هم سریعتر و هم ایمن تر است . یک مثال ساده برای استفاده از فایلهای .ini ذخیره اندازه ، حالت و موقعیت فرم برنامه شماست . بطور کلی هر چیزی که شما در رجیستری ذخیره میکنید میشود در فایلهای .ini ذخیره کرد .
ساختار فایلهای .ini
فایلهای .ini نوعی فایل متنی هستند که به بخشهای محدود به 64 کیلو بایت (Section) تقسیم شدند که هر بخش میتواند دارای چند کلید (Key) باشد و هر کلید میتواند دارای صفر یا چند مقدار (Value) باشد . مثال:
[SectionName] keyname=value ;comment keyname=value
نام هر بخش درون کروشه قرار گرفته و در باید در خط اول هر بخش قرار داشته باشد . نام بخشها و نام کلیدها نمیتوانند کاراکتر فاصله داشته باشند. بعد از نام کلیدها علامت = قرار میگیرد که میتواند قبل و بعد از آن کاراکتر فاصله قرار بگیرد . اگر بخشهایی با نام یکسان در یک فایل یا کلیدهایی با نام یکسان در یک بخش قرار داشته باشند مقدار آخر بر بقیه مقدارهای یکسان غالب است .
یک کلید میتواند دارای مقادیری از نوعهای String , Integer , Boolean باشد. دلفی از فایلهایINI در خیلی وضعیتها استفاده میکند. برای مثال فایلهای .SDK نوعی فایل هستند مانند ini ها .
کلاس TiniFile
دلفی برای ذخیره و بازیابی فایلهای ini. کلاس TiniFile را در اختیار ما قرار داده است. این کلاس در یونیت inifiles.pas قرار گرفته است. قبل از کار کردن با فایلهای .ini لازم است یک مثال راجع به استفاده از این کلاس ببینیم.
uses inifiles; ... var IniFile : TIniFile; begin IniFile := TIniFile.Create('myapp.ini');
|
این کد یه فایل .ini ایجاد میکند و این فایل را به myapp.ini ارجاع میدهد . البته این کد فایل را درون پوشه ویندوز ایجاد میکند ولی بهتر این است که برای ذخیره کردن اطلاعاتی از برنامه فایل .ini را درون پوشه برنامه ایجاد کنید . برای این کار باید آدرس کامل فایل را بنویسید . مثال :
IniFile := TIniFile.Create('C:\Hattel\myapp.ini');
|
البته میتوانیم از تابع ChangeFileExt هم استفاده کنیم که در این صورت یک فایل با نام فایل برنامه و درون پوشه برنامه ایجاد میکنیم .
IniFile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini'));
|
خواندن از فایلهای .ini
کلاس TiniFileچندین متد برای خواندن از فایلهای .ini دارند . متد ReadString برای خواندن مقدارهای رشته ای از یک کلید استفاده میشود. متد ReadInteger, ReadFloat ومتدهای مشابه برای خواندن مقدارهای عددی استفاده میشوند . همه این متدها یک مقدار پیش فرض دارند که وقتی فایل مورد نظر یا کلید و مقدار مورد نظر موجود نباشد استفاده میشود. مثلا ReadString به این صورت بیان میشود.
function ReadString(const Section, Ident, Default: String): String; override;
| Section نام بخش ، Ident نام کلید و Default نشان دهنده مقدار پیش فرض است .
نوشتن در فایلهای .ini
برای هر متد خواندن یک متد متناظر برای نوشتن وجود دارد . مثلا WriteString, WriteBool, WriteInteger و غیره
فرض کنید میخواهیم برنامه ای بنویسیم که تاریخ آخرین استفاده و آخرین موقعیت فرم برنامه را ذخیره کند . پس لازم است یک فایل.ini با دو بخش داشته باشیم . یک بخش با نام Date برای ذخیره تاریخ و یک بخش با نام Position برای ذخیره آخرین موقیت برنامه. بخش Date شامل کلید Last و بخش Position شامل کلیدهای Top, Left, width, Height .
کلید Last باید از نوع TDateTime و کلیدهای بخش Position باید از نوع عددی باشند.
برای نوشتن برنامه رویداد OnCreate فرم اصلی برنامه را بصورت زیر مینویسیم . (فراموش نکنید در بخش Uses یونیت TIniFiles را اضافه کنبد. )
procedure TForm1.FormCreate(Sender: TObject); var MyIniFile : TIniFile; LastDate : TDateTime; begin MyIniFile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini')); LastDate := MyIniFile.ReadDate('Date', 'Last', Date); ShowMessage('This program was previously used on ' + DateToStr(LastDate)); Form1.Top := MyIniFile.ReadInteger ('Position','Top', Form1.Top); Form1.Left := MyIniFile.ReadInteger ('Position','Left', Form1.Left); Form1.Width := MyIniFile.ReadInteger ('Position','Width', Form1.Width); Form1.Height := MyIniFile.ReadInteger ('Position','Height', Form1.Height); MyIniFile.Free; end;
|
با این کد در صورتی که هنگام اجرای برنامه فایل .ini مورد نظر وجود داشته باشد آخرین تاریخ استفاده از برنامه نشان داده میشود و فرم در آخرین موقعیت قبلی قرار میگیرد.
برای ذخیره شدن آخرین تاریخ و موقیت فرم ، رویداد OnClose فرم اصلی برنامه را به این صورت مینویسیم :
procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction); var MyIniFile : TIniFile; begin MyIniFile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini')); MyIniFile.WriteDate('Date', 'Last', Date); With MyIniFile, Form1 do begin WriteInteger('Position','Top', Top); WriteInteger('Position','Left', Left); WriteInteger('Position','Width', Width); WriteInteger('Position','Height', Height); end; MyIniFile.Free; end;
|
این کد باعث میشود در هنگام بسته شدن برنامه تاریخ و موقعیت فرم در فایل .ini ذخیره شود.
کار کردن با بخشها
چندین متد برای کار کردن با بخشها طراحی شدند. برای مثال متد EraseSection یک بخش را بطور کامل از فایل ini حذف میکند. متد های ReadSection نام کلیدهای یک بخش و متد ReadSections نام بخشهای یک فایل را در یک TStringList قرار میدهد. کلاسهای دیگری هم در یونیت Registry وجود دارند از جمله TRegIniFile برای دسترسی ساده به سیستم رجیستری ویندوز بصورت فایلهای ini که استفاده از آنها ساده است.
محدودیتها و راه حل ها
بدلیل اینکه کلاس TIniFile از Windows API استفاده میکند یه محدودیت 64 کیلو بایتی به فایلهای ini تحمیل میشود. در صورتی که احتیاج دارید اطلاعاتی بیشتر از 64 کیلو بایت در فایل ذخیره کنید باید بجای استفاده از TIniFile از TMemIniFile استفاده کنید که در این صورت مشکل محدودیت 64 کیلو بایتی را ندارید. نوشته شده توسط ابراهیم خدائی در چهارشنبه پانزدهم فروردین 1386 ساعت 2:47 | لینک ثابت |
|
|
 |
|
ساختار رکوردها در دلفی
|
| ساختار رکوردها در دلفی
یک ساختار تعریف شده در پاسکال موضوعی تحت عنوان record میباشد. رکوردها را میتوان یک نوع داده که خود شامل چندین نوع داده دیگر است در نظر گرفت. برای تعریف رکوردها بصورت زیر عمل میکنیم:
type recordTypeName = record
fieldList1: type1;
...
fieldListn: typen;
end
پس از اینکه نوع رکورد ایجاد شد، باید متغییرهایی از نوع این رکورد تعریف واز آنها استفاده کرد. برای تعریف متغییر نوع رکورد به صورت زیر عمل میشود:
type
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end;
var
Record1, Record2: TDateRec;
هنگام کار با یک رکورد برای دستیابی به میدانهای آن، از نماد نقطه استفاده میکنیم:
Record1.Year := 1904;
Record1.Month := Jun;
Record1.Day := 16;
همچنین میتوان یک رکورد را در یک رکورد دیگر کپی کرد بدون اینکه با خطائی مواجه شویم. شما همچنین میتوانید متغییرهای از نوع رکوردهای خود را به صورت مستقیم تعریف کنید:
var S: record
Name: string;
Age: Integer;
end;
رکوردهای با طول متغییر نوع رکورد را میتوان طوری تعریف کرد که طول بخشی از آن ثابت و طول بخش دیگری بر اساس شرایط فیلدها متغییر باشد. در زیر یک مثال و در ادامه آن جدولی از حافظهای که اشغال میشود آورده شده است.
type
TPartType = (ptComputer, ptMonitor, ptComponent);
TPart = record
PartNumber : String[15];
Description : String[30];
Price : Double;
case PartType : TPartType of
ptComputer: (CPU : String[10]; Speed : String[10]; HardDrive : String[10]);
ptMonitor: (VideoType : String[10]; Size : String[5]; DotPitch : String[5]);
ptComponent: (Internal : Boolean; Specs : String[29]);
end;
این تعریف به کامپایلر می گویید که تنها یکی از متغییرهای مجموعه case را برای استفاده در هر رکوردی انتخاب کند. این یک راهکار بسیار خوب برای استفاده از حافظه می باشد؛ زیرا حافظه یکسانی برای هر مجموعهای از متغییرها در نظر گرفته میشود.
| بایت |
نام متغییر |
نام متغییر |
نام متغییر |
| 0 |
PartNumber |
|
|
| 15 |
Description |
|
|
| 45 |
Price |
|
|
| 53 |
PartType |
|
|
| 54 |
CPU |
VideoType |
Internal |
| 55 |
|
|
Specs |
| 64 |
Speed |
Size |
|
| 69 |
|
DotPitch |
|
| 74 |
HardDrive |
|
|
دسترسی به یک بایت بعضی مواقع، هنگامیکه با یک API خارجی کار میکنید، احتیاج دارید که اطلاعاتی از نوع Word یا Longint را به نوعهای دلخواه بشکنید. به عنوان مثال TMSF را بصورت زیر در نظر بگیرید:
| Most Significant Byte |
|
|
Least Significant Byte |
| Unused |
Frames |
Seconds |
Minute | ساختار TMSFRec رو بصورت زیر تعریف میکنیم:
type
TMSFRec = record
Minutes : Byte;
Seconds : Byte;
Frames : Byte;
Dummy : Byte;
end;
در این حالت ما میتوانیم به راحتی به هر یک از بایتهای نوع Longint دسترسی داشته باشیم:
begin
MinuteLbl.Caption := IntToStr(TMSFRec(Position).Minutes);
SecondLbl.Caption := IntToStr(TMSFRec(Position).Seconds);
FrameLbl.Caption := IntToStr(TMSFRec(Position).Frames);
end;
در مثال قبل، Position متغییری از نوع Longint میباشد. نوشته شده توسط ابراهیم خدائی در چهارشنبه پانزدهم فروردین 1386 ساعت 2:45 | لینک ثابت |
|
|
 |
|
آرایه ها در دلفی
|
| آرایه ها در دلفی
دلفی به ما امکان می دهد آرایههایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم:
var
array[indexType1, ..., indexTypen] of baseType;
در این تعریف برای نامگذاری آرایه، از قانون نامگذاری متغییرها استفاده میکنیم و مقدار اولیه را نیز درون یک جفت کروشه قرار می دهیم.
نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:
d(.i.):= 3 + i; // Equivalent d[i]:= 3 + i;
نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:
var
A : array [Boolean] of integer;
begin
A[True] := 50;
A[False] := 100;
end;
نکته: توابع Low و High کرانهای پایین وبالای یک متغییر آرایهای یا نوعی یا ترتیبی را بر میگردانند:
for I := 0 to High(X) do S := S + X[I];
آرایههای ثابت: آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشتهها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند.
type
TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
const
DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday',
'Wednesday', 'Thursday',
'Friday', 'Saturday');
var
Today : TDay;
begin
Today := TDay(DayOfWeek(Date) - 1);
ShowMessage('Today is ' + DayNames[Today] + '!');
end;
آرایههای دینامیکی: آرایههای دینامیکی، آرایههای تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید:
var MyFlexibleArray: array of Real;
قبل از به کار گیری آرایههای دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:
SetLength (MyFlexibleArray, 2);
نکته: آرایههای دینامیکی همیشه مبتنی بر صفر می باشند.
نکته: شما میتوانید آرایههای دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید:
MyFlexibleArray := nil;
نکته: مقدار حافظهای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایهای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص مییابد.
فشردهسازی آرایهها: در دلفی شما هنگامی که ساختار خود را تعیین کردید میتوانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:
type TNumbers = packed array[1..100] of Real;
نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایهای از کاراکترها این مورد سازگارتر میباشد.
آرایههای چند بعدی دینامیکی: برای تعریف آرایههای چند بعدی دینامیکی، تنها کافی است ...array of را در ساختار خود تکرار کنید. به طور مثال:
type
TMessageGrid = array of array of string;
var
Msgs: TMessageGrid;
این تعریف یک آرایه دو بعدی از رشتهها می باشد. سپس باید به آرایه خود فضا نسبت داد:
SetLength(Msgs, I, J);
شما میتوانید آرایههای چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:
var
Ints: array of array of Integer;
SetLength(Ints, 10);
ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازههای مختلف) تخصیص دهید:
SetLength(Ints[2], 5); نوشته شده توسط ابراهیم خدائی در چهارشنبه پانزدهم فروردین 1386 ساعت 2:43 | لینک ثابت |
|
|
 |
|
استفاده از DLL در دلفی
|
| ایجاد یک DLL با استفاده از منو فایل گزینه New Items را انتخاب کنید و آیتم DLL Wizard را انتخاب نمایید. حال به فایل ایجاد شده، یک فرم با استفاده از روش بالا اضافه نمایید. دقت نمایید که Application را بجای فرم انتخاب ننمایید. حال اگر فرض کنیم که نام فرم شما Demo باشد و بانام UDemo.pas آنرا ذخیره کرده باشید. باید در فایل DLL بصورت زیر کد نویسی نمایید:
library demodll;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes,
UDemo in 'UDemo.pas' {Demo};
{$R *.res}
procedure ShowdemoForm;stdcall;
begin
Demo :=Tdemo.Create(nil);
demo.Show;
end;
function ShowdemoFormModal:integer;stdcall;
begin
demo :=Tdemo.Create(nil);
Result := demo.ShowModal;
end;
Exports
ShowDemoForm,
ShowdemoFormModal;
begin
end.
دقت کنید که نام DLL فوق DemoDll می باشد و با نام DemoDll.dpr ذخیره گردیده است.
حال بر روی فرم موجود تمام دکمهها و آبجکتهای مورد نظرتان را اضافه و کد نویسی کنید (اختیاری). در پایان در منو Project گذینه Build DemoDll را انتخاب کرده و اجرا نمایید. فایلی با نام DemoDll.dll ایجاد می گردد که برای استفاده آماده است.
استفاده از یک DLL بصورت دینامیکی برای استفاده از یک DLL بصورت دینامیکی، ابتدا نام توابعی را که در فایل DLL شما موجود است بصورت زیر تعریف نمایید:
unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TShowdemoFormModal= Function :integer;
.
.
.
دقت کنید که نام برنامه انتخابی پیش فرض Main و با نام UMain.pas ذخیره گشته است. حال برای لود کردن DLL یادشده، یک دکمه بر روی فرم قرارداده آنرا بصورت زیر کد نویسی کنید:
var
hndDLLHandle:THandle;
ShowdemoFormModal:TShowdemoFormModal;
procedure TFMain.Button1Click(Sender: TObject);
begin
try
hndDLLHandle:=LoadLibrary('Demodll.dll');
if hndDLLHandle <> 0 then begin
@ShowdemoFormModal:=getProcAddress(hndDLLHandle,'ShowdemoFormModal');
if addr(ShowdemoFormModal) <> nil then begin
ShowdemoFormModal;
end
else
showmessage ('function not exists ...');
end
else
showMessage('Dll Not Found!');
finally
freelibrary(hndDLLHandle);
end;
end;
فرم شما آماده اجراست. در پایان متذکر می شوم که استفاده ار روش دینامیکی در لود کردن DLL ها باعث پایین آمدن سرعت نمایش فرمها و در عوض بالارفتن سرعت برنامه خواهد شد.
نوشته شده توسط ابراهیم خدائی در سه شنبه چهاردهم فروردین 1386 ساعت 20:31 | لینک ثابت |
|
|
 |
|
انواع متغیر ها در دلفی
|
|
انواع متغیر ها در دلفی :
|
Windows Data Type |
Object Pascal Data Type |
Description |
|
LPSTR |
PAnsiChar |
اشاره گر رشته |
|
LPCSTR |
PAnsiChar |
اشاره گر رشته |
|
DWORD |
Longword |
عدد کامل |
|
BOOL |
LongBool |
مقدار بولي |
|
PBOOL |
^BOOL |
اشاره گر به مقدار بولي |
|
PByte |
^Byte |
اشاره گر به مقدار بايت |
|
PINT |
^Integer |
اشاره گر به مقدار صحيح |
|
PSingle |
^Single |
اشاره گر به مقدار مميز شناور |
|
PWORD |
^Word |
اشاره گر به مقدار 16 بيتي |
|
PDWORD |
^DWORD |
اشاره گر به مقدار 32 بيتي |
|
LPDWORD |
PDWORD |
اشاره گر به مقدار 32 بيتي |
|
UCHAR |
Byte |
مقدار 8 بيتي |
|
PUCHAR |
^Byte |
اشاره گر به مقدار 8 بيتي |
|
SHORT |
SmallInt |
عدد کامل 16 بيتي با علامت |
|
UNIT |
Longword |
عدد کامل 32 بيتي بيعلامت |
|
PUNIT |
^UNIT |
اشاره گربه مقدار عدد کامل 32 بيتي بيعلامت |
|
ULONG |
Cardinal |
عدد کامل 32 بيتي بيعلامت |
|
PULONG |
^ULONG |
اشاره گر به مقدار عدد کامل 32 بيتي بيعلامت |
|
PLongint |
^Longint |
اشاره گر به مقدار 32 بيتي |
|
PInteger |
^Integer |
اشاره گر به مقدار 32 بيتي |
|
PSmallInt |
^SmallInt |
اشاره گر به مقدار 16 بيتي |
|
PDouble |
^Double |
اشاره گر به مقدار دابل |
|
LCID |
DWORD |
شناسه محلي |
|
LANGID |
Word |
شناسه زبان | نوشته شده توسط ابراهیم خدائی در سه شنبه چهاردهم فروردین 1386 ساعت 20:24 | لینک ثابت |
|
|
 |
|
مدیریت حافظه در دلفی
|
| تخصیص خودکار حافظه
وقتی شما از نوعهای پایه (Integer ،real ،word و…) برای ایجاد متغییرهای خود استفاده می کنید، هیچ نگرانی درباره تخصیص حافظه آن وجود ندارد چون دلفی خودش آنرا تخصیص حافظه می کند و سپس آزاد میکند.
type
TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
var
Name : String; {256 Bytes}
X, Y : Integer; {4 + 4 = 8 Bytes}
List : array [0..10] of Double; {8 * 11 = 88 Bytes}
Today : TDay; {1 Byte}
دراین نمونه پس از پایان برنامه، تمام حافظه تخصیص داده شده فراخوانی و آزاد می شود.
تخصیص حافظه دینامیکی در این حالت برنامه نویس احتیاج دارد تا انباره حافظه را شخصا" تخصیص و آزاد کند.
نوع Pointer اشارهگرها در دلفی میتوانند شکلهای مختلفی را در برگیرد. نخست، نوع اشارهگری که یک آدرس حافظه را برای نوع ویژهای از داده، همانند صحیح، رشته و غیره نگه میدارد (Typed Pointer).
var
Number : ^Integer;
Name : ^String;
دوم، اشارهگرهای بدون نوع. اشارهگرهای بدون نوع (Untyped Pointers) خیلی به نوع معمولی خود شبیه هستند. اما محدودیتهایی مثل اینکه باید به نوع خاصی اشاره (Point) کند را ندارد.
حال اشارهگر بدون نوع ما می تواند به هر نوعی از داده اشاره کند. برای تخصیص حافظه آن، از کمپلکس بیش از یک بیت استفاده میکنیم. برای مثال برنامه زیر کامپایل می شود ولی در زمان اجرا حافظهای تخصیص نمیشود.
begin
New(Something);
Dispose(Something);
end;
برای تخصیص حافظه کامپایلر باید بداند که نوع داده ما برای تخصیص حافظه چیست:
type
IntPtr = ^Integer;
var
Something : Pointer;
begin
Something := New(IntPtr);
Integer(Something^) := 10;
Dispose(Something);
end;
تخصیص بلاکی از حافظه ما میتوانیم از اشاره به بلاکهایی از تخصیص حافظه در سیستم استفاده کنیم. این کار را با رویههای GetMem و FreeMem برای تخصیص و آزاد سازی حافظه استفاده میکنیم.
var
Something : Pointer
begin
GetMem(Something, 100);
FreeMem(Something, 100);
end;
اشاره به حافظه از قبل تخصیص داده شده هر دو نوع اشارهگرها می توانند به هر جایی از حافظه اشاره بکنند. این بدان معناست که آنها میتوانند اشاره به فضای اشغال شده با دادههایی که در حال حاضر موجودند داشته باشند. این نمونه اشارهگر احتیاجی به تخصیص حافظه ندارد.
var
Something : Pointer;
MyString : PChar; // type PChar = ^Char;
begin
GetMem(Something, 100);
MyString := Something;
StrCopy(Something, 'Hello World');
FreeMem(Something, 100);
end;
حافظه Heap Heap شامل قسمتی از حافظه موجود در یک برنامه است که آنرا حافظه پویا می نامیم. Heap بخشی است که در آن تخصیص و تعریف حافظه به صورت تصادفی (Random) اتفاق میافتد. این به آن معناست که اگر شما سه بلاک از حافظه را به طور متوالی تخصیص دهید، می توانید بعد از هر دستور آنرا از بین ببرید. مدیر Heap جزئیات را برای شما نگهداری می کند. بنابراین شما به سادگی می توانید یک حافظه جدید را با GetMem و یا بوسیله صدا زدن constructor هنگام ساختن یک شی درخواست کنید و دلفی به شما یک بلاک جدید را برخواهد گرداند. Heap یکی از سه فضای موجود در برنامه کاربردی را استفاده کرده و دوتای دیگر به صورت فضای یکپارچه (Global) و پشته قرار می گیرند.
حافظه Stack Stack شامل قسمتی از یک بخش از حافظه موجود یک برنامه است که دینامیکی است اما برای تخصیص و آزادسازی فرامین مخصوص دارد. تخصیص Stack به صورت LIFO می باشد. این بدان معناست که آخرین حافظه شیء شما تخصیص داه خواهد شد و سپس حذف می شود. حافظه پشته در روتینهای نوعی استفاده میشود. وقتی شما یک روتین را صدا میزنید، پارامترهایش و روتین نوع آن در پشته ریخته می شود. همچنین پارامترهایی که در یک روتین تعریف میشوند، در پشته ذخیره میشوند و وقتی روتین خاتمه پیدا می کند تمام آنها به طور خودکار از بین می رود.
نوشته شده توسط ابراهیم خدائی در سه شنبه چهاردهم فروردین 1386 ساعت 20:23 | لینک ثابت |
|
|
 |
|
گزارش از دلفي 9- Delphi 2005
|
| گزارش از دلفي 9- Delphi 2005
بازهم خبرهاي جديدتري از Delphi 9 حاکي از آنست که نسخه جديد Delphi قويترين و بهترين ابزار براي برنامه نويسي ويندوز خواهد شد.
در نسخه جديد علاوه بر امکانات زيادي که به محيط برنامه نويسي اضافه شده قدرتهاي بيشتري به IDE آن داده شده است. يکي از اين امکانات اينه که شما مي تونيد در يک محيط هم براي Win32 برنامه نويسي کنيد و هم NET. (براي #C) . نکته جالب اينه که يک دستوارت جديد هم به آن اضافه شده است.
خلاصه اينکه بازم مثل هميشه Delphi بهترين هست.
براي اطلاعات بيشتر در زمينه امکانات جديد Delphi 9 که در کنفرانس Borcon 2004 تشريح شده سري به این آدرس بزنيد. http://delphi.about.com/library/weekly/aa083104a.htm
دوستان عزيز دلفي كار حتما Delphi 2005 نصب كنيد ، بعد از نصب كردنش خيلي چيزهاي جديد از اين محصول بي همتا خواهید ديد.كه بسيار جالب و مفيد خواهد بود.
حال سعي خواهیم كرد امكانات و كاربردهاي جديد اين محصول رو معرفي كنیم …
وقتي كه اين محصول رو تهيه كنيد اولين چيزي كه جالبه اينه كه بايد CD 3 رو بشينيد و نصب كنيد كه اين ممكنه يكم عجيب باشه. چرا كه تا حالا اينطوري نبوده و هميشه در دلفی 7 با يك سي دي (در دلفي 8 دو سي دي) مي تونستيد از دلفي استفاده كنيد . البته ناگفته نماند كه خود دلفي در سي دي اول هست و مابقي مربوط به موارد بسياري هست كه براي كار با اين محصول شما ممكنه كه احتياج پيدا كنيد.
اول Microsoft .NET Framework v1.1 و بعد هم Microsoft .NET Framework SDK كه فقط همين SDK حدود 850 مگابايت از هاردتون رو لازم داره. و بعد نرم افزارها و ابزارهاي جالب ديگه كه خودتون بايد نصب كنيد تا ببينيد.
حالا به يك سري موارد شاخص كه در اين نسخه از DELPHI عرضه شده مي پردازیم:
1- اول اينكه شما ميتونيد تمام برنامه هاي قبلي خودتون رو كه در نسخه هاي قبلي نوشته ايد رو باز كنيد و توسعه بدين.
2- شما امكان كار بصورت توام هم در محيط NET. و هم WIN32 رو داريد.
3- يكي از امكانات بسيار جالبي كه اکثر کاربران هماو اول شيفتش خواهند شد اينه كه شما ميتونيد براي تعريف تمامي شناسه ها ( identifier) مثلا متغييرها و نام توابع و روالها از Unicode (برای مثال: نام های فارسی) استفاده كنيد. مثلا يك متغيير به شكل زير ايجاد كنيد :
Var
;Integer :ابراهیم_خدائی
;TBitmap : محمد
يا اينكه تابعي بصورت زير تعريف كنيد:
String) :Boolean: متن_ورودی) چاپ_متن Function
البته ممكنه در اينجا جابجا ديده بشه ولي خودتون امتحان كنيد حتما متوجه خواهيد شد.
4- ديگر اينكه ساختار for..do…in هم به زبان Object Pascal اضافه شده كه با اون ميتونيد مانند C ساختار foreach استفاده كنيد. حالا اين امكانات رو به طور كامل و مفصل بعدا توضيح خواهم داد.
5- كلي امكانات جديد به محيط IDE هم اضافه شده كه هر کاربری در ابتدا متوجه آن خواهد شد.
در آخر اينكه حتما اين محصول رو تهيه كنيد و خودتون يك نگاهي بندازيد. حتما خواهيد فهميد كه اين بهترين محصول براي برنامه نويسي در ويندوز و اينترنت هست كه تا حالا اومده.
موفق باشيد. نوشته شده توسط ابراهیم خدائی در سه شنبه چهاردهم فروردین 1386 ساعت 20:17 | لینک ثابت |
|
|
 |
|
حركت از دلفي به دلفي NET.
|
حركت از دلفي به دلفي net.
همه مي دانيم كه از زمان به بازار آمدن دلفي 7 بورلند صحبت از تكنولوژيNET. مي كرد و همراه دلفي 7 هم يكNet Preview. منتشر كرد كه برنامه نويسها مي توانستند كدهاي NET. خود را با آن كامپايل كنند. شما به عنوان يك برنامه نويس دير يا زود مي بايست براي ماندن در ميان برنامه نويسان ويندوزي به سمت NET. حركت كنيد. در اين مقاله داریم كمي در مورد كارايي و تواناييهاي دلفي 8 و همچنين برنامه نويسي NET. صحبت كنیم و در آينده نيز با ارائه مقالات كامل تر و آموزشي با هم قدم به سرزميني جديد بگزاريم. اگر شما جز برنامه نويسان دلفي باشيد و در حال حاضر اين احساس و فكر را داريد كه چگونه وارد برنامه نويسي NET. بشويد و از كدام قسمت آن (VCL Forms, Windows Forms, ASP.NET, … ) بايد استفاده كرد و هر كدام چه ويژگيهايي دارند و چگونه مي شود با آنها كار كرد اين سري مقالات را دنبال كنيد.
كمي بيشتر در مورد NET. در دلفي: اگر ما با NET. آشنايي نداريد پيشنهاد ميكنم حتما دلفي 8 رو نصب كنيد و يك نگاهي هم به داخل Documentهاي همراه آن بياندازيد. اگر شما مي خواهيد اين مقالات را دنبال كنيد بايد حداقل ديروز دلفي 8 رو نصب كرده باشيد و يك كم با آن سروكله شده باشيد !!! حال براي بهتر درك كردن اين موضوعات چند نكته رو در اينجا ذكر ميكنم:
- "Delphi 8 for .Net is pure Delphi and pure .Net" اين شعار بورلند است در مورد دلفي 8. كه واقعا شعاري درست و بواقع هست. در واقع اين شعار به اين معني هست كه شما مي توانيد به راحتي با داشتن تجربه و مهارت در دلفي مي توانيد براي NET. هم برنامه نويسي كنيد. دلفي 8 اين قدرت را به شما مي دهد كه در محيط IDE آن علاوه بر برنامه نويسي NET. برنامه هاي قبلي خود كه در ورژنهاي قبلي دلفي نوشته ايد را باز كنيد، تغيير دهيد و اجرا نماييد. دلفي 8 به شما قدرت بينهايتي براي برنامه نويسي ويندوز و وب تحت NET. ميدهد كه هيچ محصول ديگري حتي محصولات ميكروسافت (VS.NET) هم نمي تواند در اين حد امكانات و قابليتها در اختيار شما قرار دهد. براي همين موضوع نيز دلفي در سال 2002 بعنوان بهترين ابزار براي برنامه نويسي NET. انتخاب شد. و محصولات ميكروسافت در رده هاي بعدي قرار گرفتند. براي ديدن اين موضوع مي توانيد به سايت developer.com مراجعه كنيد. در يك كلام مي توان گفت دلفي 8 امروزه بهترين و تنها انتخاب برنامه نويسان حرفه اي NET. مي باشد.
- Windows Forms ممكن است بپرسيد منظور از Windows Forms در دلفي 8 چيست؟ يا اينكه Caption يكي از VCLهاي خود كه روي فرمتان قرار دارد كجاست؟ و يا چه بلايي به سر TDBGrid آمده است؟ بدون شك NET. يك Framwork بسيار قوي است. و Windows Forms بعنوان يك Platform قدرت بسيار زيادي براي برنامه نويسي برنامه هاي ويندوزي تحت NET. در اختيار شما قرار مي دهد. توضيح بيشتر اينكه در گذشته هر زباني براي خود يك Platform جداگانه اي براي كار در محيط Win32 داشت مانند VCL در دلفي، MFCدر C++ و VB API در VB و ... . Platform يك رابطي است براي منتقل كردن برنامه هاي به سطوح پايين براي كار با Messageها و ... . و هر برنامه نويس كه در يك محيط برنامه نويسي مي كرد با يكي از آنها مي بايست كار ميكرد. در حاليكه NET. تنها يك Platform را معرفي ميكند كه از آن مي توان در تمامي زبانهاي برنامه نويسي NET. مي توان استفاده كرد. در دنيا .NET ، Windows Forms هم كه تركيبي است از Windows Forms Controls بعنوان ابزار طراحي برنامه هاي تحت ويندوز به كار برده مي شود. در NET. قسمتي كه .Net FCL (Framework class library) ناميده مي شود داراي توابع و ابزارهايي است كه همانند VCLهاي دلفي براي استفاده در برناه نويسي برنامه هاي Win32 بسيار پر كاربرد هستند. در نتيجه شما بعنوان يك برنامه نويس دلفي مي توانيد با قدرت با برنامه نويسان ديگر مانند C#, VB.NET , … رقابت كنيد، حتي كار برنامه نويسان دلفي بسيار راحت است از ديگر برنامه نويسان چرا كه شما براي كار كردن با NET. در دلفي احتياجي نداريد دلفي را از پايه بياموزيد ولي بطور مثال براي برنامه نويسي با VB.NET برنامه نويسان VB بايد برنامه نويسي شي گرا (Object-Oriented) را از پايه بياموزند و بعد بروند با VB.NET برنامه نويسي كنند. - " TObject یا System.object". آيا براي كار كردن با .NET fcl بايد همه آن را از ابتدا ياد بگيریم؟ درست است كه .net fcl مجموعه بسيار بزرگي از توابع ،كلاسها، اينترفيسها و ... است ولي آيا بايد با طرز كار همه آنها آشنا شویم؟
ولي نه صبر بورلند وقتي داشت براي NET. خود را آماده ميكرد فكر اينجا را هم كرده و VCL.NET را بوجود آورده است. خوب حالا VCL.NET چيست؟ اين VCL هست يا NET. ؟ اگر در فرم خود از يكي از VCL ها استفاده كنيد كه دلفي شما هم VCL.NET داشته باشد و آنرا كمپايل كنيد آنگاه شما از FCL استفاده كرده ايد!!! بله به همين راحتي . در واقع VCL.NET يك پوسته (shell) براي NET. هست كه به برنامه نويسان دلفي اين امكان را مي دهد كه با استفاده از VCLهاي دلفي برنامه هاي تحت NET. بنويسند. مي توان گفت كه اين از قدرتهاي دلفي 8 مي باشد كه ديگر زبانها آنرا ندارند.
نوشته شده توسط ابراهیم خدائی در پنجشنبه نهم فروردین 1386 ساعت 21:38 | لینک ثابت |
|
|
 |
|
تكنولوژي NET.
|
| دلفي و تكنولوژي NET.: در دلفي 8 به دو روش مي توان Applicationهاي تحت NET. نوشت: اول استفاده از VCL for .NET است كه از طراحي VCL پشتيباني مي كند و حالا براي استفاده در .NET Framework با نام VCL.NET عرضه شده است. اين روش براي بسياري از برنامه نويساني كه قبلاً با دلفي 7 كار مي كرده اند و از همان VCL استفاده مي كرده اند بسيار مفيد است, چراكه به راحتي مي توانند برنامه هاي قبلي خود را با تغييرات اندك به دلفي 8 و محيط NET. منتقل كنند. روش دوم استفاده از WinForms است كه در اين مقاله قصد داريم درباره اين روش صحبت كنيم. در مقالات بعدي بيشتر به روش هاي ديگر خواهيم پرداخت كه البته اين روش براي توليد نرم افزارهاي ويژوال تحت NET. بهترين روش است. چراكه در اين روش از Namespace system.forms استفاده مي شود كه از كلاس هاي اصلي NET. به شمار مي رود. (namespaceها كلاس هاي اصلي NET. هستند كه مانند Unitها در دلفي 7 مي باشند) همچنين تمامي برنامه نويسان دلفي براي استفاده از اين روش تقريباً بايد تمامي مطالبي كه در مورد برنامه نويسي GUI كه در محيط win32 استفاده مي شد را فراموش كنند و با winfroms برنامه نويسي NET. را شروع كنند. براي شروع اول دلفي 8 را اجرا كنيد و از منوي file گزينه New و بعد Others را انتخاب كنيد تا يك ديد اوليه از روش هايي كه مي توان با استفاده از آنها در NET. برنامه نوشت را ببنيد كه ابتدا Delphi ASP Projects را مي بينيد كه در آن مي توان از ASP.NET web Application و يا ASP.NET web Services براي توليد برنامه هاي مبتني بر NET. براي استفاده در وب بكار برد. در قسمت Delphi for.NET نيز شما قسمتهاي زير را مشاهده مي كنيد:
محيط IDE دلفي 8 با انتخاب windows form محيط IDE دلفي 8 براي شروع كار آماده مي شود. شما يك فرم خالي كه در محيط Form Designer قرار دارد را در وسط صفحه مي بينيد و Object Inspector را در سمت چپ و Project Manager و Model View و Data Explorer را در بالاي سمت راست و Tool Palette را در پايين سمت راست مي بينيد. در اينجا اولين تفاوتي كه نسبت به دلفي 7 مشاهده مي شود اين است كه محيط طراحي form به صورت يك پنجره بسته است كه فرم خالي در آن قرار دارد. اگر با محصولات Visual Studio .NET كار كرده باشيد متوجه شباهت اين قسمت با آنها خواهيد شد. احتمالاً بورلند خواسته است كه يك شباهتي بين محيط دلفي 8 و Visual Studio .NET ايجاد كند تا برنامه نويساني كه قبلاً با VB و يا VC كار مي كرده اند بتوانند سريع تر خود را با محيط دلفي وفق دهند و با آن به برنامه نويسي NET. بپردازند. براي اولين بار كه من اين محيط را ديدم كمي ناراحت كننده بود چرا كه ديگر نمي توانستيم آن آزادي عملي كه در محيط دلفي 7 داشته ايم را در (مورد اندازه formها) اينجا داشته باشيم و همچنين در اين محيط ديگر نمي توان كد برنامه و form را با هم ديد و براي تغيير حالت از حالت نمايش form به Code بايد از Tabهايي كه در پايين بصورت Code/Design هستند استفاده كرد. يعني در هر لحظه شما فقط يك حالت را مي توانيد داشته باشيد. اما يك سري نكات مفيد و جالب است كه در اين محيط به چشم مي خورند. اول يك جعبه ابزار (Tool Palette) بسيار زيبا و كارا، كه نسبت به محيط قبلي دلفي 7 بسيار سهل الوصول تر شده و امكان اين كه شما بتوانيد تعداد زيادي از ابزار لازم را در كنار دست خود داشته باشيد را فراهم مي كند. هم چنين اگر نام كنترل هاي مورد نياز را هم بدانيد, مي توانيد با تايپ كردن نام كنترل مورد نظر در Textbox بالاي جعبه ابزار, ابزارها را فيلتر كنيد. مثلاً با زدن حرف (b) تمامي كنترل هايي كه با حرف (b) شروع شده است, نمايش داده مي شود. اما يك سري تغييرات ساختاري ديگري هم در اينجا ديده مي شود. به طور مثال اگر شما يك Button را به روي form قرار دهيد در قسمت Object Inspector مي بينيد كه براي تغيير مكان دكمه، ديگر Propertyهاي Top و Left وجود ندارد بلكه location كه داراي دو قسمت x و y است مكان كنترل و Size كه شامل Height, Width است اندازه كنترل را تعيين مي كند و همچنين بجاي Caption از Text استفاده شده است. از ديگر مزايا اين است كه تمام Propertyهاي كنترل ها به صورت كلاسه بندي و طبقه بندي شده وجود دارند كه امكان باز و بسته كردن Sub Propertyها هم با گذاشتن + و – وجود دارد كه اين نكته از سردرگمي در قسمت Propertyها كه در محيط دلفي 7 خيلي وقت گير بود جلوگيري مي كند. در قسمت رويدادها (Events) نيز تغييراتي را مي بينيم. مثلاً بجاي رويداد Onclick در اينجا Click را داريم. در كل، در اول Eventها ديگر on وجود ندارد (به اين دليل كه در NET. ما رويداد Click داريم و نه OnClick) اينجا هم با دو بار كليك كردن روي هر رويداد به قسمت Code Editor مي رويم.
محيط ويرايش كد (Code Editor) در قسمت ويرايش كد يك سري تغييرات عمده نسبت به محيط هاي قبلي دلفي وجود دارد. اولين چيز شماره خط ها مي باشد كه در كنار هر خط از كدها مي توان ديد. همچنين يك سري علامت هاي + و – كه با آنها مي توان يك قسمت هايي از كد را باز و بسته كرد كه به اين عمل باز (Expand) و بسته (fold) كردن كدها و روش Code Folding مي گويند. در اين روش كدهاي جديدي توليد مي شوند كه براي طراحي Win formها مي باشد. در طراحي فرم ها و كنترل هاي VCL (يا CLX) تمامي مشخصات و Propertyهاي آنها در فايل هاي جداگانه DFM. (يا XFM.) ذخيره مي شوند. اما در اينجا به اين شكل نيست و تمامي مشخصات در فايل جدا ذخيره نمي شوند بلكه در خود فايل كد برنامه ذخيره مي شوند كه اين را مي توانيد در قسمت اول كد برنامه كه با عبارت Windows Form Designer generated Code مشخص شده, ببينيد. حالا اگر بدون اين كه در قسمت رويداد Click دكمه اي كه قبلاً ساختيم كدي وارد كنيد برنامه را Compile كنيد. چيزي كه حتماً متوجه خواهيد شد اين است كه با آن كه شما در قسمت Button1-Click چيزي وارد نكرده ايد اين قسمت حذف نمي شود!!! در دلفي 7 به اين شكل نبود و هنگام كمپايل كردن اگر چنين حالتي رخ مي داد آن قسمت از كد برنامه حذف مي شد. اين يك خصيصه دلفي 8 است و فكر نكنيد كه باگ پيدا كرده ايد!!! چراكه در Win Form شما مي توانيد رويداد Click چندين كنترل را به يك كد كه مثلاً براي يكي از كنترلها نوشته ايد مربوط كنيد كه هرگاه رويداد Click براي هر كدام از آن كنترلها اتفاق افتاد اين كد اجرا شود. به همين دليل در دلفي 8 با پاك كردن كدهاي مربوط به يك قسمت و كمپايل كردن برنامه, آن قسمت از بين نمي رود, چراكه ممكن است آن قسمت براي ديگر كنترلها نيز استفاده شده باشد.
كدهاي مديريت طراحي (Designer Manager Code): اگر شما بخواهيد متد Button1-Click را به صورت دستي حذف كنيد, مي توانيد Handler اين رويداد را به صورت دستي از قسمت Implementation حذف كنيد. يعني چي؟! خوب وقتي كه شما يك كنترل روي فرم قرار مي دهيد و مثلاً Event كليك آنرا را ايجاد مي كنيد, در قسمت Implementation يك خط كد مانند زير اضافه مي شود: اين خط به اين معني است كه اگر روي Button1 كليك شد, متد Button1-Click را اجرا كن. اين خط همان Handler رويداد Click دكمه ما است. حال اگر از اين متد كه براي اجرا شدن هنگام كليك روي Button1 نوشته ايم در رويداد كليك چند كنترل ديگر نيز استفاده كنيم. اين Handler به كد مربوط به آن كنترلها نيز اضافه مي شود و در آن به كمپايلر مي فهماند كه اگر روي اين كنترل هم كليك شد كد مربوط به Button1-Click را اجرا كن. فقط در آنجا بجاي عبارت Self-Button1.Click نام كنترل ديگر مثلاً Self-label1.Click مي آيد. به صورت زير: بهتر است در اين مورد بيشتر از اين توضيح ندهيم, چون مسايل مهمتري هم است!!! حالا قبل از اين كه برگرديم به قسمت طراحي form بهتر است نگاهي به سمت راست صفحه و جعبه ابزار بيندازيم. بله مي بينيم كه در آنجا بجاي كنترلها Code Snippets را داريم. هر كدام از آن آيكونها براي ايجاد كردن يك كد از پيش تعريف شده در متن برنامه مي باشد. يك مشكلي كه در اينجا ديده مي شود اين است كه آيكون تمام آنها مثل هم است و نمي توان فهميد كه كدام يك از آنها يك كدي را توليد مي كنند. البته با نگه داشتن موس روي هر كدام از آنها به صورت Hint اين مطلب را مي شود فهميد. ولي براي راحت تر كردن كار شما مي توانيد با Right Click كردن روي آن قسمت و انتخاب Button Size Include Caption متن هر كدام از آنها را در كنار آيكونها ديد. در ضمن براي استفاده از آنها مي توانيد هر يك از آنها را بوسيله موس بكشيد و بجاي مورد نظر Darg كنيد و يا اين كه روي آنها Double Click كنيد.
نوشته شده توسط ابراهیم خدائی در پنجشنبه نهم فروردین 1386 ساعت 21:28 | لینک ثابت |
|
|
 |
|
تاریخچه دلفی
|
در سال 1995 اولین نسخه Delphi با نام Delphi 95 توسط شرکت Borland به بازار عرضه شد. در این ده سال فعالیت شاهد تغییرات زیادی در ساختار و معماری این ابزار قوی برای برنامه نویسی و توسعه نرم افزارها بودیم. اول با Delphi 95 که امکان طراحی برنامه های اجرایی هم در محیط Win32 و هم Win16 (مانند Windows 3.1) را داشت شروع شد و با پیشرفت روز به روز صنعت نرم افزار و تکنولوژی های برنامه نویسی Delphi هم رشد کرد.
سال 1996 در نسخه دوم Delphi 2 ابزارهایی برای گزارشگیری و رسم نمودار وجود داشت که توانست خیلی بالاتر از دیگر رقبا به بازار وارد شود. و از این نسخه بود که Delphi دیگر فقط برای Win32 استفاده میشد.
در سال 1997 با به بازار آمدن Delphi 3 یک جهش اساسی در ابزار RAD بوجود آمد که باعث شد بسیاری از برنامه نویسان به Delphi روی آورند. اما نکته ای که برنامه نویسان ایرانی را تا آن زمان آزار میداد نبودن امکاناتی برای برنامه نویسی فارسی بود. به همین دلیل هنوز هم بسیاری از برنامه نویسی ایرانی با اینکه به قدرت و سرعت Delphi پی برده بودند اما برای برنامه نویسی ساده تر و فارسی هنوز با محصول صرفا آموزشی مایکروسافت به نام VB کار میکردند. و این مهمترین دلیل پایین بودن سطح برنامه نویسی تحت Windows در آن روزگار بود. که البته در همان سالها بود که نمایندگی رسمی شرکت بورلند نیز به دلیل تحریم ایران توسط آمریکا تعطیل شد.
اما در سال 1998 که یک سال رویایی برای برنامه نویسان ایرانی بود Delphi 4 پا به عرصه بازار برنامه نویسی ویندوز گذاشت. (در همین سال هم بود که Borland اولین نسخه Kylix برای Linux را نیز به بازار داد) برای اولین بار وقتی که Delphi 4 نصب شد اولین چیزی که در کترلهای آن توجه هر برنامه نویس ایرانی را به خود جلب میکرد گزینه ای بود به نام BiDiMode. بله این همان چیزی بود که ما منتظرش بودیم با استفاده از این امکان بود که تعداد زیادی از Componentهای فارسی نویسی با امکان از چپ به راست نویسی به برنامه های تحت ویندوز اضافه شد. البته این امکان باعث شد که Internationaliztion نیز در برنامه های نوشته شده با Delphi نیز بوجود بیاید که نه تنها در ایران بلکه در بسیاری از کشورهای دیگر نیز مورد استقبال قرار گرفت. در آن زمان تنها برتری که VB و VC نسبت به Delphi داشتند امکان نوشتن VBA (VB for Application) بود که با استفاده از آن میشد برای محصولات Office برنامه هایی نوشت که البته در Delphi هم با استفاده از OLE Container امکان استفاده از آن نرم افزارها وجود داشت ولی کمی مشکل بود و احتیاج به سواد بالایی از برنامه نویسی داشت.
سال 1999 با آمدن Delphi 5 به بازار علاوه بر تغییرات بسیار جالب و مفیدی که در محیط IDE بوجود آمده بود یک Tab هم به قسمت ابزار Delphi اضافه شده بود با نام Server که این دقیقا همان امکاناتی بود که برای برقراری ارتباط با Office مورد استفاده قرار میگرفت. در این نسخه از دلفی نیز امکانات زیادی برای اتصال به بانکهای اطلاعاتی ایجاد شد علاوه بر آن امکاناتی برای برنامه نویسی اینترنت بوجود آمد و همچنین استفاده از WinSock نیز بسیار راحتتر شده بود و مهمتر از همه Quick Report هم تمامی نیازهای گزارشگیری برنامه نویسان را جواب میداد.
سال 2000 که Delphi 6 به بازار آمد (البته این نکته را هم عنوان کم که در Turbo Pascal و تا Delphi 5 یک امکانی وجود داشت که شما می توانستید Constantهایی که در برنامه تعریف میکنید را در قسمتهایی از برنامه بنا به خواست خود تغییر دهید که البته این بیشتر به این دلیل بود که ما از همان زمانی که با Pascal کار میکردیم عادت کرده بودیم که اگر می خواهیم متغییری بسازیم که بتوان به آن مقدار اولیه داد از Constant استفاده می کردیم. برای همین هم با برداشتن این امکان که خوب منطقی هم بود (چون Constant یعنی همین که تغییر نکند!!!!)
به سال 2001 رسیدیم سالی که Borland حجت را بر برنامه نویسان Win32 تمام کرد و تمام امکانات و قدرتهای برنامه نویسی در Windows و Internet و هر چیز دیگری که می توانید فکرش بکنید را فراهم کرد. در این سال بود که من بالاخره دل از Delphi 5 کندم و زندگی را با Delphi 7 پی گرفتم ! امکانات بسیار زیاد برای برنامه نویسی اینترنت مانند IntraWeb, WebServices, NSAPI-ISAPI, WEBSnap, Indy, ... باعث شد که Delphi 7 بعنوان قویترین ابزار برای برنامه نویسی اینترنت خودنمایی کند. البته Borland در سی دی دوم Delphi 7 یک کمپایلر و یک سری ابزار دیگر قرار داد که شاید اول توجه هیچ کس را به خود جلب نکرد اما در سال 2003 همان ابزارها باعث شد که Delphi 7 بعنوان بهترین و سریعترین ابزار برای برنامه نویسی و توسعه برنامه ها در NET. در بیاید. بله حتی بالاتر از محصولات VisualStudio که برای NET. ایجاد شده بودند. همین امر سبب شد تا در سال 2002 Borland تمام تلاش خود را متوجه حرکت از Win32 به سمت NET. بکند. و در این سال هیچ محصولی به بازار عرضه نشد.
در سال 2003 تقریبا اواخر سال بود که بورلند اعلام کرد اولین محصول خود را که برای برنامه نویسی NET. تولید شده است را به بازار می دهد و همینطور هم شد. پس از دو سال انتظار Delphi 8 به بازار آمد محصولی که هر برنامه نویس Delphi که برای اولین بار آنرا اجرا میکرد مدتی فقط محو تغییرات بسیار عمده ای میشد که در آن داده شده بود. بطوریکه تمام ساختار IDE که در نسخه های پیشین فقط با تغییرات جزیی به بازار می آمد، حال کاملا عوض شده بود. و همین باعث این بود که در این نسخه Borland زیاد موفق نباشد چرا که سرعت پایین در اجرا شدن برنامه و داشتن یک سری مشکلات ریز و درشت در IDE ان و همچنین نبودن امکانی برای برنامه نویسی WIN32 باعث شد که بسیار از برنامه نویسان فعلا با همان Delphi 7 کار کنند و منتظر محصول بعدی بمانند. و در همین سال بود که Borland یک Update برای Delphi 7 منتشر کرد.
و حال میرسیم به بزرگترین و جادویی ترین محصولی که حتی ابر مرد نرم افزار جهان (بیل گیتس) اعلام کرد این محصول برای ما یک چالش اساسی ایجاد خواهد کرد، با نام DiamondBack در کنفرانس Borcon2004 مطرح شد و در سپتامبر سال 2004 Delphi 2005 متولد شد. امکانات و ابزارهای بسیار و از همه مهمتر راهنما و اموزشهای کافی و ساده که هماره این نسخه بود باعث شد که مورد توجه بسیاری از برنامه نویسان قرار بگیرد. نوشته شده توسط ابراهیم خدائی در پنجشنبه نهم فروردین 1386 ساعت 21:24 | لینک ثابت |
|
|
 |
|
نكات مفيد براي كار در محيط دلفي
|
نكات مفيد براي كار در محيط دلفي
محيط دلفي براي برنامه نويسي يكي از بهترين محيطهاي برنامه نويسي است گذشته از كاركرد داخلي و كمپايلر آن كه بسيار قوي و سريع است، محيط آن يعني IDE آنهم قدرت بسيار زيادي دارد كه باعث شده يكي از بهترين اديتورها باشد. در اين مقاله سعي بر اين شده تا با ارائه يك سري از نكات و كليدهاي ميانبر كه مي توانند براي كار در دلفي بسيار مفيد و كارا باشند، كمك كنیم تا شما بتوانيد با قدرت بيشتر به برنامه نويسي و كار در اين محيط قدرتمند ادامه دهيد. در قسمت يك سري از كليدهاي ميانبر و تركيبي مورد استفاده در IDE دلفي را بصورت ليست وار و همراه يك توضيح كوچك آورده شده است.
جستجو در متن بصورت مستقيم: براي اينكار كليدهاي Ctrl+E را بفشاريد و بدنبال آن شروع به تايپ كلمه مورد نظر كنيد نتيجه آن را خود ببينيد. براي اينكه به كلمه بعدي برويد كافيست كليد F3 را بزنيد.
ايجاد فرورفتگي در كد: بعضي اوقات - كه خيلي هم پيش ميآيد - لازم است كه يك مقداري از متن را بصورت بلوك شده به جلو و يا عقب ببريم. منظور دندانه دار كردن متن است كه به خوانايي برنامه كمك مي كند. براي اينكار مي تونيد از كليد Ctrl +Shift+I براي جلو بردن و Ctrl+Shift+U براي عقب برگرداندن متن بلوك شده استفاده كنيد.
پرش به قسمت تعريف يك شي (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 را نگه داريد و يكي از اعداد 0 تا 9 را وارد كنيد تا آن خط به همان شماره علامت گذاري شود و سپس هر جا كه خواستيد برويد و سپس هر بار كه كليد Ctrl را نگه داريد و شماره مورد نظر را وارد كنيد به همان خط باز خواهيد گشت. البته توجه داشته باشيد كه فقط مي توانيد 10 خط را با اين روش علامت گذاري بكنيد و براي برداشتن علامت ها كافيست روي همان خط دوباره كليد Ctrl+shift و شمارهاي كه براي آن خط وارد كرده ايد را بفشاريد با اينكار علامت آن خط برداشته مي شود.
ايجاد كلاس مورد نظر : شما هنگامي كه در قسمت Private و يا Public يك type، روال يا تابع درست كرديد لازم داريد كه قسمتي را براي قرار دادن كدهاي مربوط به آن روال يا تابع را ايجاد كنيد. براي اينكار شما پس از اينكه نام تابع را تايپ كرديد مي توانيد كليدهاي Ctrl+Shift+C را فشار دهيد تا دلفي يك قسمت براي نوشتن كدهاي مورد نظرتان ايجاد كند.
ظاهر كردن پنجره Code insight : شما حتما به اهميت و مفيد بودن اين قسمت دلفي واقفيد كه در هنگام كد نويسي تا چه حد مي تواند كارها را راحت كند. بله در هنگام وارد كردن كدها بعد از وارد كردن نام يك كلاس و يا Object با زدن يك نقطه (.) پنجره Code Insight ظاهر مي شود. حال در بعضي وقتها شما ممكن است كه نقطه را قبلا وارد كرده باشيد و يا در مواقع ديگر اين پنجره ظاهر نشود. در اين صورت براي اينكه پنجره را ظاهر كنيد بايد دوباره نقطه را وارد كنيد ولي راه اسانتري هم وجود دارد و آن اينست كه كليدهاي Ctrl+Speacebar را فشار دهيد.
ظاهر كردن پنجره Code Parameter: همانند بالا در هنگام ظاهر شدن Hint مربوط به راهنماي توابع كه معمولاً بعد از گذاشتن پرانتز مربوط ظاهر ميشود و در مورد پارامترهاي لازم مي باشد نيز مي توانيد از كليدهاي Ctrl+Shift+SpaceBar استفاده كنيد.
رفتن از قسمت تعريف توابع و روالها به قسمت كد آنها: هميشه اين نياز وجود خواهد داشت كه شما در هنگامي كه داريد به دنبال يك روال در قسمت type ميگرديد بعد از پيدا كردن نام آن مي خواهيد كه خود آن تابع يا روال را نيز ببنيد. براي اينكار خوب حتما نام آن را جستجو ميكنيد ولي يك راه آسانتر اينست كه شما روي نام آن تابع قرار گيريد و كليدهاي Ctrl+Shift+Up/Down را بزنيد. در اينحالت اگر روي كد تابع باشيد به قسمت تعريف آن خواهيد رفت. نوشته شده توسط ابراهیم خدائی در پنجشنبه نهم فروردین 1386 ساعت 21:15 | لینک ثابت |
|
|
 |
|
|