امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش برنامه نویسی موبایل با Midlet Pascal
نویسنده پیام
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #1
آموزش برنامه نویسی موبایل با Midlet Pascal
آموزش برنامه نویسی در محیط MIDLETPASCAL




این آموزش توسط من و AHA عزیز تهیه شده

[تصویر:  di-93S2.jpg]

Midletpascal چیست

Midletpascal یک کامپایلرو محیط توسعه (IDE) مخصوص ایجاد ابزارهای کاربردی موبایل تهیه شده است که کامپایلرآن کد نوشته شده به زبان پاسکال را به بایت کد جاوا تبدیل می کند . پس اگر با یکی ازنسخه های زبان برنامه نویسی پاسکال مانند لازاروس یا دلفی آشنایی داشته باشید براحتی می توانید برای گوشی های همراه خود برنامه بنویسید .برنامه هایی که با این کامپایلر ایجاد می شوند قابلیت اجرا بر روی هر نوع وسیله سیار و قابل حمل همچون موبایل را دارند. امروزه اکثر برنامه هایی که برای موبایل نوشته می شوند توسط زبان جاوا ایجاد می شوند ، ولی با استفاده از این کامپایلر شما هیچ احتیاجی به دانستن زبان جاوا ندارید و اگر با پاسکال یا دلفی آشنایی دارید می توانید کار خود با این نرم افزار را شروع کنید. این کامپایلر همراه یک محیط کاربر پسند برای ویندوز عرضه شده است. مزیت Midletpascal این است که کد نوشته شده را مستقیما به یک low-level کد جا وا تبدیل می کند که قابلیت اجرا روی هر دستگاه java me دارد.کدهای تولید شده توسط این کامپایلر برای اجرا نیازی به کامپایلر جاوا ندارد . در اینترنت ابزارهای مشابهی وجود دارد ولی کدهایی که آنها برای شما تولید می کنند یک کد واسط (intermediate-code ) می باشد که با یک مترجم آن را به یک فایل jar تبدیل می کنند که برای اجرا نیاز به کامپایلر جاوا دارید ، در حالی که Midletpascal شما را از این امور بی نیاز می کند.این IDE در ویندوز استفاده می گردد هرچند که می توانید در سیستم عاملهای Linux and MacOS در Wine اجرا نمایید.برنامه های نوشته شده تحت این IDE در تمامی موبایل ها اجرا می شوند و از پلتفرم های MIDP 1.0 and CLDC 1.0 نیز پشتیبانی میکند.نویسنده این محیط توسعه Niksa Orlic (norlic) میباشد که سورس برنامه MIDletPascal 2.02 را در سپتامبر 2009 تحت لیسانس GNU پابلیک کرد و در اختیار عموم قرار داد.که در اکتبر 2009 ورژن3 این IDE استارت خورد و روز به روز به امکانات وقابلیت های آن افزوده شد که در حال حاظر اخرین نسخه این IDE 3.5 میباشد.کتابخانه های زیادی برای این ide نوشته شده که قابلیتهای مختلفی در اختیار شما قرار میدهد و حتی صفحه نمایشهای لمسی را پشتیبانی میکنند. آخرین ورژن این محیط برنامه نویسی را می توانید از آدرس زیر دریافت کنید:

کد:
http://sourceforge.net/projects/midletpascal/
فروم
کد:
http://sourceforge.net/projects/midletpascal/forums/forum/1013750/index/page/1
ویکی پدیا
کد:
http://en.wikipedia.org/wiki/MIDletPascal


مزایای Midletpascal
1.ایجاد بایت کدهای سطح پایین-کوچک و سریع برای جاوا
2.پشتیبانی کامل از قواعد پاسکال
3.بخشی از کد را میتوانید مستقیما در جاوا بنویسید
4.sms messaging
5.ارتباط با پروتکل http
6.پشتیبانی از رابط کاربری و کنترلها User Interface
7.پشتیبانی از چند رسانه ای
8.دارای محیط توسعه کاربر پسند
9.همچنان در حال توسعه میباشد

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
(آخرین ویرایش در این ارسال: ۲۱-دى-۱۳۹۱, ۱۱:۲۹:۱۹، توسط lord_viper.)
۲۱-دى-۱۳۹۱, ۱۱:۲۴:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, godvb, hadikh73, abbasalifix, فاطمه وطن دوست, behzady, WhiteNoise, babyy
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #2
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
آشنایی با محیط و ساختار برنامه نویسی در Midletpascal

[تصویر:  di-H4WS.jpg]

ساختار کلی برنامه نویسی در این محیط بدین صورت است که بدن اصلی و بقولی تابع main مان در مکان statements قرار دارد.که قبل از آن می توان type ها،متغیرها و دیگر پروسیجر مورد نیازمان را تعریف نماییم
کد:
program programName;
type
definitions;
constant
declarations;
variable
declarations;
function and procedure declarations;
begin
  statements
end.

این محیط برنامه نویسی case-insensitive است یعنی بر حروف کوچک و بزرگ حساس نیست یعنی بین begin و BEGIN تفاوتی قایل نمیشود

برای کامنت های چند خطی می توانید متن خود را درون '{' and '}' قرار دهید و یا (* and *) :
کد:
(* this is also a comment *)
{ this is a comment }


همچنین میتوان از استایل زبان C برای کامنت گذاری استفاده نمود:
کد:
// this is a single-line comment
/* this is also a multi-line comment */

type definitions: می بایست Type ها و یا همان ساختاری که مورد نیازتان هست را تعریف نمایید که حتما باید از کلمه کلیدی type نیز استفاده نمایید مانند زیر:
کد:
کد:
program myOwnTypes;
  type
number = integer;
chessFieldType = array[1..8, 1..8] of integer;
chessElementType = record
      positionRow, positionCol: integer;
      elementType: integer;
end;
  var
element: chessElementType;
field: chessFieldType;
numberOfPlayers: number;
  begin
  end.

constant declarations : در این بخش شما می بایست ثابت ها را همراه با نام آنها ومقادیرشان را بنویسید.در مثال زیر می توانید مشاهد کنید:
کد:
کد:
program constantDeclarations;
const
minutesInHour = 60;
  hoursInDay = 24;
  famousQuote = 'To be or not to be';
begin

end.

variable declarations :در این بخش شما متغییرهایتان را تعریف مینمایید که می بایست برای تعریف آنها از کلمه کلیدی var استفاده نمایید:
کد:
کد:
program variableDeclarations;
var
index: integer;
  field: array [1..15] of integer;
begin
  for index := 1 to 15 do
    field[index] := 10;
end.

عملگر انتساب نیز به شکل زیر است که از := استفاده میشود:
کد:
کد:
variable := value;

فراخوانی یک روتین تنها نام آن را ذکرکرد:
کد:
کد:
routine;

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۲۴-دى-۱۳۹۱, ۱۱:۲۴:۴۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : hadikh73, abbasalifix, فاطمه وطن دوست, behzady, WhiteNoise, babyy
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #3
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
type در MIDLETPASCAL


Data type ها را بطور کلی به دو دسته ساده و مرکب تقسیم میکنیم.

ساده عبارتند از:

نوع Boolean


نوع Boolean فقط می تواند دو مقدار true or false را به خود اختصاص دهد.عملگرهایی که برروی این نوع می توان انجام داد به شرح زیر است:
عملگرهای مقایسه ای : =, <>
عملگرهای منطقی or, xor
عملگر and
عملگر not

