# Native Code > برنامه نویسی در Delphi > محیط توسعه (IDE) دلفی >  بهترین IDE دلفی

## کاظم فلاحی خواه

من از دلفی هیچی حالیم نمی شه می خواستم از شما دوستان سؤال کنم بهترنی ide دلفی چیست
و چند تا داریم در باره ی هر کدومشون اطلاعات می خواستم و بازار کار دلفی به نظرتون خوبه ؟ می ارزه یاد بگیرم؟

----------


## me.enik

بهترین ide برای دلفی, به نظر من xe2 هستش که واقعا امکانات بی نظیری نسبت به نسخه های پیشینش به دست آورده و قابلیت فایرمانکی که به آن اضافه شده است نیز, بسیار مفید است.
توضیحات بیشتر و کامل تر را میتوانید در لینک زیر مشاهده کنید :
http://www.embarcadero.com/products/delphi

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

با تشکر

----------


## babak_delphi

من معمولا با دلفی کار میکنم
با #C هم کار کردم امما دلفی رو ترجیح میدم
اما الان شرکتها اکثرا دنبال دات نت کار هستن

----------


## BORHAN TEC

> اما الان شرکتها اکثرا دنبال دات نت کار هستن


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

----------


## complexcoding

آقا یه سوال xe2 مگه با سی پلاس پلاس کدنویسی نمی شه؟؟؟  و در کنارش از کامپوننت های دلفی هم می شه استفاده کرد؟؟ چطوریاست ؟؟ آخه من این ide رو در بخش builder هم دیدم؟؟؟

----------


## Ananas

سلام.



> آقا یه سوال xe2 مگه با سی پلاس پلاس کدنویسی نمی شه؟؟؟  و در کنارش از  کامپوننت های دلفی هم می شه استفاده کرد؟؟ چطوریاست ؟؟ آخه من این ide رو  در بخش builder هم دیدم؟؟؟


آقا سلام مخصوص خدمت شما. ببین الان تو program file من یه پوشه به اسم Embarcadero RAD Studio XE2 هست که توی اون یک فایل exe به همین اسمه که وقتی من اونو اجرا میکنم محیط برنامه نویسی باز میشه و بعد میتونم به دو زبون (یا همون زبان برنامه نویسی) پروژه ایجاد کنم. میتونم
 VCL Forms Application - Delphi 
رو از منوی New  انتخاب کنم و یا اینکه
 VCL Forms Application - C++‎Builder 
رو از همون منو انتخاب کنم. به همین ترتیب پروژه ی  Consol و غیره. شما با هر دو زبان می تونید از VCL و توابع و روال ها و کلاس های دلفی استفاده کنید. یونیت های دلفی (همون فایلای .pas) با پسوند .hpp تو پروژه های C++‎Builder در برنامه include میشن. مثلا وقتی که من یک پروژه ی جدید VCL Form Application - C++‎Builder رو می سازم کد زیر تو قسمت Unit1.h هست :

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


به include ها توجه کن. به همین شکل فایلای دلفی وارد C++‎Builder میشن.

----------


## complexcoding

الان متوجه شدم از این لحاظ که می شه از کلاس ها و ... دلفی در قسمت سی پلاس پلاسش استفاده کرد اما از لحاظ اینکه با کدوم زبان می تونیم قدرتمندتر با بیلدر کار کنیم هنوز سواله برام؟ آیا قدرت Delphi builder XE2 بیشتره؟ یا C++‎‎ builder XE2 ؟ ممنون در ضمن اگر کامپوننت درست کنم با ( زبون  :بامزه:  ) سی پلاس پلاس می شه؟ اصلا طریقه درست کردن کامپوننت درش راحته کسی این کارو کرده یا کامپوننت های سی پلاس پلاسشم موجوده یا فقط کامپوننت های دلفیش موجوده؟ 
و سوال آخر اینکه درباره ظاهر نرم افزار می شه مثل کیوت زیبا کار کرد یا ظاهر رو دست کاری کرد ؟ 
در ضمن سوالی جا نمونه ها به همه با شماره پاسخ داده بشه  :لبخند گشاده!:

----------


## Felony

