• 122 Vote(s) - 2.57 Average
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه نویسی J2me برای موبایل با دلفی
#1
درود به همه دوستان.
اگر عمری باقی مانده باشه قراره هستش در این تاپیک به آموزش برنامه نویسی برای پلتفرم جاوا (موبایل) در محیط MIDLETPASCAL بپردازیم که Syntax اون مانند دلفی و یا همان پاسکال خودمان است.

MIDletPascal یک IDE جالب برای طراحی برنامه های J2ME برای موبایل می
باشد که کامپایلر آن کدهای نوشته شده به زبان پاسکال را به جاوا تبدیل میکند.پس اگر با یکی ازنسخه های زبان برنامه نویسی پاسکال آشنایی داشته باشید براحتی می توانید برای گوشی های همراه خود برنامه بنویسید.این IDE در ویندوز استفاده می گردد هرچند که می توانید در سیستم عاملهای Linux and MacOS در Wine اجرا نمایید.برنامه های نوشته شده تحت این IDE در تمامی موبایل ها اجرا می شوند و از پلتفرم های MIDP 1.0 and CLDC 1.0 نیز پشتیبانی میکند.
دوست عزیز Niksa Orlic (norlic) سورس برنامه MIDletPascal 2.02 را در سپتامبر 2009 تحت لیسانس GNU پابلیک کرد و در اختیار عموم قرار داد.که در اکتبر 2009 ورژن3 این IDE استارت خورد و روز به روز به امکانات وقابلیت های آن افزوده شد.مانند افزودن حلقه ، پشتیبانی از کامنت چند خطی و ....
آخرین ورژن این محیط برنامه نویسی را می توانید از آدرس زیر دریافت کنید:
Code:
http://sourceforge.net/projects/midletpascal/

در ورژن 3 این IDE امکاناتی افزوده شده که در زیر ذکر شده است :

حداکثر اندازه تعریف برای آرایه ها 32767 است.که بسیار افزایش یافته است. مثال:
Code:
var
  AZeroBased : array[0..32766] of char;
  AOneBased : array[1..32767] of integer;

الحاق رشته ها بهمدیگر بصورت هوشمند.یعنی دیگراحتیاجی به استفاده از عملگر "+" نیست مانند زیر:
Code:
s := 'this is'#10'a test';

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

از علامت های <> نیز می توانید استفاده نمایید:
Code:
a := $714A;
  b := a << 3;
  c := b >> 2;

برای استفاده از بایت کدها میتوانید با استفاده از دستور inline بطور مستقیم بایت کدها را در پروسیجرها بنویسید :
Code:
procedure DoNothing;
begin
inline(
    nop;
);
end;

می توانید از bytecode/end نیز استفاده نمایید:
Code:
procedure DoNothing;
begin
  bytecode
    nop;
  end;
end;

می توانید برای ایجاد حلقه ها از دستورات REPEAT/FOREVER نیز استفاده نمایید.مثال:
Code:
repeat
  ...
  if condition then
    break;
  ...
forever;

می توانید از کلمه کلیدی result برای برگرداندن مقدار در توابع استفاده نمایید.در مثال زیر طرز استفاده را خواهید دید:
Code:
function Return4: integer;
begin
  result := 4;
end;

برای انجام عملیات شیفت به راست بدون علامت می توانید بصورت زیر عمل نمایید:
Code:
a := $2704;
  b := a ushr 1;
  c := b >>> 2;
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#2
این محیط برنامه نویسی case-insensitive است یعنی بر حروف کوچک و بزرگ حساس است.
برای کامنت های چند خطی می توانید متن خود را درون '{' 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 */


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

type definitions: می بایست Type ها و یا همان ساختاری که مورد نیازتان هست را تعریف نمایید که حتما باید از کلمه کلیدی type نیز استفاده نمایید مانند زیر:
Code:
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 : در این بخش شما می بایست ثابت ها را همراه با نام آنها ومقادیرشان را بنویسید.در مثال زیر می توانید مشاهد کنید:
Code:
program constantDeclarations;
const minutesInHour = 60;
  hoursInDay = 24;
  famousQuote = 'To be or not to be';
begin

end.

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