عملگر not داراری بالاترین الویت و = and <> پایین ترین الویت است.بعنوان مثال عبارت زیر true است:
((true and false) = false)

نوع char


نوع Char که اشاره به یک کاراکتر دارد.عملگرهایی که برروی این نوع انجام میشود:
عملگرهایی مقایسه ای =, <>, <, >, <=, >= که مقدار اسکی دو کاراکتر را مورد بررسی قرار میدهد.
الحاق رشته ها + ، که رشته دومی را در انتهای رشته اول میچسباند.
بازهم یک مثال که عبارت زیر false است:
('a' = 'A')

برای گرفتن کد اسکی یک کاراکتر از تابع ord استفاده میشود و برعکس برای تبدیل کداسکی به کاراکتر معادل از تابع chr استفاده میکنیم که در ادامه توضیح داده خواهند شد.

نوع integer


نوع Integer که می تواند مقدار عددی در رنج -2,147,483,647 and 2,147,483,647 را به ان نسبت داد.عملگرهای مورد استفاده برروی این نوع :
عملگرهای مقایسه ای =, <>, <, >, <=, >=
عملگرهای جمع و تفریق +, -
عملگرهای ضرب و تقسیم *, /, div, mod (هیچ تفاوتی بین / وdiv وجود ندارد)
عملگرهای شیفت shl, shr

نوع string


نوع String برای متون استفاده میشود.در دلفی String را میتوان بعنوان آرایه ای از کاراکترها در نظر گرفت و با آن بصورت آرایه رفتار کرد ولی در MIDletPascal اینطور نیست.
عملگرهای مقایسه ای =, <> (به کارکترهای بزرگ و کوچک حساس است)
عملگرهای الحاقی +
به مثال زیر توجه کنید:

کد:
کد:
var text: string;
  begin
    text := 'It is now ' + getHour(getCurrentTime) + ' o''clock ';
    drawText(text, 0, 0);
    repaint;
    delay(2000);
  end.
در این مثال ما زمان را نمایش میدهیم.میبینید که رشته در ' (single-quote) و برای نمایش خود کاراکتر single-quote آن را دوبار تکرار کرده است.
الحاق رشته ها به همدیگر بصورت هوشمند.یعنی دیگراحتیاجی به استفاده از عملگر "+" نیست مانند زیر:

کد:
کد:
s := 'this is'#10'a test';

نوع داده ای Image در حافظه قرار دارد که میتوان توسط تابع loadImage عکسی را در متغیری از این نوع لود کرد.


نوع real برا نمایش اعداد حقیقی استفاده میشوند.اعمالی که می توان برروی این نوع داده انجام داد:
اعمال مقایسه ای =, <>, <, >, <=, >=
اعمال جمع و تفریق +, -
اعمال ضرب و تقسیم *, /

نوع Record:


نوع Record :در این نوع شما می توانید مجموع از اوناع متغیرها را داشته باشید.بعنوان مثال شما یک بازی نوشته اید که قهرمان این بازی را کاربر کنترل می کند پس شما باید یک record تعریف نمایید که مختصات آن را درصفحه و مقدار جان باقی مانده را در خود نگه دارد.مانند :

کد:
type
heroType = record
     positionX, positionY: integer;
     health: integer;
  end;

برای ساختن یک نمونه از record بالا بدین صورت می نویسیم :
کد:
var
hero: heroType;

و همچنین می توانید پارامترهای ورودی یک روتین را از این نوع تعریف نمایید :
کد:
function isHeroDead(hero: heroType): boolean;
  begin
  if (hero.health <= 0) then
      isHeroDead := true;
    else
      isHeroDead := false;
  end;
record نیز می تواند بجای کلمه کلیدی type از var نیز استفاده نمایید :
کد:
var
hero: record;
       begin
              positionX, positionY: integer;
              health: integer;
         end;
با قرار دادن dot می توانید به داده های record تعریف شده دسترسی پیدا کنید:
کد:
...
  { move the hero to the right }
  hero.positionX := hero.positionX + 1;
  ...
و نکته دیگر در مورد این نوع داده ای که شما نمی توانید مستقیما دونوع متفاوت تعریف شده از record درون هم کپی کنید و یا انتساب دهید.بلکه می بایست مقدارهای داخلی آنها را کپی نمایید.
کد:
کد:
var a, b: record
              x: integer;
          end;
  begin
    ...
    a := b; { this is not valid }
    ...
    a.x := b.x; { copy element by element instead }
  end.

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۲۴-دى-۱۳۹۱, ۲۱:۱۳:۴۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : abbasalifix, hadikh73, godvb, behzady, WhiteNoise, babyy
abbasalifix غایب
کاربر با تجربه
****

ارسال‌ها: 1,394
موضوع‌ها: 82
تاریخ عضویت: دى ۱۳۸۸

تشکرها : 1496
( 2198 تشکر در 1065 ارسال )
ارسال: #4
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
به علت فیلتر بودن سایت فوق فایل رو اینجا پیوست میکنم
تصاویر بالا رو هم توی همین انجمن آپلود کنید تا دیگه مشکل پاک شدن نداشته باشیم
۲۴-دى-۱۳۹۱, ۲۱:۴۰:۵۵
ارسال‌ها
پاسخ
تشکر شده توسط : hadikh73, godvb, lord_viper, WhiteNoise, babyy
godvb غایب
مدیر بازنشسته بخش نفوذ و امنیت
*****

ارسال‌ها: 430
موضوع‌ها: 77
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 886
( 1338 تشکر در 343 ارسال )
ارسال: #5
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
سلام.

دوستان عزیز در پایان تمام آمو.زش به صورت فایل PDF قرار داده خواهد شد.


نوع Array


برای تعریف متغییرها ما به این صورت عمل میکردیم

کد:
var
a:integer;

با این کار مقداری از حافظه برای a رزرو میشد تا مقدار عددی در ان قرار گیرد اما اگر بخواهیم 10 عدد را نگهداری کنیم چه؟ تعریف 10 متغییر؟ اگر بخواهیم 1000 عدد را نگهداری کنیم چه؟ استفاده از ارایه به ما این امکان را میدهد تا برای 1000 متغییر 1 نام تعریف کرده و با استفاده از شماره ان عنصر به ان دستیابی پیدا کنیم اعضای یک ارایه در حافظه در مجاور هم قرار میگیرند و به اسانی میتوان در هر قسمت اطلاعات را وارد کرد یا خواند.آرایه ها بدین صورت تعریف میشوند :

کد:
type
chessFieldType = array[1..8, 1..8] of integer;

برای تعریف یک آرایه 8*8 که یک آرایه دوبعدی میشود بدین صورت انجام میشود :

کد:
type
chessFieldType = array[1..8, 1..8] of integer;
var
chessField: chessFieldType;

که برای ساده ترشدن دوخط کد بالا معادل تکه کد زیر است:

کد:
var
chessField: array[1..8, 1..8] of integer;

در مثال زیر خانه های خالی از جدول شطرنج مان را میشماریم :

کد:
type
chessFieldType = array[1..8, 1..8] of integer;
var
chessField: chessFieldType;
i, j, count: integer;
begin
...
{ initialize the chess field to contain some elements }
...
count := 0;
for i:=1 to 8 do
for j:=1 to 8 do
if chessField[i, j] = 0 then count := count + 1;
end.