> الان متوجه شدم از این لحاظ که می شه از کلاس ها و ... دلفی در قسمت سی پلاس پلاسش استفاده کرد اما از لحاظ اینکه با کدوم زبان می تونیم قدرتمندتر با بیلدر کار کنیم هنوز سواله برام؟


پلاگین هایی هایی مثل Usefull Object , SQLite  یا Silver Burner , SilCam , Explorer Monitor , Grayscale که کار خودم هست و کاربردهای جهانی دارن همگی با دلفی نوشته شدن ، میتونید در موردشون یک جست و جو بکنید .

در ضمن SDK بیلدر برای C++‎‎ Builder عرضه نشده ، اگر بخوای با C++‎‎ Builder برای بیلدر پلاگین بنویسی باید خودت SDK رو ترجمه کنی که البته SDK بیلدر اصلا پیچیده نیست .

----------


## complexcoding

> پلاگین هایی هایی مثل Usefull Object , SQLite  یا Silver Burner , SilCam , Explorer Monitor , Grayscale که کار خودم هست و کاربردهای جهانی دارن همگی با دلفی نوشته شدن ، میتونید در موردشون یک جست و جو بکنید .
> 
> در ضمن SDK بیلدر برای C++‎‎‎ Builder عرضه نشده ، اگر بخوای با C++‎‎‎ Builder برای بیلدر پلاگین بنویسی باید خودت SDK رو ترجمه کنی که البته SDK بیلدر اصلا پیچیده نیست .


برادر با سلام خسته نباشی چند سوال 
1 : SDK رو ترجمه کنی یعنی دقیقا باید چه بلایی سرش بیاورم!
2 : مگر بیلدر همان SDK نمی باشد؟ یا بیلدر درون SDK می باشد ؟ :گیج:  خدایی یه جور توضیح بدین که کسی که تازه وارد می شود متوجه بشود آخر چرا بدین گونه شرح می دهید!!!!

----------


## Felony

من فکر کردم منظورتون از بیلدر نرم افزار Multimedia Builder هست ، چون همه جا به بیلدر شناخته میشه ، تا به حال نشنیده بودم C++‎ Builder رو بیلدر صدا بزنن !

با این حساب گفته های پست قبل من کنسله !

----------


## complexcoding

> من فکر کردم منظورتون از بیلدر نرم افزار Multimedia Builder هست ، چون همه جا به بیلدر شناخته میشه ، تا به حال نشنیده بودم C++‎‎‎ Builder رو بیلدر صدا بزنن !
> 
> با این حساب گفته های پست قبل من کنسله !


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

----------


## Felony

البته اشتباه از شما بوده ؛ ما Delphi builder نداریم ! اسمش Delphi خالی هست ...

تو قدرت تفاوتی ندارن ، فقط دلفی از لحاظ ابزارها و کامپوننت های آماده کاملتر از C++‎ Builder هست .

----------


## complexcoding

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

----------


## Felony

> همین سی پلاس پلاس با کامپوننت های دلفی بس است


++C با کامپوننت دلفی چه صیغه ایه ؟!

در مورد مقایسه Performance که بی شک دلفی خیلی بهتر از زبان های net. عمل میکنه چون کد native واقعی تولید میکنه ، در مورد بانک اطلاعاتی هم دلفی کاملترین مجموعه ابزارها برای ارتباط با بانک اطلاعاتی رو در بین زبان های برنامه نویسی داره ولی در net. خیلی کارها رو ساده تر انجام میده و برنامه نویس رو کمتر درگیر جزئیات میکنه ، در کل اگر من بودم و قصد برنامه نویسی یک پروژه بزرگ تجاری رو داشتم بی شک دلفی رو انتخاب میکردم .

----------


## complexcoding

خوب یعنی الان دلفی 8 رو یاد بگیرم و بعد منتظر بمونم تا XE3 هم به بازار بیاد؟

----------


## Ananas

> اما از لحاظ اینکه با کدوم زبان می تونیم قدرتمندتر با بیلدر کار کنیم هنوز سواله برام؟