function and procedure declarations
Procedures ها زیر برنامه هایی هستند که مقدار خروجی ندارند وبطورکلی چیزی را برنمی گردانند.درمثال زیر دو پروسیجر نوشته شده است است که یکی از آنها بدون پارامتر ورودی و دیگری دارای دوپارامتر ورودی است:
Code:
program procedureSample;
  var n: integer; { this variable is visible in main
                    program block and in all functions
                    and procedures }

  procedure noArgs;
  begin
    n := 5;
  end;

  procedure twoArgs(a: integer; b: string);
  var len: integer; { this variable can be accessed only
                      from within the procedure and is
                      reinitialized every time that the
                      procedure is called }
  begin
    len := length(b);
    n := a + len;
  end;

  begin
    noArgs; { call the first procedure }
    twoArgs(n, 'Some string'); { call the second procedure }
  end.


و Functions ها زیر برنامه هایی هستند که مقداری را بعنوان خروجی باید برگردانند. Functions همانند پروسیجرها هستند ولی با این تفاوت که مقداری را باید بعنوان خروجی برگردانند.
Code:
program functionSample;
  var result: integer;

  { this simple function always returns 5 }
  function returnFive: integer;
  begin
    returnFive := 5;
  end;

  function multiply(a, b: integer): integer;
  begin
    multiply := a * b;
  end;

  begin
    result := multiply(2, returnFive); { call the multiply function
                                         where on argument is value
                                         returned by calling the
                                         other function }
  end.


همچنین می توان func هایی بصورت بازگشتی نوشت.همانند زیر که حالت فاکتوریل را پیاده سازی کرده ایم:
Code:
program recursionSample;
  var factorielOfFive: integer;
  function factoriel(n: integer): integer;
  begin
    if n = 1 then
      factoriel := 1;
    else
      factoriel := n * factoriel(n-1);
  end;

  begin
    factorielOfFive := factoriel(5);
  end.

حالت زیر را درنظر بگیرید:
Code:
procedure a (x: integer);
  begin
    ...
    b(x);
    ...
  end;

  procedure b(y: integer);
  begin
  ...
    a(y);
  ...
  end;

  begin
    a(5);
  end.

خوب همانطورکه میبینید پروسیجر a پروسیجر b را فراخوانی میکند و باز از درون پروسیجر b نیز پروسیجر a نیز فراخوانی میشود.که کامپایلر پیغام خطا میدهد که برای رفع این مشکل بصورت زیر عمل می کنیم:
Code:
procedure b(y:integer); forward;{ the forward reference tells
                                     compiler that procedure 'b' will
                                     be defined somewhere in the program code }

  procedure a (x: integer);
  begin
    ...
    b(x);
    ...
  end;

  procedure b(y: integer);
  begin
    ...
    a(y);
    ...
  end;

  begin
    a(5);
  end.

که این تکنیک و حالت را forward references گویند.
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#3
دستور for :
Syntax این دستور بصورت زیر است:
Code:
for loopIndex := initialValueExpression to finalValueExpression do
begin
  statements
end;

بجای to می توانید از downto استفاده که مقدار شمارشگر حلقه را کاهش میدهد.تکه کد زیر جمع اعداد از 1 تا 10 را محاسبه می کند :
Code:
for i:= 1 to 10 do
  begin
    sum := sum + i;
  end;

دستور while نیز یک نوع دیگر ازحلقه ها محسوب میشود و syntax آن نیز بصورت زیر است:
Code:
while condition do
begin
  statements
end;

برای منتظرماندن ورودی کاربر می توان این چنین بنویسیم:
Code:
while (getKeyClicked = KE_NONE) do
  begin
    delay(100);
  end;

دستور repeat/until نیزبدین صورت است:
Code:
repeat
  statements;
until endingCondition;

مثال قبلی را با این دستور میتوان بدین صورت پیاده سازی کرد:
Code:
repeat
    delay(100);
    until (getKeyClicked <> KE_NONE)

دستور Break برای خروج از حلقه استفاده می شود که در تمامی انواع حلقه های ذکرشده بالا می توان استفاده نمود.به این مثال توجه کنید:
Code:
repeat
    for i := 1 to 10 do
    begin
      if doSomething(i) = -1 then break; // break from for-loop
    end;

  until getClickedCommand <> emptyCommand;