می توان آرایه های چند بعدی داشته باشید ولی به این نکته توجه کنید که آرایه های بعد زیاد حافظه زیادی را اشغال می کنند.توجه داشته باشید حداکثر طول ارایه ها برابر با 32767 (15 bits) میباشد.


حلقه ها


دستور for


Syntax این دستور بصورت زیر است:


کد:
for loopIndex := initialValueExpression to finalValueExpression do
begin
statements
end;

بجای to می توانید از downto استفاده که مقدار شمارشگر حلقه را کاهش میدهد.تکه کد زیر جمع اعداد از 1 تا 10 را محاسبه می کند :

کد:
for i:= 1 to 10 do
begin
sum := sum + i;
end;

دستور while نیز یک نوع دیگر ازحلقه ها محسوب میشود و syntax آن نیز بصورت زیر است:

کد:
while condition do
begin
statements
end;

برای منتظرماندن ورودی کاربر می توان این چنین بنویسیم:


کد:
while (getKeyClicked = KE_NONE) do
begin
delay(100);
end;

دستور repeat/until نیزبدین صورت است:

کد:
repeat
statements;
until endingCondition;

مثال قبلی را با این دستور میتوان بدین صورت پیاده سازی کرد:

کد:
repeat
delay(100);
until (getKeyClicked <> KE_NONE)

برای ایجاد یک حلقه بینهایت می توانید از دستورات REPEAT/FOREVER نیز استفاده نمایید.مثال:

کد:
repeat
...
if condition then
break;
...
fo
rever;

دستور Break برای خروج از حلقه استفاده می شود که در تمامی انواع حلقه های ذکرشده بالا می توان استفاده نمود.به این مثال توجه کنید:

کد:
repeat
for i := 1 to 10 do
begin
if doSomething(i) = -1 then break; // break from for-loop
end;

until getClickedCommand <> emptyCommand;

آنچه توانسته ایم انجام دهیم، لطف پرودگار بوده است.

XMen For Ever
۲۴-دى-۱۳۹۱, ۲۲:۵۷:۳۸
ارسال‌ها
پاسخ
تشکر شده توسط : behzady, lord_viper, WhiteNoise, babyy
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #6
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
دستورات If-then-else
دستور if یا دستور شرطی. اگر بخواهیم شرطی را در برنامه برسی کنیم از دستور if استفاده میکنیم.مثلا اگر مقدار a با b برابر بود این کد را اجرا کن در غیر این صورت این کد را اجرا کن.
شکل کلی دستور بصورت زیر است:

کد:
کد:
if condition then
begin
  statements; { condition true branch }

end
[
else
begin
  statements; { condition false branch }
end;
]

توجه:هرگاه دستورات بیش از یک خط بشود احتیاج begin/end خواهیم داشت.اگر دستور یک خط باشد می توان از begin/end استفاده نکرد.

شیفت دادن
استفاده از عمل های شیفت مانند SHL and SHR .مانند زیر:
کد:
a := $A714;
  b := a shl 3;
  c := b shr 2;

همانند زبان C-C++ میتوانید از علامت های <> نیز برای شیفت دادن استفاده نمایید:
کد:
a := $714A;
  b := a << 3;
  c := b >> 2;

برای انجام عملیات شیفت به راست بدون علامت می توانید بصورت زیر عمل نمایید:
کد:
کد:
a := $2704;
  b := a ushr 1;
  c := b >>> 2;

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

کد:
var formCommand, canvasCommand: command;
  begin
    formCommand := createCommand('Show canvas', CM_SCREEN, 1);
    canvasCommand := createCommand('Show form', CM_SCREEN, 1);
    
    { add the canvas form onto the canvas (the canvas is displayed by default) }
    addCommand(canvasCommand);

    { switch to form display }
    showForm;

    { add the form command to the form display }
    addCommand(formCommand);

    { forever switch between the canvas and the form display }
    while true do
    begin
      if getClickedCommand = formCommand then
        showCanvas;
      if getClickedCommand = canvasCommand then
        showForm;
    end;
  end.

نوع داده ای RecordStore

Recordstore: همان فایل در سیستم خودمان محسوب میشود.برنامه ها تنظیمات و داده های موردنیازشان در در recordstore ذخیره میکنند که در اجراهای بعد می توانند آنهارا بازیابی نمایند.هر برنامه فقط یک recordstore دارد که ساختار آن شبیه آرایه است و دارای index است برای برنامه های موبایل که اکثرا کرک میکنم و چندتایی رو روی فروم قرار دادم از record برای ذخیره سریال و چک کردن استفاده میکنند که بهترین سرنخ برای رسیدن به هدف میباشد

این تابع اطلاعات را در رکورد استورrs ریخته و ایندکس انرا برمیگرداند و در صورت بروز خطا -1 برمیگرداند

کد:
function addRecordStoreEntry(rs: recordStore; data: string): integer;

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

کد:
procedure closeRecordStore(rs: recordStore);

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

کد:
procedure deleteRecordStore(name: string);

مقدار یک data را با استفاده از ایندکس آن در یک دیتا استور حذف میکند

کد:
procedure deleteRecordStoreEntry(rs: recordStore; index: integer);

این تابع اندیس بعدی که تابع AddRecordStoreEntry اختصاص داده میشود را برمیگرداند

f
کد:
unction getRecordStoreNextId(rs: recordStore): integer;

تعداد رکوردهای موجود در دیتااستور را برمیگرداند

کد:
function getRecordStoreSize(rs: recordStore): integer;

برای تغییر یا بروز رسانی یک رکورد در دیتا استور بر اساس ایندکس آن

کد:
procedure modifyRecordStoreEntry(rs: recordStore; newData: string; index: integer);

باز کردن یک دیتا استور بر اساس نام آن اگر وجود نداشته باشد یک دیتااستور خالی ساخته میشود

کد:
function openRecordStore(name: string): recordStore;

خواندن رکورد ذخیره شده در دیتا استور بر اساس ایندکس آن

کد:
function readRecordStoreEntry(rs: recordStore; index: integer): string;
مثال:
کد:
var rs: recordStore;
      index: integer;
      name: string;
  begin
    // write some data inside record store
    rs := openRecordStore('names');
    index := addRecordStoreEntry(rs, 'John Smith');
    closeRecordStore(rs);

    // read the data
    rs := openRecordStore('names');
    name := readRecordStoreEntry(rs, index);
    closeRecordStore(rs);
  end.

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۲۶-دى-۱۳۹۱, ۱۱:۱۶:۳۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : behzady, WhiteNoise
godvb غایب
مدیر بازنشسته بخش نفوذ و امنیت
*****

ارسال‌ها: 430
موضوع‌ها: 77
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 886
( 1338 تشکر در 343 ارسال )
ارسال: #7
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
کار با http



نوع داده ای Http باMIDletPascal می توان یک ارتباط کامل HTTP را داشت.در یک ارتباط Http می بایست پارامترهایی را مقداردهی کنید.که ترتیب عملیات یک ارتباط به شرح زیر است(life cycle):
1. ایجاد ارتباط با وب سرور

کد:
function openHttp(httpConn: http; url: string):boolean;


2. چک کردن باز بودن ارتباط با سرور

کد:
function isHttpOpen(httpConn: http):boolean;

3. تنظیم متد ارسال درخواست که میتواند مقادیری برابر با GET , POST , HEAD داشته باشد

کد:
procedure setHttpMethod(httpConn: http; method:string);

4. افزودن فیلد هدر درخواست (اختیاری)

