# Native Code > برنامه نویسی در Delphi > توسعه نرم افزار مستقل از سکو >  مقالات ، برنامه ها و ... در رابطه با firemonkey (فقط)

## soft-c

سلام دوستان
این تاپیک را ایجاد کردم تا برنامه نویسان اطلاعات ، برنامه ها ، مقالات و ... خود را در رابطه با firemonkey را در این محل قرار دهند .
لطفا فقط در رابطه با firemonkey .
اولیش را خودم می گذارم :
*How to build a FireMonkey iOS Application* 

http://edn.embarcadero.com/article/41620
که از سایت embarcadero گرفتم 
تشکر

----------


## soft-c

می دونم تکراری هست ولی چون می خواهم همه ی بحث ها در رابطه با firemonkey یک جا جمع بشه این مطلب را قرار می دهم .
http://www.felix-colibri.com/papers/...#custom_styles

----------


## soft-c

firemonkey2212019272011.zip
firemonkey indy tcp sockets

----------


## BORHAN TEC

ممنون از تاپیک جالبی که شروع کرده اید.
برنامه ای که در پست 3 قرار داده اید با کاراکتر های یونیکد مشکل داره. البته کد اصلاح شده مثال شما را در همین پست ضمیمه کرده ام که دوستان می توانند از آن استفاده کنند.

----------


## soft-c

*Useful tips for fireMonkey and Delphi XE2*

http://blog.analogmachine.org/2011/0...nd-delphi-xe2/

----------


## soft-c

این دو فیلم کارهای جالبی که با firmonkey ساخته شده را نشان مدهد :
http://www.youtube.com/watch?v=HNucm...eature=related
http://www.youtube.com/watch?v=F-r0LNvAMU8

----------


## soft-c

http://www.delphiformac.com/
به این سایت هم یه سر بزنید مطالب جالبی دارد

----------


## HadiDelphi

سلام
کسی میدونه چجوری میشه توی فایر مانکی برای iOS ، یه فایل رو از طریق URL دانلود کرد ؟

----------


## soft-c

ببین این برای استفاده از url است .البته نه برای ios .ببین اول خود این برای استفاده از url به دردت می خوره ؟
http://stackoverflow.com/questions/7...d-tdownloadurl

----------


## HadiDelphi