یه بار دیگه بگی بیلدر جفت پا میام تو مانیتور. :لبخند گشاده!:  این فقط اسمشه. من قبلا فکر میکردم که اسمشو گذاشتن C++‎Builder یعنی اینکه کند تر عمل میکنه و خود سی پلاس پلاس نیست. برای Delphi هم فقط دلفی به کار میره و C++‎builder یه اسم هست که برای قسمت C++‎ ، ا RAD Studio گذاشتن.
ولی در جواب صحبتتون عرض کنم که فکر میکنم بستگی به توانایی برنامه نویس و تسلط به هر کدوم از زبون ها داره. یعنی تفاوت قدرت اگه بین این دو تا باشه در حدی نیست که مثلا من بخوام تحت تاثیر قرار بگیرم چون برنامه های من در اون حد  نیست که بخوام از همه ی قدرت دلفی و یا C++‎Builder استفاده کنم که بعد بگم کدومشون زود تر کم میاره و ضعیف عمل میکنه. اما چند تا نکته که بهش برخوردم می نویسم و از دوستانی که تجربه دارن و بیشتر کار کردن می خوام که تجربیاتشون رو در مقایسه ی این دو تا بگن : Delphi و C++‎Builder. و همچنین مطالبی که من می نویسم به دلیل اینکه تجربه ی شخصی هستن و از جای خاص و معتبری نخوندم به درستی و صحتشون نظارت کنید و اشکال نظراتم رو صریحا بگید. ممنون.
1 - ctrl  space یا همون code complation تو دلفی سریع تر و بهتر عمل میکنه.
2 - C++‎ برای استفاده از vcl فایلای دلفی رو استفاده میکنه که تا اون جایی که می دونم دلفی به C++‎builder وابسه نیست. البته این میتونه یک ضعف باشه و می تونه یک نقطه قوت از این جهت که برنامه های نوشته شده با دلفی قابل استفاده با C++‎ هستن ولی فایلای نوشته شده با C++‎ مستقیما با دلفی قابل استفاده نیستن و باید به روش dll و این جور چیزا منتقل بشن.
3 - ویژگی مهمی که C++‎Builder داره و توجه من رو به خودش جلب کرده اینه که زبونش C++‎ هست و در عین حال می تونه مثل دلفی از Visual Componnent Library استفاده کنه همچنین از کلاس ها و توابع دلفی. و به موازات استفاده از امکانات دلفی میتونم برنامه های C++‎ بنویسم و دستوراتم رو با کد های C++‎ که جای دیگه میبینم مثل کتاب ها هماهنگ کنم و لازم نباشه که برای تطبیق کد ها دستورات و توابع رو معادل یابی (چه عبارتی همین الان ساختمش) کنم. و این خصوصیت برای کسایی که با زبون pascal آشنا نیستن ولی به C++‎ می تونن برنامه نویسی کنن خیلی می تونه مهم باشه. دلفی ولی به زبان C++‎.
4 - کلاس هایی که تو دلفی تعریف میشن همشون از TObject باید مشتق بشن و همین امر موجب میشه که کلاس ها یک مقدار سنگین بشه و من در بیشتر موارد تا جایی امکان داشته باشه میرم سراغ record که میشه گفت معادل struct در C++‎. ضمن اینکه به نظرم میاد struct در C++‎ بهتر از record دلفی باشه. ولی کلاس های C++‎ می تونن از نو نوشته بشن بدون اینکه یه چیز مزاحم مثل TObject حتما بگه منم بازی.  البته همیشه مزاحم نیست و می تونه خیلی هم خوب باشه. در این مواقع می تونیم در C++‎ کلاسمون رو از TObject مشتق کنیم. در واقع قدرت انتخاب داریم ولی تو دلفی نه.
5 - مورد دیگه اینکه موقع نوشتن برنامه و خطا یابی، وقتی کد رو تغییر می دید برای دیدن نتیجه ی کد جدید، اگه پروژه با دلفی باشه بدون نیاز به سیو کردن و یا clean کردن و یا بیلد کردن کل پروژه میتونیم اونو ران کنیم و سریع تر نتیجه رو ببینیم ولی تو C++‎ بعضی وقتا با تغییر در کد فورا نتیجه اعمال نمیشه و حتما باید clean بشه و دوباره ساخته بشه و یا کاملا بیلد بشه و اینکه حتما باید سیو بشه بعد این کارا انجام بشه و اوایل که این رو نمی دونستم خیلی میگشتم تو کد و فکر میکردم که اشکال از کد هست در حالی که کد اصلاح شده بود ولی موقع کامپایل از اطلاعات ساخته شده در کد قبلی استفاده می کرد.
6 - ... زیاد نوشتم ببخشید ادامه نمیدم.