کد:
procedure addHttpHeader(httpConn: http; name, value:string);

5. افزودن بدنه درخواست که فقط در متد POST مورد نیاز است

کد:
procedure addHttpBody(httpConn: http; data: string);

6. ارسال درخواست و منتظر جواب بودن از وب سرور

کد:
function sendHttpMessage(httpConn: http): integer;

7. خواند فیلد هدر پاسخ

کد:
function getHttpHeader(httpConn: http; name: string): string;

8. خواندن محتوای پاسخ

کد:
function getHttpResponse(httpConn: http):string;

9. بستن ارتباط

کد:
procedure closeHttp(httpConn: http);


یک نمونه سورس که می توانید برای درک بهتر مسئله در زیر ببنید:


کد:
var conn: http;
      htmlBody: string;
      contentType: string;
  begin
    if not openHttp(conn, 'http://www.google.com') then halt;
    setHttpMethod(conn, GET);
    addHttpHeader(conn, 'User-agent', 'MIDletPascal browser');
    if sendHttpMessage(conn) <> 200 then halt;
    htmlBody := getHttpResponse(conn);
    contentType := getHttpHeader(conn, 'Content-type');
    closeHttp(conn);
  end.


نوع داده Resource


نوع Resource که می توانید فایل هایی را بعنوان ریسورس در برنامه داشته باشید و درهنگام اجرا از آنها استفاده نمایید. با دادن نام یک ریسورس انرا باز میکند

کد:
function openResource(name: string): resource;

ریسورس مورد نظر را میبندد

کد:
procedure closeResource(res: resource);

بایت بعدی در ریسورس را میخواند اگر چیزی وجود نداشته باشد مقدار EOF یا ارور برمیگرداند

کد:
function readByte(res: resource):integer;

خط بعدی در ریسورس را میخواند اگر چیزی وجود نداشته باشد رشته برگردانده شده مقدار خالی یا ارور برمیگرداند

کد:
function readLine(res: resource):string;

اگر ریسورس مورد نظر وجود داشته باشد مقدار درستی و در غیر این صورت مقدار نادرستی برمیگرداند

کد:
function resourceAvailable(res: resource):boolean;
مثال:


کد:
var res   : resource;
      byte  : integer;
      line  : string;
      index : integer;
  begin
      res := openResource('/data.txt');
    
      if (resourceAvailable(res)) then
      begin
          byte := readByte(res);
      line := readLine(res);
          closeResource(res);
      end;
      
      showForm;
      index := formAddString('Byte is: ' + chr(byte));
      index := formAddString('Line is: ' + line);
      delay(1000);
  end.

آنچه توانسته ایم انجام دهیم، لطف پرودگار بوده است.

XMen For Ever
۲۶-دى-۱۳۹۱, ۱۷:۰۰:۲۸
ارسال‌ها
پاسخ
تشکر شده توسط : behzady, lord_viper, WhiteNoise
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #8
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
توابع فورم


کد:
procedure addCommand(cmd: command);

این تابع برای اضافه کردن یک کامند به صفحه نمایش دستگاه استفاده میشود
توجه داشته باشبد بعضی از موبایلها مانند موتورلا بدون فراخوانی تابع repaintبعد از این تابع کامند را ایجاد نمیکنند پس بعد از استفاده از تابع addCommand حتما از تابع repaint استفاده کنید

کد:
function choiceAppendString(choiceID: integer; itemText:string):integer;

اضافه کردن متن به یک choice group با استفاده از id آن
کد:
var choiceGroupID: integer;
NY, LA: integer;
begin
showForm;
choiceGroupID := formAddChoice('Where do you live?', CH_EXCLUSIVE);
NY := choiceAppendString(choiceGroupID, 'New York');
LA := choiceAppendString(choiceGroupID, 'Los Angeles');
end.

کد:
function choiceAppendStringImage(choiceID: integer; itemText:string; img:image):integer;

اضافه کردن یک متن و عکس به یک choice group با استفاده از id آن

کد:
var choiceGroupID: integer;
NY, LA: integer;
begin
showForm;
choiceGroupID := formAddChoice('Where do you live?', CH_EXCLUSIVE);
NY := choiceAppendStringImage(choiceGroupID, 'New York', loadImage('/NY.png'));
LA := choiceAppendStringImage(choiceGroupID, 'Los Angeles', loadImage('/LA.png'));
end.

کد:
function choiceGetSelectedIndex(choiceID: integer):integer;

ایندکس ایتم انتخاب شده در choice group را برمیگرداند اگر ایتمی انتخاب نشده باشد مقدار 1- را برمیگرداند

کد:
function choiceIsSelected(choiceID: integer; itemIndex:integer):boolean;

اگر ایتم مورد نظر در choice group انتخاب شده باشد مقدار درستی در غیر این صورت مقدار نادرستی برمیگرداند

کد:
var choiceGroupID: integer;
NY, LA: integer;
begin
showForm;
choiceGroupID := formAddChoice('Where do you live?', CH_EXCLUSIVE);
NY := choiceAppendStringImage(choiceGroupID, 'New York', loadImage('/NY.png'));
LA := choiceAppendStringImage(choiceGroupID, 'Los Angeles', loadImage('/LA.png'));
if choiceIsSelected(choiceGroupID, NY) then
formAddString('New York');
else
formAddString('Los Angeles');
end.

کد:
procedure clearForm;

تمام المانها و کامندهای روی یک فورم را حذف میکند

کد:
var label_id, textField_id: integer;
begin
label_id := formAddString('Hello world');
textField_id := formAddTextField('Enter your name', 'Mr.Smith', 20, TF_ANY);
showForm;
delay(2000);
clearForm;
delay(2000);
end.

کد:
function createCommand(label:string; commandType:integer; priority:integer): command;

از این تابع برای ایجاد یک کامند استفاده میشود
توجه داشته باشید label کامند باید کوتاه باشد حق تقدم کامند بر اساس priority مشخص میشود عدد پایینتر یعنی تقدم بالا و عدد بالاتر یعنی تقدم پایینتر و مقدار commandType نوع کامند را مشخص میکند که میتواند مقادیر زیر باشد

کد:
CM_SCREEN - any command type
CM_BACK
CM_CANCEL
CM_OK
CM_HELP
CM_STOP
CM_EXIT
CM_ITEM

var exitCmd, pauseCmd: command
کد:
;
begin
exitCmd := createCommand('Exit', CM_EXIT, 1);
pauseCmd := createCommand('Pause', CM_SCREEN, 1);
addCommand(exitCmd);
addCommand(pauseCmd);
end.

کد:
function emptyCommand: command;

این تابع مقدار nonclicked را برمیگرداند واز این تابع معمولا برای چک کردن کلیک شدن یک کامند مورد استفاده قرار میگیرد

کد:
var ok, clicked: command;
begin
ok := createCommand('OK', CM_OK, 1);
addCommand(ok);
repeat
clicked := getClickedCommand;
until clicked <> emptyCommand;
if clicked = ok then halt else doSomething...
end.

کد:
function formAddChoice(label:string; choiceType:integer):integer;

این تابع یک choice group به فورم اضافه میکند و id ان choice group را برمیگرداند .مقدار choiceType میتواند 2 مقدار زیر را داشته باشد
کد:
CH_EXCLUSIVE:1 ایتم فقط انتخاب شود
CH_MULTIPLE: تعداد دلخواه ایتم میتواند انتخاب شود