دستورات If-then-else نیز براحتی می توان استفاده نمود.شکل کلی دستور بصورت زیر است:
Code:
if condition then
begin
  statements; { condition true branch }

end
[
else
begin
  statements; { condition false branch }

end;
]

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

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

فراخوانی یک روتین تنها نام آن را ذکرکرد:
Code:
routine;
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#4
Data type ها را بطور کلی به دو دسته ساده و مرکب تقسیم میکنیم.

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

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

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


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

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


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


نوع String برای متون استفاده میشود.در دلفی String را میتوان بعنوان آرایه ای از کاراکترها در نظر گرفت و با آن بصورت آرایه رفتار کرد ولی در MIDletPascal اینطور نیست.
عملگرهای مقایسه ای =, <> (به کارکترهای بزرگ و کوچک حساس است)
عملگرهای الحاقی +
به مثال زیر توجه کنید:
Code:
var text: string;
  begin
    text := 'It is now ' + getHour(getCurrentTime) + ' o''clock ';
    drawText(text, 0, 0);
    repaint;
    delay(2000);
  end.

در این مثال ما زمان را نمایش میدهیم.میبینید که رشته در ' (single-quote) و برای نمایش خود کاراکتر single-quote آن را دوبار تکرار کرده است.

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


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


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


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

نوع داده ای Http : باMIDletPascal می توان یک ارتباط ساده HTTP را داشت.در یک ارتباط Http می بایست پارامترهایی را مقداردهی کنید.که ترتیب عملیات یک ارتباط به شرح زیر است(life cycle):
  1. ایجاد ارتباط با وب سرور
  2. تنظیم متد ارسال درخواست
  3. افزودن فیلد هدر درخواست (اختیاری)
  4. افزودن بدنه درخواست که فقط در متد POST مورد نیاز است
  5. ارسال درخواست و منتظر جواب بودن از وب سرور
  6. خواند فیلد هدر پاسخ
  7. خواندن محتوای پاسخ
  8. بستن ارتباط


یک نمونه سورس که می توانید برای درک بهتر مسئله در زیر ببنید:
Code:
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 که می توانید فایل هایی را بعنوان ریسورس در برنامه داشته باشید و درهنگام اجرا از آنها استفاده نمایید.

فکر کنم امروز فقط نشستم واس نوشتن آموزش Big Grin
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#5
نوع های مرکب :

نوع Record :در این نوع شما می توانید مجموع از اوناع متغیرها را داشته باشید.بعنوان مثال شما یک بازی نوشته اید که قهرمان این بازی را کاربر کنترل می کند پس شما باید یک record تعریف نمایید که مختصات آن را درصفحه و مقدار جان باقی مانده را در خود نگه دارد.مانند :
Code:
type heroType = record
     positionX, positionY: integer;
     health: integer;
  end;
-

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

و همچنین می توانید پارامترهای ورودی یک روتین را از این نوع تعریف نمایید :
Code:
function isHeroDead(hero: heroType): boolean;
  begin
  if (hero.health <= 0) then
      isHeroDead := true;
    else
      isHeroDead := false;
  end;

record نیز می تواند بجای کلمه کلیدی type از var نیز استفاده نمایید :
Code:
var hero: record
              positionX, positionY: integer;
              health: integer;
            end;

با قرار دادن dot می توانید به داده های record تعریف شده دسترسی پیدا کنید:
Code:
...
  { move the hero to the right }
  hero.positionX := hero.positionX + 1;
  ...

و نکته دیگر در مورد این نوع داده ای که شما نمی توانید مستقیما دونوع متفاوت تعریف شده از record درون هم کپی کنید و یا انتساب دهید.بلکه می بایست مقدارهای داخلی آنها را کپی نمایید.
Code:
var a, b: record
              x: integer;
          end;
  begin
    ...
    a := b; { this is not valid }
    ...
    a.x := b.x; { copy element by element instead }
  end.

نوع Array :
آرایه ها بدین صورت تعریف میشوند :
Code:
type chessFieldType = array[1..8, 1..8] of integer;