> آیا قدرت Delphi builder XE2 بیشتره؟  یا C++‎‎‎ builder XE2 ؟


من در حد کار خودم با هر دوشون راحتم و مشکلی ندارم. و همون طور که عرض کردم اسم ها رو درست به کار ببرید.



> ممنون


نوش جان.



> در ضمن اگر کامپوننت درست کنم با ( زبون  ) سی پلاس پلاس می شه؟ اصلا طریقه درست کردن کامپوننت درش راحته کسی این کارو کرده یا کامپوننت  های سی پلاس پلاسشم موجوده یا فقط کامپوننت های دلفیش موجوده؟


بله اینقدر آسونه که منم درست کردم. ولی در مورد اینکه پلاگین برای کدوم بیشتره و اینکه آیا حتما پلاگیناشون به هم میخورن یانه دوستان دیگه نظر بدن من خیلی با پلاگین و کامپوننت سر و کار ندارم.



> و سوال آخر اینکه درباره ظاهر نرم افزار می شه مثل کیوت زیبا کار کرد یا ظاهر رو دست کاری کرد ؟


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



> در ضمن سوالی جا نمونه ها به همه با شماره پاسخ داده بشه


اوه...... خفم کردی بابا! بزار شاممو بخوریم.

----------


## Felony

> 4 - کلاس هایی که تو دلفی تعریف میشن همشون از TObject باید مشتق بشن و همین امر موجب میشه که کلاس ها یک مقدار سنگین بشه و من در بیشتر موارد تا جایی امکان داشته باشه میرم سراغ record که میشه گفت معادل struct در C++‎‎. ضمن اینکه به نظرم میاد struct در C++‎‎ بهتر از record دلفی باشه. ولی کلاس های C++‎‎ می تونن از نو نوشته بشن بدون اینکه یه چیز مزاحم مثل TObject حتما بگه منم بازی. البته همیشه مزاحم نیست و می تونه خیلی هم خوب باشه. در این مواقع می تونیم در C++‎‎ کلاسمون رو از TObject مشتق کنیم. در واقع قدرت انتخاب داریم ولی تو دلفی نه.


من نفهمیدم ، چیش مزاحمه ؟ بایدی وجود نداره ، تو دلفی هم میتونید کلاس رو از پایه خودتون پیاده کنید ، بدون اینکه کلاس رو از TObject مشتق کنید .

----------


## Ananas

> من نفهمیدم ، چیش مزاحمه ؟


فکر میکنم حافظه ای که اشغال میشه برای هر نمونه بیشتر هست. شایدم دلیلش فشرده نکردن داده های کلاس باشه که امتحان کردم بازم حداقل 4 بایت بیشتر ذخیره میکنه که تو آرایه ها داده های کلاس مثل record پشت سر هم نمیشن. و وجود بعضی متد ها که در TObject هست و نمی خوام تو بعضی کلاس هام باشه. و اینکه متغییر هایی از نوع کلاس تو دلفی به شکل اشاره گر هستن و مثل record نیستن. البته خیلی همیشه مزاحم نیست در بیشتر مواقع کمک دسته.



> بایدی وجود نداره ، تو دلفی هم میتونید کلاس رو  از پایه خودتون پیاده کنید ، بدون اینکه کلاس رو از TObject مشتق کنید .


چطوری باید این کار رو بکنیم. مگه به طور پیش فرض کلاس رو می نویسیم از TObject مشتق نمیشه؟ و مثلا متد Free و این جور چیزا توش هست که من نمی خوام برای بعضی کلاس هام داشته باشمشون.

----------


## Felony

> چطوری باید این کار رو بکنیم. مگه به طور پیش فرض کلاس رو می نویسیم از TObject مشتق نمیشه؟ و مثلا متد Free و این جور چیزا توش هست که من نمی خوام برای بعضی کلاس هام داشته باشمشون.


بله ، به صورت پیش فرش از TObject مشتق میشه .