کد:
function formAddDateField(label: string; type:integer): integer;

اضافه کردن فیلد تاریخ و زمان به فورم مقدار type میتواند مقادیر زیر را داشته باشد

کد:
DF_DATE – فقط تاریخ
DF_TIME – فقط زمان
DF_DATE_TIME – نمایش تاریخ و زمان با هم

کد:
function formAddGauge(label:string; isInteractive:boolean; maxValue, initialValue:integer): integer;

اضافه کردن یک Gauge به فورم و مقدار id آن Gauge را برمیگرداند.توجه داشته باشید اگر مقدار isInteractive را برابر False قرار دهید دریگر مقدار Gauge را نمیتوانید تغییر دهید

کد:
function formAddImage(i:image):integer;

اضافه کردن یک کنترل عکس به فورم و id کنترل را برمیگرداند

کد:
var image_id: integer;
begin
image_id := formAddImage(loadImage('/logo.png'));
showForm;
delay(2000);
end.

کد:
function formAddSpace:integer;

برای ایجاد فاصله بین کنترلهای روی فورم مورد استفاده قرار میگیرد و id کنترل را برمیگرداند

کد:
var label_id, space_id, textField_id: integer;
begin
label_id := formAddString('Hello world');
space_id := formAddSpace();
textField_id := formAddTextField('Enter your name', 'Mr.Smith', 20, TF_ANY);
showForm;
delay(2000);
end.

کد:
function formAddString(s:string):integer;
برای ایجاد یک label (متن غیر قابل تغییر)روی فورم بکار میرود و id انرا برمیگرداند

کد:
var label_id: integer;
begin
label_id := formAddString('Hello world');
showForm;
delay(2000);
end.


کد:
function formAddTextField(prompt, defaultValue: string; maxSize: integer; constraints:integer): integer;

این تابع یک text field روی فورم ایجاد کرده و id انرا برمیگرداند. Promptمقداری که بعدا در تکست فیلد نمایش داده میشود defaultValue مقدار پیش فرض maxSize حداکثر طول کاراکترها که در تکست فیلد قرار میگیرد constraints که میتواند دارای مقادیر زیر باشد
کد:
TF_ANY – هر کاراکتری را قبول میکند
TF_EMAIL – فقط ادرس ایمیل میتوان در ان وارد کرد
TF_NUMERIC – فقط میتوان عدد در ان وارد کرد
TF_PHONENUMBER – فقط میتوان شماره تماس در آن وارد کرد
TF_URL – فقط میتوان ادرس اینترنتی در آن وارد کرد

کد:
var textField_id: integer;
begin
textField_id := formAddTextField('Enter your name', 'Mr.Smith', 20, TF_ANY);
showForm;
delay(2000);
end.

کد:
function formGetDate(index: integer): integer;

مقدار ساعت و تاریخ را در یک date filed قرار میدهد که یک مقدار عددی بر حسب ثانیه از 1 ژانویه 1970 میباشد که باید id آن date filed را به این تابع ارسال کنید

کد:
function formGetText(textFieldID:integer):string;

متن درون یک تکست فیلد را برمیگرداند.توجه داشته باشید که id تکست فیلد مورد نظر را باید به این تابع ارسال کنید

کد:
function formGetValue(gaugeID:integer):integer;

مقدار یک gauge را برمیگرداند . توجه داشته باشید که id آن gauge مورد نظر را باید به این تابع ارسال کنید

کد:
procedure formRemove(item:integer);

کنترل مورد نظر را از فورم حذف میکند. توجه داشته باشید که id کنترل مورد نظر را باید به این تابع ارسال کنید

کد:
procedure formSetDate(index: integer; dateTime: integer);

مقدار درون یک date filed را میتوان با این تابع تغییر داد.توجه داشته باشید اگر نوع date filed برابر با DF_TIME باشد باید مقدار dateاز DateTime آن برابر با 0 باشد

کد:
procedure formSetText(textFieldID:integer; text:string);

تغییر متن یک تکست فیلد با استفاده از ایدی آن

p
کد:
rocedure formSetValue(gaugeID:integer; value:integer);

تغییر مقدار یک gauge با استفاده از ایدی آن

کد:
function getClickedCommand: command;

اخرین کامندی که کلیک شده را برمیگرداند

کد:
var exitCmd, clicked: command;
begin
exitCmd := createCommand('Exit', CM_EXIT, 1);
addCommand(exitCmd);
repeat
clicked := getClickedCommand;
until clicked <> emptyCommand;
end.

کد:
function getFormTitle: string;

عنوان فورم جاری را برمیگرداند

کد:
function getTextBoxString:string;

متن درون تکست باکس را برمیگرداند
کد:
var cont : command;
quote : string;
begin
showTextBox('Enter your favorite quote', 'To be or not to be', 200, TF_ANY);
cont := createCommand('Continue', CM_SCREEN, 1);
addCommand(cont);
repeat
delay(100);
until getClickedCommand <> emptyCommand;
quote := getTextBoxString;
...
end.

کد:
function menuAppendString(text: string): integer;

پیوست یک ایتم به منو و برگرداندن ایدی ایتم جدید
کد:
var tetris, minesweeper, snake : integer;
play, clicked : command;

begin
showMenu('Select a game', CH_IMPLICIT);
tetris := menuAppendString('Tetris');
minesweeper := menuAppendString('Minesweeper');
snake := menuAppendString('Snake');
play := createCommand('Play', CM_SCREEN, 1);
addCommand(play);
repeat
delay(100);
clicked := getClickedCommand;
until clicked = play;

showCanvas; // show canvas and remove menu from the screen
if menuGetSelectedIndex = tetris then playTetris;
if menuGetSelectedIndex = minesweeper then playMinesweeper;
if menuGetSelectedIndex = snake then playSnake;
...
end.

کد:
function menuAppendStringImage(text: string; img:image): integer;

پیوست کردن یک ایتم با عنوان و عکس به منو و برگرداندن ایدی ایتم جدید

کد:
var tetris, minesweeper, snake : integer;
play, clicked : command;

begin
showMenu('Select a game', CH_IMPLICIT);
tetris := menuAppendStringImage('Tetris', loadImage('/tetris.png'));
minesweeper := menuAppendStringImage('Minesweeper', loadImage('/mine.png'));
snake := menuAppendStringImage('Snake', loadImage('/snake.png'));
play := createCommand('Play', CM_SCREEN, 1);
addCommand(play);
repeat
delay(100);
clicked := getClickedCommand;
until clicked = play;
showCanvas; // show canvas and remove menu from the screen
if menuGetSelectedIndex = tetris then playTetris;
if menuGetSelectedIndex = minesweeper then playMinesweeper;
if menuGetSelectedIndex = snake then playSnake;
...
end.


کد:
function menuGetSelectedIndex: integer;

ایدی منوی انتخاب شده را برمیگرداند اگر منویی انتخاب نشده باشد مقدار 1- را برمیگرداند

کد:
var tetris, minesweeper, snake : integer;
play, clicked : command;

begin
showMenu('Select a game', CH_IMPLICIT);
tetris := menuAppendStringImage('Tetris', loadImage('/tetris.png'));
minesweeper := menuAppendStringImage('Minesweeper', loadImage('/mine.png'));
snake := menuAppendStringImage('Snake', loadImage('/snake.png'));
play := createCommand('Play', CM_SCREEN, 1);
addCommand(play);
repeat
delay(100);
clicked := getClickedCommand;
until clicked = play;
showCanvas; // show canvas and remove menu from the screen
if menuGetSelectedIndex = tetris then playTetris;
if menuGetSelectedIndex = minesweeper then playMinesweeper;
if menuGetSelectedIndex = snake then playSnake;
...
end.