برای تعریف یک آرایه 8*8 که یک آرایه دوبعدی میشود بدین صورت انجام میشود :
Code:
type chessFieldType = array[1..8, 1..8] of integer;
  var chessField: chessFieldType;

که برای ساده ترشدن دوخط کد بالا معادل تکه کد زیر است:
Code:
var chessField: array[1..8, 1..8] of integer;

در مثال زیر خانه های خالی از جدول شطرنج مان را میشماریم :
Code:
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.

می توان آرایه های چند بعدی داشته باشید ولی به این نکته توجه کنید که آرایه های بعد زیاد حافظه زیادی را اشغال می کنند.
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#6
توابع General

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

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


این تابع نیز برای گرفتن مشخصاتی از سیستم جاوا گوشی می باشد.که برای اطلاعات بیشتر می توانید از داکیومنت های موجود جاوا استفاده نمایید.
Code:
function getProperty(propertyName: string): string;


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


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

example:
inline(nop;);


مشخص میکند که آیا MIDlet حالت توقف بوجود آمده است یا نه؟
حالت توقف می تواند هنگام داشتن یک تماس ورودی اتفاق بیفتد.که MIDlet به حالت توقف رفته بعد از پاسخ دادن به تماس به حالت resume در خواهد آمد.اگر یک بازی نوشته ایم پس هنگامیکه MIDlet به حالت توقف در آمد بازی مانیز باید متوقف شود.در تکه کد زیر این حالت را پیش بینی کرده و کد آن را نوشته ایم:
Code:
function isMidletPaused: boolean;

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;
  ...

کدهای Debug

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

example:
Assertion failed at: Tetris.mpsrc:162
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#7
کدهای Drawing


طول صفحه نمایش را به پیکسل برمیگرداند.
Code:
function getHeight: integer;


عرض صفحه نمایش را به پیکسل برمیگرداند.
Code:
function getWidth: integer;



برای تنظیم رنگ است که قل از اعمال ترسیم می بایست توسط این دستور رنگ موردنظرمان را تنظیم نماییم:
هرکدام از ورودی ها عددی بین 0-255 می گیرد ورودی (255,255,255) رنگ سفید را مشخص مینماید.
Code:
procedure setColor(red, green, blue:integer);



این تابع برای رسم یک قوس و کمان است. 'startAngle شروع و arcAngle درجه را مشخص می کند 0درجه در مکان عدد سه ساعت است و 90درجه در مکان عدد 12 ساعت است .مثال :
Code:
procedure drawArc(x, y, width, height, startAngle, arcAngle: integer);

example:
  begin
    drawArc(0, 0, getWidth, getHeight, 0, 90);
    repaint;
    delay(1000);
  end.


برای ترسیم یک بیضی درون صفحه نمایش.مثال :
Code:
procedure drawEllipse(x, y, width, height: integer);

example:
  begin
    drawEllipse(0, 0, getWidth, getHeight);
    repaint;
    delay(1000);
  end.



برای ترسیم یک عکس که از مختصات x,y ترسیم شروع میشود:
Code:
procedure drawImage(img: image; x, y: integer);

example:
  begin
    drawImage(loadImage('/logo.png'), 0, 0);
    repaint;
    delay(1000);
  end.



برای کشیدن یک خط بین دو نقطه ('x1', 'y1')و ('x2', 'y2').
Code:
procedure drawLine(x1, y1, x2, y2: integer);

example:
  begin
    drawLine(10, 15, 25, 35);
    repaint;
    delay(1000);
  end.


برای ترسیم خط بیرونی یک مستطیل .مانند:
Code:
procedure drawRect(x, y, width, height: integer);

example:
  begin
    drawRect(5, 5, 20, 20);
    repaint;
    delay(1000);
  end.



ترسیم مستطیل با گوشه های گرد.
Code:
procedure drawRoundRect(x, y, width, height, arcWidth, arcHeight: integer);

example
  begin
    drawRoundRect(5, 5, 20, 20, 2, 2);
    repaint;
    delay(1000);
  end.


متن درون بافر text را برروی صفحه نمایش نشان میدهد
Code:
procedure drawText(text: string, xPos, yPos: integer);

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