اگر قصد ارث بری از کلاسی که می نویسید رو ندارید و فقط میخواین به صورت مستقیم ازش استفاده کنید میتونید با همون رکورد پیادش کنید ، مثلا رکورد زیر که براش سازنده و پراپرتی و ... در نظر گرفته شده :

type
  TMyRecord = record
    type
      TInnerColorType = Integer;
    var
      Red: Integer;
    class var
      Blue: Integer;
    procedure printRed();
    constructor Create(val: Integer);
    property RedProperty: TInnerColorType read Red write Red;
    class property BlueProp: TInnerColorType read Blue write Blue;
  end;

ولی اگر قصدتون ارث بری باشه خیر .

----------


## Ananas

ممنون.



> اگر قصد ارث بری از کلاسی که می نویسید رو ندارید و فقط میخواین به صورت  مستقیم ازش استفاده کنید میتونید با همون رکورد پیادش کنید ، مثلا رکورد  زیر که براش سازنده و پراپرتی و ... در نظر گرفته شده :
> 
> type
>   TMyRecord = record
>     type
>       TInnerColorType = Integer;
>     var
>       Red: Integer;
>     class var
> ...


خوب، من همین کار رو میکنم البته برای اشیایی که قراره اندازه ی ثابتی داشته باشن و داخلشون داده ای به شکل اشاره گر هم ندارن از record استفاده میکنم ولی کلاس هایی که پویا و انعطاف پذیر باشن و متدهاشون حافظه میگیرن یا آزاد میکنن از class استفاده میکنم. 



> ولی اگر قصدتون ارث بری باشه خیر .


اینم یک اشکالشه که خدارو شکر برای این مدل اشیا من از ارث بری استفاده نمی کنم. ولی operator ها و دستورات انتصابی برام مهم هستن که تو record بهتر پیاده میشن که جدیدا به جای استفاده از operator تنبلی نمیکنم و با ساخت تابعی به اسم LoadFromOther برای انتصاب (برای کلاس) و تابع Add (هم کلاس هم رکورد) برای جمع و .. و نوشتن اسم تابع در کدها، انتصاب و جمع و تفریق و اینجور چیزا رو انجام میدم بخاطر سرعت اجرا. struct در C++‎ با کلاس عملکردشون یکی هست درسته؟ بخاطر فرق زیاد record با class در دلفی، وقتی در جاهای مختلف می خوندم که struct با class فرقی نداره فکر می کردم دارن اشتباه میگن. چند تا سوالم دارم که اینجا نمی پرسم موضوع تاپیک کمی متفاوته.

----------


## BORHAN TEC

سلام
میدونم که این تاپیک کمی قدیمی شده ولی برای آیندگان جالبه که نکته ای را ذکر کنم.



> 2 - C++‎‎‎ برای استفاده از vcl فایلای دلفی رو استفاده میکنه که تا اون جایی که می دونم دلفی به C++‎‎‎builder وابسه نیست.


همیشه هم اینطور نیست! به عنوان مثال کتابخانه Midas که در VCL وجود دارد و به شدت در برنامه های مبتنی بر بانکهای اطلاعاتی از آن استفاده می شود با C++‎‎ Builder ساخته شده است که کد آن هم به همراه RAD Studio 2010 و نسخه های جدیدتر وجود دارد. از طرفی هم این حرف شما همیشه درست نیستو کلاً به نظر من کسانی که میگن این بهتره یا اون یکی افراد مبتدی هستند و مقایسه اینچنینی اصلاً درست نیست. هر زبان برنامه نویسی نقاط قوت خودش را دارد و دلفی هم به خاطر این عالی است که نقاط قوت بیشتری دارد. در کل در پروژه های سنگین و پیچیده معمولاً از ترکیبی از زبانها استفاده می شود. در کل دلفی هم می تواند به C++‎‎ وابسته باشد. مثلاً شما می توانید از Object File های C++‎‎ در دلفی استفاده کنید و آنها را به فایل پروژه خود لینک کنید که روش کار در لینک زیر توضیح داده شده است:
http://www.codeproject.com/Articles/...with-Delphi-X2
این تکنیک واقعاً فوق العاده است و در توسعه پروژه هایی که در دست دارم واقعاً خیلی کمکمان کرده است! :چشمک: 
موفق باشید...

----------