کد:
function menuIsSelected(index: integer): boolean;

اگر اندیس مورد نظر در منو انتخاب شده باشد مقدار درستی در غیر این صورت مقدار نادرستی برمیگرداند

کد:
var tetris, minesweeper, snake : integer;
play, clicked : command;

begin
showMenu('Select a game', CH_IMPLICIT);
tetris := menuAppendStringImage('Tetris', loadImage('/tetris.png'));
minesweeper := menuAppendStringImage('Minesweeper', loadImage('/mine.png'));
snake := menuAppendStringImage('Snake', loadImage('/snake.png'));
play := createCommand('Play', CM_SCREEN, 1);
addCommand(play);
repeat
delay(100);
clicked := getClickedCommand;
until clicked = play;
showCanvas; // show canvas and remove menu from the screen
if menuIsSelected(tetris) then playTetris;
if menuIsSelected(minesweeper) then playMinesweeper;
if menuIsSelected(snake) then playSnake;
...
end.

کد:
procedure playAlertSound;

اجرای یک صدا وابسته به اخطار

کد:
var cm : command;

begin
showAlert('Message', 'New message arrived', loadImage('/img1.png'), ALERT_INFO);
playAlertSound;

cm := createCommand('OK', CM_OK, 1);
addCommand(cm);

repeat
delay(100);
until getClickedCommand <> emptyCommand;

showForm; // this will clear alert from the screen
...
end.

کد:
procedure removeCommand(cmd: command);

حذف یک کامند از صفحه نمایش دستگاه

کد:
procedure removeFormTitle;

حذف عنوان فورم

کد:
procedure setFormTitle(title: string);
تغییر عنوان فورم

کد:
procedure showAlert(title: string; message:string; img:image; alertType:alert);

نمایش پیغام بر روی صفحه title عنوان پیغام message متن پیغام alertType میتواند یکی از مقادیر زیر را دارا باشد

کد:
ALERT_INFOاطلاعات
ALERT_WARNINGاخطار
ALERT_ERRORخطا
ALERT_ALARMپیغام
ALERT_CONFIRMATION تایید

کد:
var cm : command;

begin
showAlert('New message', 'You have just received a message from MrSmith', loadImage('/img1.png'), ALERT_INFO);
playAlertSound;

cm := createCommand('Read', CM_OK, 1);
addCommand(cm);

repeat
delay(100);
until getClickedCommand <> emptyCommand;

showForm; // this will clear alert from the screen
...
end.

کد:
procedure showCanvas;

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

کد:
var label_id, textField_id: integer;
begin
label_id := formAddString('Hello world');
textField_id := formAddTextField('Enter your name', 'Mr.Smith', 20, TF_ANY);
showForm;
delay(2000);
showCanvas;
drawText('Hello world', 0, 0);
repaint;
delay(2000);
end.

کد:
procedure showForm;

از این تابع برای نمایش یک فورم روی صفحه نمایش دستگاه استفاده میشود.یک فورم میتواند دارای المانها و رابطهای کاربری مانند تکست فیلد و دیتا فیلد و ... باشد
کد:
var label_id, textField_id: integer;
begin
label_id := formAddString('Hello world');
textField_id := formAddTextField('Enter your name', 'Mr.Smith', 20, TF_ANY);
showForm;
delay(2000);
end.

کد:
procedure showMenu(title:string; menuType:integer);

یک منو را در صفحه نمایش دستگاه نشان میدهد. menuType میتواند یکی از مقادیر زیر باشد
کد:
CH_IMPLICIT – انتخاب دلخواه
CH_EXCLUSIVE – به هر ایتم یک رادیو باتن اضافه میشود
CH_MULTIPLE – شما میتوانید چند ایتم انتخاب کنید

کد:
var tetris, minesweeper, snake : integer;
play, clicked : command;

begin
showMenu('Select a game', CH_IMPLICIT);

tetris := menuAppendString('Tetris');
minesweeper := menuAppendString('Minesweeper');
snake := menuAppendString('Snake');

play := createCommand('Play', CM_SCREEN, 1);
addCommand(play);

repeat
delay(100);
clicked := getClickedCommand;
until clicked = play;

showCanvas; // show canvas and remove menu from the screen

if menuGetSelectedIndex = tetris then playTetris;
if menuGetSelectedIndex = minesweeper then playMinesweeper;
if menuGetSelectedIndex = snake then playSnake;
...
end.

procedure showTextBox(title: string; initialContents: string; maxSize: integer; constraints: integer);
نمایش تکست باکس در صفحه.تکست باکس کل صفحه نمایش دستگاه را اشغال کرده و به جز کامند چیزی روی آن قرار نمیگیرد.مقدار constraints میتواند یکی از مقادیر زیر را دارا باشد