با تشکر
ولی تو این مثال از Indy استفاده شده که فعلا تو iOS ساپورت نمیشه :(

----------


## BORHAN TEC

> ولی تو این مثال از Indy استفاده شده که فعلا تو iOS ساپورت نمیشه :(


کی گفته Indy سیستم عامل iOS رو ساپورت نمیکنه؟ :متفکر: 
اتفاقاً باید بگم که Indy از ویندوز و OSX به خوبی پشتیبانی میکنه!  :لبخند گشاده!:

----------


## soft-c

*Sqlite based IOS by Delphi XE2 and Firemonkey*

http://www.delphi-blog.com/sqlite-ba...nd-firemonkey/

----------


## HadiDelphi

سلام
آقای 
*شاهین عشایری*
اگه میشه لطفا چندتا منبع برای استفاده Indy تو iOS توسط فایرمانکی معرفی کنید
مرسی

----------


## BORHAN TEC

سلام
بله کاملاً حق با شماست و من هم در این رابطه اشتباه کرده بودم. :افسرده:  در حال حاضر indy در iOS پشتیبانی نمی شود. این هم جواب آقای Remy Lebeau (یکی از اعضای گروه توسعه دهنده Indy) در این رابطه:

I'm on the Indy development team. iOS is going to be a supported  platform eventually, but there is no ETA at the moment. We haven't  looked at it yet, but it is on our TODO list. It took a bit of time and  effort just to get the Mac OSX support hooked up in time for XE2's  release. – Remy Lebeau - TeamB Sep 17 '11 at 16:30

در حال حاضر برای انجام کار های شبکه ای در iOS می توانید از گزینه های دیگری استفاده کنید. مثل این:
https://developer.apple.com/library/...c/uid/20001091

نکته: در لیست کلاسهای معرفی شده در لینک بالا باید از کلاسهایی کا با عبارت NSURL شروع می شوند استفاده کنید. این هم یک مثال در این رابطه:
http://blogs.embarcadero.com/ao/2011/10/04/39133

مطالعه صفحه زیر هم توصیه می شود:
http://oreilly.com/iphone/excerpts/i...ogramming.html

----------


## BORHAN TEC

در آدرس زیر به تازگی یکسری آموزش های گام به گام در رابطه با FMX(و یا همون FireMonkey) قرار داده شده است که انصافاً خیلی جالب و مفیده:

http://docwiki.embarcadero.com/RADSt...-_Introduction

فقط توجه داشته باشید که برای دسترسی به لینک بالا فعلاً باید از روش های غیر رایج استفاده کرد.

----------


## Ananas

سلام.
این firemonkey چرا اینقدر نمایش کندی داره؟ واقعا افتضاحه. با تمام امکانات و قشنگی و جذابیتش کلا میشه بیخیالش شد. شایدم روی سیستم من اینجوریه. از vcl که خیلی کند تره. اگه اینجور باشه که نمیشه باهاش کار کرد. همش سکته میزنه. انگار داره محاسبات سنگین انجام میده.
مشخصات سیستم:  ویندوز 7 و لپتاپ hp core i 5, سی پی یو 4 هسته ای 2.3 گیگا هرتز. رم 4 گیگ.
به نظرتون چرا؟

----------


## BORHAN TEC

در فایرمانکی فرم ها مبتنی بر gpu هستند و اگر در سیستم شما کارت گرافیک نصب نشده باشد این مشکل را خواهید داشت. من احتمال می دهم که کارت گرافیک شما نصب نیست و در عین حال شما بر روی یک فرم 3d مربوط به فایرمانکی کار می کنید. درسته؟

اگر هم در ابتدای لود برنامه این مشکل را دارید می توانید خاصیت BorderStyle مربوط به فرم اصلی را به bsNone تغییر دهید تا ببینید مشکل برطرف می شود و یا خیر؟

به هر حال برای اینکه بهتر بتوانیم راهنمایی کنیم بهتر است که مشکلتان را کمی واضحتر توضیح دهید!  :متفکر:

----------


## Ananas

> در فایرمانکی فرم ها مبتنی بر gpu هستند و اگر در سیستم شما کارت گرافیک  نصب نشده باشد این مشکل را خواهید داشت. من احتمال می دهم که کارت گرافیک  شما نصب نیست


کارت گرافیک سیستمم نصبه باهاش 3D هم کار میکنم.



> عین حال شما بر روی یک فرم 3d مربوط به فایرمانکی کار می کنید. درسته؟


من فعلا ازون استفاده نمیکنم فقط تستش کردم و بله یک viewport سه بعدی رو باهاش امتحان کردم که یک سیلندر و یک کره و نور و دوربین توش بود. البته من بدون اون هم امتحان کردم و فقط یک Tracbar و یک Button هم روی فرم بود بازم همین طور بود. البته اینکه میگم کند هست نه اینکه خیلی تابلو باشه! نه. ولی بر روونی ه GDI و VCL نیست. در حالی که انتظار میره سرعتش از اون هم بیشتر باشه. من فکر میکنم خوب ایده ای رو پیاده کردن و خیلی خوبه ولی نتونستن درست و بهینه اجراش کنن. البته الان دوباره امتحانش کردم اون مشکل رو نداشت! خوب بود یعنی برای اولین بار که یک TrackBar رو می خواید با موس تغییر بدید اون حالت کند خودشو نشون میده و بعد تند تند موس رو چپ و راست ببرید درست و سریعه. نمی دونم چه موقع هایی سرعتش این طوری میشه. شاید اون موقع برنامه ی خاصی باز بوده. باید امتحان کنم.
یک TrackBar رو رو فرم خالی بگذارید و موقع اجرا سعی کنید شاخص اون رو تند تند به سمت چپ و راست بکشید. حالا همینو با VCL آزمایش کنید ببینید سرعت نمایش اشون متفاوت هست یا نیست. حالا یک ColorPicker رو بگذارید روی فرم و سعی کنید روی مستطیل رنگ اون موس رو در حالت فشردن کلید چپ، تند تند جابجا کنید. حالا همین کار رو با ColorDialog تو VCL مقایشه کنید.
قبلا هم امتحان کرده بودم یکمی کن بود ولی نمیدونم الان چطور درست شده. همون فایلی رو که قبلا ساخته بودم الا که امتحان میکنم (نه تو دلفی، فقط فایل exe رو اجرا میکنم) دیکه کند نیست. من احتمال زیاد میدم که بخاطر برنامه های دیگه بودم. فکر میکنم FlStudio باز بوده (برنامه ی آهنگ سازی که با دلفی نوشته شده و خیلی هم گرافیک خاص و زیبایی داره). اگه بازم برخوردم میگم.

----------


## BORHAN TEC

> در حالی که انتظار میره سرعتش از اون هم بیشتر باشه.


به نظر من اصلاً نباید چنین توقعی داشته باشید چون طبیعتاً برنامه هایی که با FMX ساخته می شوند نسبت به VCL از منابع بیشتری استفاده می کنند. نمیدونم که اطلاع دارید یا نه؟ ولی باید بدانید که در برنامه های 3 بعدی فایرمانکی نسبت به سایر ابزار ها از منابع بسیار کمتری استفاده می کند و بنابراین با سیستم های ضعیفتر بسیار بهتر کار می کند! علت این امر این است که در فایرمانکی از یک روش ابتکاری و در عین حال مدرن استفاده شده است. شما می توانید این موضوع را با بررسی کنفرانس New 3d Capabilities for old 2d projects که توسط آقای Vsevolod Leonov در CodeRage 6 ارائه شده است بهتر و دقیقتر متوجه شوید. با بررسی این موضوع شما حتماً متوجه خواهید شد که فایرمانکی واقعاً در دنیای سه بعدی یک شاهکار بزرگ است.  :چشمک:

----------


## Ananas

> به نظر من اصلاً نباید چنین توقعی داشته باشید چون طبیعتاً برنامه هایی که  با FMX ساخته می شوند نسبت به VCL از منابع بیشتری استفاده می کنند.  نمیدونم که اطلاع دارید یا نه؟


از منابع بیشتری استفاده کنن! توجیه خوبی برای کند بودنش نیست. بازی ها دارن از منابع بیشتری نسبت به برنامه معمولی استفاده میکنن در عین حال سرعت خوب و نمایش قویتری دارن. لا اقل نباید کند تر باشه. چون وابسته به سخت افزار هست. من کدهای دلفی برای بردار ها و ماتریس ها رو می دیدم و هر چی گشتم خبری از دایرکت ایکس نبود و تشابه اسمی خیلی می دیدم ولی مثلا محاسبات ماتریسی که دلفی نوشته داره نرم افزاری محاسبه میشه در حالی که محاسبات ماتریسی D3DX خیلی سریع تر از نوشتن نرم افزاری عمل میکنه. موارد مشابه این زیاد داره. همچین چیزهایی من رو نسبت به سرعتش بدبین میکنه. واقعا از دایرکت ایکس استفاده میکنه؟ یا اپن جی ال؟ یا چیزی مشابه؟
من قبلا برای محاسبات برداری و ماتریسهای سه بعدی یک یونیت نوشته بودم که از dll مخصوص D3DX استفاده نکنم بعد که سرعتاشون رو مقایسه کردم کلا اون یونیت رو برای همیشه گذاشتم کنار. :لبخند گشاده!: 
البته همون طور که گفتم احساس میکنم که کند بودنش مربوط به برنامه ای دیگه ای بوده که احتمالا منابع رو اشغال می کرده. همچین چیزی رو من تو برنامه های گرافیکی که با هم اجرا میشن دیدم. ممکنه یک نرم افزاری دسترسی انحصاری به سخت افزار رو انجام میده و یا زود تر از  اونیکی اجرا میشه.




> شما می توانید این موضوع را با بررسی کنفرانس New 3d Capabilities for old  2d projects که توسط آقای Vsevolod Leonov در CodeRage 6 ارائه شده است  بهتر و دقیقتر متوجه شوید. با بررسی این موضوع شما حتماً متوجه خواهید شد  که فایرمانکی واقعاً در دنیای سه بعدی یک شاهکار بزرگ است.


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

----------


## BORHAN TEC

> از منابع بیشتری استفاده کنن!


اون "اطلاع دارید یا نه؟" مربوط به جمله بعدی منه.



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


در سیستم شما که کارت گرافیک خوبی دارین بله ولی در سیستم های ضعیفتر نه!  فایرمانکی فقط مربوط به برنامه های معمولی نیست. با آن حتی می توانید بازی های سه بعدی هم بسازید(البته فعلاً فقط نمونه های کوچکی ز این دست ساخته شده اند، مثلاً یک بازی بیلیارد که کدش هم در سایت Embarcadero موجود است).



> ولی مثلا محاسبات ماتریسی که دلفی نوشته داره نرم افزاری محاسبه میشه


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



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


فایرمانکی یک فریم ورک مستقل است و از هیچکدام از اینها استفاده نمیکنه.



> شاهین جون یک لینک راحت الحلقوم لطف میکنی


من شنیده ام که چیزی به اسم گوگل وجود داره! آیا تو هم شنیدی؟!  :لبخند: 
برای دانلود این فیلم به لینک زیر برو:
http://www.embarcadero.com/coderage/sessions
و بعدش به سربرگ دوم برو(یعنی Tue, Oct 18)




> اگه همیشه روون نمایش بده حرف نداره.


بعید می دانم که این مورد حتی در تئوری هم نه تنها در فایرمانکی بلکه در تمامی فریم ورکها امکان پذیر باشد(الله اعلم)!  :متفکر:

----------


## Ananas

خوب، من علت کندی رو پیدا کردم. موقعی که لپتاپ من به برقه از گرافیک با حالت  High Performance GPU استفاده میکنه و موقعی که به برق نیست سویچ میکنه رو حالت Power Saving GPU البته از خودم میپرسه بعد سویچ میکنه. حالت High Performance قوی تر از اون یکیه که خوب از اسماشون واضحه ولی تو حالت ضعیف فایر مانکی سرعتش خوبه ولی تو حالت High Performance سرعتش کمه. و لابد از خصیصه ای می خواد استفاده کنه که حالت High Performance از اون پشتیبانی نمیکنه و در نتیجه برای اینکه برنامه از کار نیفته به شکل نرم افزاری شبیه سازی میکنه.
اما یونیت، تو یک پروژه با فایر مانکی فایل FMX.Types3D و همچنین D3DX9 رو به قسمت uses اضافه کن و دو تا Button روی فرم بگذار و دو تا دستور زیر رو به دکمه ها بده:

procedure TForm1.Button1Click(Sender: TObject);
var
  m : TMatrix3D;
  t0 : Double;
  I: Integer;
  s : string;
  j: Integer;
begin
  t0 := Now * 86400.0;
  for I := 0 to 10000000 do
  begin
    m := Matrix3D(
      0.9, 0.1, 0.1, 0.0,
      0.1, 0.8, 0.2, 0.0,
      0.3, 0.2, 0.79, 0.0,
      10.05, 20.1, 30.4, 1.0);
    InvertMatrix(m);
  end;
  t0 := Now * 86400.0 - t0;
  for I := 0 to 3 do
  begin
    s := s + #13#10;
    for j := 0 to 3 do
      s := s + FloatToStr((PD3DXMATRIX(@m))^.m[i, j]) + ' ';
  end;
  ShowMessage('Time : ' + FloatToStr(t0) + #13#10#13#10'Matrix : ' + s);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  m : D3DXMATRIX;
  t0 : Double;
  I: Integer;
  s : string;
  j: Integer;
begin
  t0 := Now * 86400.0;
  for I := 0 to 10000000 do
  begin
    m := D3DXMATRIX.Create(
      0.9, 0.1, 0.1, 0.0,
      0.1, 0.8, 0.2, 0.0,
      0.3, 0.2, 0.79, 0.0,
      10.05, 20.1, 30.4, 1.0);
    D3DXMatrixInverse(m, nil, m);
  end;
  t0 := Now * 86400.0 - t0;
  for I := 0 to 3 do
  begin
    s := s + #13#10;
    for j := 0 to 3 do
      s := s + FloatToStr(m.m[i, j]) + ' ';
  end;
  ShowMessage('Time : ' + FloatToStr(t0) + #13#10#13#10'Matrix : ' + s);
end;

دکمه ی اول با Types3D و دکمه ی دوم با D3DX کار می کنه و بعد از فشردن هر دکمه زمان مقدار دهی اولیه به همراه معکوس کردن یک ماتریس، به تعداد شمارنده حلقه رو میبینید. مقایسه کنید. بیشتر از 5 برابر اختلافشونه. و اگه بخوایم با نامردی تمام مقایسه کنیم اون مقدار دهی اولیه رو هم می بریم بیرون از حلقه :

procedure TForm1.Button1Click(Sender: TObject);
var
  m : TMatrix3D;
  t0 : Double;
  I: Integer;
  s : string;
  j: Integer;
begin
  t0 := Now * 86400.0;
  m := Matrix3D(
    0.9, 0.1, 0.1, 0.0,
    0.1, 0.8, 0.2, 0.0,
    0.3, 0.2, 0.79, 0.0,
    10.05, 20.1, 30.4, 1.0);
  for I := 0 to 10000000 do
  begin
    InvertMatrix(m);
  end;
  t0 := Now * 86400.0 - t0;
  for I := 0 to 3 do
  begin
    s := s + #13#10;
    for j := 0 to 3 do
      s := s + FloatToStr((PD3DXMATRIX(@m))^.m[i, j]) + ' ';
  end;
  ShowMessage('Time : ' + FloatToStr(t0) + #13#10#13#10'Matrix : ' + s);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  m : D3DXMATRIX;
  t0 : Double;
  I: Integer;
  s : string;
  j: Integer;
begin
  t0 := Now * 86400.0;
  m := D3DXMATRIX.Create(
    0.9, 0.1, 0.1, 0.0,
    0.1, 0.8, 0.2, 0.0,
    0.3, 0.2, 0.79, 0.0,
    10.05, 20.1, 30.4, 1.0);
  for I := 0 to 10000000 do
  begin
    D3DXMatrixInverse(m, nil, m);
  end;
  t0 := Now * 86400.0 - t0;
  for I := 0 to 3 do
  begin
    s := s + #13#10;
    for j := 0 to 3 do
      s := s + FloatToStr(m.m[i, j]) + ' ';
  end;
  ShowMessage('Time : ' + FloatToStr(t0) + #13#10#13#10'Matrix : ' + s);
end;

حالا اختلاف تا بیشتر از 7.5 برابر میرسه!
شاید این فقط برای مواقعی باشه که فایرمانکی می خواد در صورت نبودن پشتیبانی از طرف ست افزار، کار رو به شکل نرم افزاری شبیه سازی کنه. شایدم می خواد مستقل از dll هایی مثل d3dx باشه و کندیش رو بجون خریده.

----------