ترسیم بیضی توپر.
Code:
procedure fillEllipse(x, y, width, height: integer);

  begin
    fillEllipse(0, 0, getWidth, getHeight);
    repaint;
    delay(1000);
  end.


ترسیم یک مستطیل توپر.
Code:
procedure fillRect(x, y, width, height: integer);

example:
  begin
    fillRect(5, 5, 20, 20);
    repaint;
    delay(1000);
  end.


ترسیم مستطیل توپر با گوشه های گرد.
Code:
procedure fillRoundRect(x, y, width, height, arcWidth, arcHeight: integer);

example:
  begin
    fillRoundRect(5, 5, 20, 20, 2, 2);
    repaint;
    delay(1000);
  end.
;
گرفتن هرکدام از رنگهای قرمز و آبی و سبز از رنگ RGB که برای آخرین بار ست شده است.توسط تابع Setcolor رنگ های ست میشوند برای رنگ متن ها،پرکردن اشکال هندسی و...
Code:
function getColorRed: integer;

function getColorBlue: integer;

function getColorGreen: integer


example:
  begin
    setColor(127, 0, 0);
    if getColorRed <> 127 then
    begin
      drawText('This should never happen', 0, 0);
      repaint;
    end;
    delay(1000);
  end.


طول یک عکس به پیکسل برمیگرداند.
Code:
function getImageHeight(img: image): integer;



عرض یک عکس را به پیکسل برمیگرداند.
Code:
function getImageWidth(img: image): integer;


طول و عرض متن نمایش داده شده به فونت جاری را به پیکسل بر میگرداند.
Code:
function getStringHeight(text: string): integer;
function getStringWidth(text: string): integer;

example:
  var text: string;
    height: integer;
  begin
    text   := 'Text to display';
    height := getStringHeight(text);
    drawText(text, 0, (getHeight - height)/2);
    repaint;
    delay(1000);
  end.



ایجاد یک عکس با مختصات تعیین شده از بوم رنگ شده تان.
Code:
function ImageFromCanvas(x: integer; y: integer; width: integer; height: integer ): image;


ایجاد یک عکس با مختصات تعیین شده از عکسی دیگر که برای برش عکس ها جالب است.
Code:
function ImageFromImage(sourceImg: image; x: integer; y: integer; width: integer; height: integer ): image;


اگر دستگاه قادر به نمایش رنگ موردنظرمان باشد مقدار true بر میگرداند.
Code:
function isColorDisplay:boolean;




برای نمایش عکس از ریسورس.مثال :
Code:
function loadImage(resource: string): image

example:
  begin
    drawImage(loadImage('/icon.png'), 0, 0);
    repaint;
    delay(1000); { wait 1 second before the MIDlet terminates }
  end.


تغییر رنگ یک پیکسل از صفحه نمایش:
Code:
procedure plot(x, y:integer);

example:
  begin
    setColor(255, 0, 0);
    plot(5, 10);
    repaint;
    delay(1000);
  end.


تمام دستورات ترسیم مانند drawLine, drawText, fillRect و ... بطور مستقیم برروی صفحه نمایش اعمال نمیشوند که off-screen buffer برروی صفحه نمایش نشان داده میشوند.این دستور بطوری صفحه نمایش را بروز کرده تا تغییرات اعمال شده را نمایش دهد.
Code:
procedure repaint;


اعمال فونت پیش فرض که اگر کاربر فونتی را تعیین کرده باشد به حالت پیش فرض برخواهد گشت.
Code:
procedure setDefaultFont;



برای تعیین فونت صفحه بکاربرده میشود.
Code:
procedure setFont(fontFace, fontStyle, fontSize);
پارامتر fontFace میتواند مقادیر زیر را بگیرد :

• FONT_FACE_SYSTEM
• FONT_FACE_MONOSPACE
• FONT_FACE_PROPORTIONAL


پارامتر fontStyle هم مقادیرزیر را میتواند بگیر:
• FONT_STYLE_PLAIN
• FONT_STYLE_BOLD
• FONT_STYLE_ITALIC
• FONT_STYLE_UNDERLINED
برای استفاده چندتای این گزینه بدین صورت عمل میکنیم.مثلا میخواهیم فونت مان ضخیم و زیر خط دار باشد: (FONT_STYLE_BOLD or FONT_STYLE_UNDERLINE)


و پارامتر fontSize نیز دارای مقدارهای زیر می باشد:
• FONT_SIZE_SMALL
• FONT_SIZE_MEDIUM
• FONT_SIZE_LARGE

مثال :
Code:
begin
    setFont(FONT_FACE_SYSTEM, FONT_STYLE_BOLD or FONT_STYLE_UNDERLINED, FONT_SIZE_LARGE);
    drawText('Hello world', 0, 0);
    repaint;
    delay(1000);
  end.
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#8
Code:
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() عمل میکند:
Code:
begin
    while getKeyClicked <> KE_STAR do
    begin
      delay(100);
    end;
  end.


Code:
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 زده شود برنامه بسته خواهد شد:
Code:
begin
  while keyToAction(getKeyClicked) <> GA_FIRE do
    begin
      delay(100);
    end;
  end.
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#9
دستورات کار با time:

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


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

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


Code:
function getMinute(time: integer): integer;
عددی را بر میگرداند که دقیقه است و عددی بین 0 تا 59 است.
Code:
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.




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


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


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


Code:
function getYear(time: integer): integer;
برگرداند سال

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


Code:
function getRelativeTimeMs: integer;
زمان جاری را بر اساس میلی ثانیه برمیگرداند.که عددی 32بیتی است و یعنی زمانی 2^32 می تواند برگرداند که میشه 48 روز و هر 48 روز ریست شده و از 0 شروع به شمارش میکند.پس برای تاریخ جاری خوب نیست و میتونید برای پیاده سازی یک تایمر در برنامه استفاده کنید.بعنوان مثال یک بازی ساده مانند tetris را درنظر بگیرید که در ثانیه نیاز دارید بلاک ها را حرکت دهید و می توانید توسط کلیدهای فشرده شده بلاک ها را به سمت چپ یا راست حرکت دهید.که حلقه اصلی می تواند بدین صورت باشد:

Code:
...
  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;
  ...
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply
#10
دستورات ریاضی :


Code:
function abs(n: integer): integer;
قدرمطلق یک عدد را برمیگرداند

Code:
function acos(num: real): real;
آرککوسینوس یک عدد را بر میگرداند که بین 0 تا pi بر حسب رادیان است.

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



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


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


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


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


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


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


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


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


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


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


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


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


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


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


Code:
function trunc(num: real):integer;
قسمت صحیح یک عدد حقیقی را برمیگرداند.
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...
  Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  درخواست راهنمایی : ساختن کتاب برای اندروید با basic4android saiedfsd 4 10,861 02-02-2018، 11:49 PM
Last Post: behinesaz
Exclamation مشکل در run کردن برنامه در basic4android barid 7 16,198 08-13-2017، 07:53 AM
Last Post: amir6776
  درخواست کتابخانه wifi direct برای basic4android masoud.pezeshkzade 1 7,780 12-20-2014، 01:03 AM
Last Post: Marc33
  دانلود نرم افزار پارسی سازنده برنامه های پارسی اندروید meisam1376 4 9,215 12-05-2014، 05:50 PM
Last Post: bah69man
  دانلود Basic4android v1.20 - نرم افزار توسعه و ساخت برنامه های کاربردی تحت آندروید Amin_Mansouri 11 20,880 10-10-2014، 09:24 PM
Last Post: Amin_Mansouri
Wink برنامه نویسی «در» آندروید Kei armin 5 9,325 08-14-2014، 08:23 PM
Last Post: sahandmax
  مشكل حرف "ي" در برنامه hamid1148 3 9,119 12-03-2013، 07:35 PM
Last Post: omid_student
  آموزش باز کردن Lock code موبایل نوکیا امیر 2 7,950 08-15-2012، 03:33 PM
Last Post: امیر
  آشنایی با برنامه نویسی ++c برای ویندوز موبایل erfanweb 1 7,210 01-03-2012، 10:30 AM
Last Post: erfanweb
  برنامه نویسی برای اندروید Amin_Mansouri 2 8,267 12-26-2011، 04:31 PM
Last Post: Amin_Mansouri

Forum Jump:


Users browsing this thread: 1 Guest(s)