کد:
TF_ANY – هر کاراکتری مجاز است
TF_EMAIL – فقط آدرس ایمیل در آن قرار گیرد
TF_NUMERIC – فقط عدد در آن قرار گیرد
TF_PHONENUMBER – فقط شماره تماس در آن قرار گیرد
TF_URL – فقط آدرس وب URL در آن قرار گیرد
مثال:
کد:
var cont : command;
quote : string;
begin
showTextBox('Enter message, '', 200, TF_ANY);
cont := createCommand('Send', CM_SCREEN, 1);
addCommand(cont);
repeat
delay(100);
until getClickedCommand <> emptyCommand;

quote := getTextBoxString;
...
end.

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
(آخرین ویرایش در این ارسال: ۲۸-دى-۱۳۹۱, ۱۱:۵۳:۰۸، توسط lord_viper.)
۲۸-دى-۱۳۹۱, ۱۱:۴۶:۲۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise, godvb, behzady
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #9
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
توابع General

این تابع برای ایجاد تاخیر است که زمان تاخیر برحسب میلی ثانیه بعنوان پارامترورودی تابع محسوب میشود.
در مثال زیر یک پیغام به مدت 2ثانیه برروی صفحه نمایش داده میشود و بعد برنامه بسته خواهد شد.یک نکته قابل ذکر : کسانی که با Turbo c و کلا برنامه های کنسول از خانواده c زا کار کرده باشند می دانند که برنامه به طور خودکار بعد اجرا بسته میشود و برای دیدن خروجی برنامه باید از دستوری به نام getch() استفاده کنند.این قضیه هم در اینجا اتفاق می افتد که می بایست عملی مانند getch() را در اینجا پیاده سازی کنیم.
کد:
کد:
procedure delay(millis: integer);

example:
  begin
    drawText('Hello world', 0, 0);
    repaint;
    delay(2000);
  end.


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

کد:
function getProperty(propertyName: string): string;

برای پایان دادن به کاریک برنامه است.
کد:
procedure halt;

برای انجام دادن بایت کدهای جاوا است.بایت کدهای مورد نظرتان را که می خواهید اجرا شوند باید بعنوان پارامتر به این تابع بفرستید.
کد:
procedure inline(java_bytecode_statements);
مثال :
کد:
inline(nop;);

برای استفاده از بایت کدها میتوانید با استفاده از دستور inline بطور مستقیم بایت کدها را در پروسیجرها بنویسید :
کد:
کد:
procedure DoNothing;
begin
inline(
    nop;
);
end;
می توانید از bytecode/end نیز استفاده نمایید:
کد:
کد:
procedure DoNothing;
begin
  bytecode
    nop;
  end;
end;
مشخص میکند که آیا MIDlet حالت توقف بوجود آمده است یا نه؟
کد:
function isMidletPaused: boolean;
حالت توقف می تواند هنگام داشتن یک تماس ورودی اتفاق بیفتد.که MIDlet به حالت توقف رفته بعد از پاسخ دادن به تماس به حالت resume در خواهد آمد.اگر یک بازی نوشته ایم پس هنگامیکه MIDlet به حالت توقف در آمد بازی مانیز باید متوقف شود.در تکه کد زیر این حالت را پیش بینی کرده و کد آن را نوشته ایم:

کد:
example:
  ...
  repeat
    { process keypad inputs and read the timer }

    { if the MIDlet is paused, wait until it is resumed }
    while isMidletPaused do
    begin
      delay(100);
    end;

  until gameOver;
  ...
تبدیل کد عددی ASCII به مقدار کاراکتر آن
توجه داشته باشید مقدار n نباید از 127 بزرگتر باشد
کد:
function chr(n: integer): char;

تبدیل یک کاراکتر به کد عددی یا مقدار ASCII آن
کد:
function ord(c: char): integer;

توابع کار با string

این تابع متن بین begin و end را برمیگرداند
کد:
function copy(str1: string; begin, end: integer): string;
مثال:
Begin
copy('MIDletPascal', 2, 5);
end;

مقدار Dle را برمیگرداند

کاراکتر مورد نظر در محل pos را برمیگرداند
f
کد:
unction getChar(str: string; pos:integer): char;
مثال:
Begin
getChar ('MIDletPascal', 2);//   I
end;

تبدیل مقدار عددی به رشته
کد:
function integerToString(val: integer): string;
مثال:
Var
S:string;
Begin
S:= integerToString (2);
end;

طول یک رشته را برمیگرداند
کد:
function length(str: string): integer;
مثال:
Begin
length ('MIDletPascal');//   12
end;

تبدیل حروف بزرگ به کوچک
کد:
function locase(str: string): string;

تبدیل حروف کوچک به بزرگ
کد:
function upcase(str: string): string;

جستجوی یک رشته در رشته دیگر مکان اولین جایی که رشته مورد نظر یافت شد را برمیگرداند اگر یافت نشود مقدار 0 برمیگرداند
کد:
function pos(str1, str2: string): integer;
مثال:
Begin
If pos ('MIDletPascal',’Pa’)=0 then
Halt;
end;
اگر مقدار Pa در متن یافت نشود برنامه بسته میشود.توجه داشته باشید که این تابع به حروف کوچک و بزرگ حساس میباشد

کاراکتر ادرس pos را با کاراکتر C در رشته str عوض میکند
کد:
function setChar(str: string; c: char; pos:integer): string;

مقدار یک رشته را به عدد صحیح تبدیل میکند
کد:
function stringToInteger(s:string):integer;
مثال:
Var
i:integer;
Begin
i:= stringToInteger(‘24’);
End;

مقدار یک رشته را به یک عدد اعشاری تبدیل میکند
کد:
function stringToReal(str: string; base: integer): real;


توابع Debug

ورودی این تابع یک شرط است درست بودن و یا نبودن آن را در پنجره debug ببینید.مثال:
کد:
کد:
procedure assert(cond: boolean);

کد:
example:
Assertion failed at: Tetris.mpsrc:162
این تابع متن مورد نظر را در پنجره debug نمایش میدهد
کد:
procedure debug(s: string);

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۳۰-دى-۱۳۹۱, ۱۱:۰۱:۵۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : godvb, behzady
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #10
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
صفحه کلید و کلیدها

کد:
function getKeyClicked: integer;
مقدار کد اخرین کلید فشرده شده را برمیگرداند

کد:
function getKeyPressed: integer;
مقدار کد کلیدی که هم اکنون فشرده شده را برمیگرداند
اگر کاربر کلیدی را فشار دهد مقدار آن را برمیگرداند که KE_NONE یعنی هیچ کلیدی فشرده نشده است.مقدارهای پیش فرض برای صفحه کلید گوشی :
کد:
• KE_KEY0
• KE_KEY1
• KE_KEY2
• KE_KEY3
• KE_KEY4
• KE_KEY5
• KE_KEY6
• KE_KEY7
• KE_KEY8
• KE_KEY9
• KE_STAR
• KE_POUND
درمثال زیر تا کلید * را فشارندهید از برنامه خارج نخواهد شد که همان شبیه GETCH() عمل میکند:
کد:
begin
    while getKeyClicked <> KE_STAR do
    begin
      delay(100);
    end;
  end.
کد:
function keyToAction(keyCode: integer): integer;

گاهی کلیدهایی هستند که برای گوشی های مختلف مقدارهای گوناگون برمیگرداند مثلا کلید fire ممکن است برای یک گوشی مقدار 10 و برای گوشی دیگری مقدار 120 را برگرداند.که برایاین مشکل از تابع ذکرشده استفاده میکنیم :

کد:
• GA_NONE
• GA_UP
• GA_DOWN
• GA_LEFT
• GA_RIGHT
• GA_FIRE
• GA_GAMEA
• GA_GAMEB
• GA_GAMEC
• GA_GAMED


در مثال زیر وقتی کلید fire زده شود برنامه بسته خواهد شد:
کد:
begin
  while keyToAction(getKeyClicked) <> GA_FIRE do
    begin
      delay(100);
    end;
  end.

دستورات کار با زمان و تاریخ

کد:
function getCurrentTime: integer;
این تابع زمان را از نیمه شب 1.1.1970 تا به حال را برمیگرداند که توسط توابع در ادامه توضیح داده خواهد شد می توانید ساعت و دقیقه و ... را ازدرون این مقدار برگشتی بیرون بکشید.

کد:
function getSecond(time: integer): integer;
مقدار ثانیه را از time را برمیگرداند که عددی بین 0 تا 59 میباشد

کد:
function getHour(time: integer): integer;
مقدار ساعت را از یک متغیر time برمیگرداند که عددی بین 0 تا23 است

کد:
function getMinute(time: integer): integer;
عددی را بر میگرداند که دقیقه است و عددی بین 0 تا 59 است.
کد:
var time: integer;
      text: string;
  begin
    time := getCurrentTime;
    text := 'Current time is ' + getHour(time);
    text := text + ':' + getMinute(time);
    text := text + ':' + getSecond(time);
    drawText(text, 0, 0);
    repaint;
    delay(1000); { wait 1 second before MIDlet terminates }
  end.

کد:
function getDay(time: integer): integer;
برای برگرداندن روز در ماه جاری از درون تاریخ بدست آمده از تابع getCurrentTime .

کد:
function getMonth(time: integer): integer;
برگرداندن ماه جاری

کد:
function getWeekDay(time: integer): integer;
برگرداند روز هفته که عدد 1برای Sunday و عدد 2 برای Monday و تا 7 که Saturday میشود.

کد:
function getYear(time: integer): integer;
برگرداند سال
کد:
function getYearDay(time: integer): integer;
مقدار خروجی تابع تعداد روز سال جاری است که عددی بین 1 تا 366 می باشد.

کد:
function getRelativeTimeMs: integer;
زمان جاری را بر اساس میلی ثانیه برمیگرداند.که عددی 32بیتی است و یعنی زمانی 2^32 می تواند برگرداند که میشه 48 روز و هر 48 روز ریست شده و از 0 شروع به شمارش میکند.پس برای تاریخ جاری خوب نیست و میتونید برای پیاده سازی یک تایمر در برنامه استفاده کنید.بعنوان مثال یک بازی ساده مانند tetris را درنظر بگیرید که در ثانیه نیاز دارید بلاک ها را حرکت دهید و می توانید توسط کلیدهای فشرده شده بلاک ها را به سمت چپ یا راست حرکت دهید.که حلقه اصلی می تواند بدین صورت باشد:
...
کد:
lastSavedTime := getRelativeTimeMs; { initialize the timer }
  repeat
    { read and process the keypad input }
    key := getKeyClicked;
    if keyToAction(key) = GA_LEFT then moveLeft;
    if keyToAction(key) = GA_RIGHT then moveRight;

    { check if 1 second has passed }
    if ((getRelativeTimeMs - lastSavedTime) > 1000)
    or (getRelativeTimeMs < lastSavedTime)  { check if the timer is reset after 48 days }
      then
      begin
        lastSavedTime := getRelativeTimeMs;
        moveDown;
      end;
  until gameOver;
  ...

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۴-بهمن-۱۳۹۱, ۱۷:۵۸:۳۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : godvb, behzady
godvb غایب
مدیر بازنشسته بخش نفوذ و امنیت
*****

ارسال‌ها: 430
موضوع‌ها: 77
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 886
( 1338 تشکر در 343 ارسال )
ارسال: #11
RE: آموزش برنامه نویسی موبایل با Midlet Pascal
دستورات ریاضی


کد:
function abs(n: integer): integer;

قدرمطلق یک عدد را برمیگرداند

کد:
function acos(num: real): real;

آرککوسینوس یک عدد را بر میگرداند که بین 0 تا pi بر حسب رادیان است.

کد:
function asin(num: real): real;
function atan(num: real): real;
برگرداندن ارکسینوس و ار کتانژانت در محدوده -pi/2 تا pi/2 برحسب رادیان.

کد:
function atan2(y, x: real): real;
تبدیل مختصات (x، y) مختصات قطبی (r، تتا). این روش محاسبه فاز تتا با محاسبه مماس بر قوس Y / X در محدوده-PI.

کد:
function cos(num: real): real;
برگرداندن کوسینوس یک عدد

کد:
function sin(num: real): real;
سینوس عدد گرفته شده را برمیگرداند.

کد:
function tan(num: real): real;
تانژانت یک عدد رابرمیگرداند.

کد:
function exp(num: real): real;
مقادار تابع نمایی یک عدد را برمیگرداند

کد:
function frac(num: real): real;
عددی اعشاری ورودی گرفته و مقدار اعشاری آن را برمیگرداند.

کد:
function log(num: real): real;
لگاریتم طبیعی عدد داده شده را برمیگرداند.

کد:
function log10(num: real): real;
لگاریتم عدد داده شده در مبنای 10 را برمیگرداند.

کد:
function pow(a, b: real): real;
عدد a را به توان b میرساند.

کد:
function odd(n: integer): boolean;
اگر مقدار a فرد باشد مقدار true برمیگرداند

کد:
function rabs(num: real): real;
قدرمطلق یک عدد حقیقی را برمیگرداند.

کد:
function random(n: integer): integer;
عددی تصادفی بین تا n-1 برمیگرداند.

کد:
procedure randomize;
سازنده اعدا تصادفی را ازنوع مقداردهی میکند

کد:
function sqr(n: integer): integer;
مربع عدد داده شده را برمیگرداند.

کد:
function sqrt(num: real): real;
ریشه دوم عدد را برمیگرداند.

کد:
function toDegrees(num: real): real;
تبدیل زاویه از رادیان به درجه.

کد:
function toRadians(num: real): real;
تبدیل زاویه از درجه به رادیان

کد:
function trunc(num: real):integer;
قسمت صحیح یک عدد حقیقی را برمیگرداند.

توابع ارسال sms
ارسال یک sms اگر sms با موفقیت به سرور ارسال شود مقدار درستی در غیر این صورت مقدار نادرستی را برمیگرداند

کد:
function smsStartSend(destination: string; message:string): boolean;

مثال:

کد:
begin
  if not smsStartSend('sms://+5550000', 'Hello!') then halt;
    while smsIsSending do // wait for the message to be sent
      delay(100);
      if not smsWasSuccessfull then halt; // check if the message was sent successfully
  end.

چک کردن اینکه ایا در حال ارسال sms هستید
کد:
function smsIsSending: boolean;

چک کردن اینکه ایا sms با موفقیت ارسال شده یا نه
کد:
function smsWasSuccessfull: boolean;

ارسال نشدن ممکن است به خاطر پشتیبانی نکردن از ارسال با J2ME MIDlet باشد
• ادرس ارسالی صحیح نمیباشد
• اپراتور در ارسال با مشکل مواجه شود

آنچه توانسته ایم انجام دهیم، لطف پرودگار بوده است.

XMen For Ever
۱۳-بهمن-۱۳۹۱, ۰۰:۴۰:۵۵
ارسال‌ها
پاسخ
تشکر شده توسط : behzady, lord_viper, p_s


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  راهنمایی برای برنامه نویسی student-p 6 5,999 ۲۴-آبان-۱۳۹۵, ۱۳:۳۸:۰۵
آخرین ارسال: leyla_93
  برنامه نویسی اندروید ؟؟ EBKA 8 7,513 ۲۹-خرداد-۱۳۹۴, ۱۴:۴۳:۲۲
آخرین ارسال: bghad1
  [آموزشی] کتاب برنامه نویسی آندروید mitraahmadi 0 2,001 ۰۷-خرداد-۱۳۹۴, ۱۸:۵۴:۲۷
آخرین ارسال: mitraahmadi
  سوالات برنامه‌نویسی اندروید babyy 52 34,415 ۱۸-اسفند-۱۳۹۲, ۱۲:۵۹:۰۷
آخرین ارسال: omid_phoenix
  [آموزشی] شروع برنامه‌نویسی اندروید babyy 8 10,127 ۱۵-آبان-۱۳۹۲, ۲۳:۰۰:۲۷
آخرین ارسال: babyy
  برنامه نویسی اندروید با Google Android Studio babyy 3 13,288 ۰۷-خرداد-۱۳۹۲, ۰۸:۵۵:۵۱
آخرین ارسال: Di Di
  آموزش برنامه نویسی برای موبایل توسط جاوا NabiKAZ 66 95,372 ۰۸-اردیبهشت-۱۳۹۲, ۰۹:۴۴:۲۱
آخرین ارسال: mmghp75
Exclamation برنامه نویسی آندریود moosavi12 12 11,571 ۱۰-اسفند-۱۳۹۱, ۱۵:۳۸:۱۳
آخرین ارسال: طار
  اموزش برنامه نویسی سیمبین با c++builderX lord_viper 5 11,449 ۰۶-تير-۱۳۹۰, ۱۹:۴۴:۵۱
آخرین ارسال: h0x00i
  sign کردن برنامه های موبایل lolohacko 3 7,568 ۲۵-فروردین-۱۳۹۰, ۰۸:۲۷:۰۶
آخرین ارسال: wlc

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS