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

Free Man

کاربر متخصص مولتی مدیا بیلدر
با سلام به تمامی دوستان گرامی ،

در این مبحث می توانید سوالاتی در مورد ، مشکلات و مسائلی که در ساخت پلاگین ها
روبرو می شوید ، بپرسید تا بنده و دیگر دوستان که تجربه هایی در این زمینه داریم پاسخ
سوال هایتان را در حد توان بیان نماییم.

همچنین هر چند وقت یک بار ، سورس کدهای آموزشی و کاربردی ای قرار خواهم داد.

موضوع های مجاز برای درج در این مبحث:
سوال در مورد کد نویسی به زبان های دلفی ، سی و سی ++ ، وی بی و اسمبلی
طرح مشکلات و مسائل کدنویسی ، که در ایجاد پلاگین با آنها روبرو شده اید
سورس کدهای نمونه و مرتبط با این مبحث

لطفا در این مبحث برای تشکر از درج مطلب جدید خودداری فرمایید
گزینه ی تشکر در زیر هر بحث برای همین منظور می باشد.


(پلاگین=پلاگن های ام ام بی)

موفق باشید.
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
فکر کنم براي آغاز کار و يادگيري اصول اوليه مناسب باشد :

MMBPlugin Delphi SourceCode
يک نمونه سورس کد کامل ، کافي است در نرم افزار دلفي گزينه ي بيلد را انتخاب کنيد
تا پلاگين را براي شما ايجاد کند.

در این نمونه کد کار با :
Registry
String
Integer
Array
ShellExecute
ورودی
خروجی
در دلفی را آشنا خواهیم شد.


لینک دانلود: اینجا



attachment.php


attachment.php

 

پیوست ها

  • Plugin Demo.png
    Plugin Demo.png
    6.8 کیلوبایت · بازدیدها: 379
  • Plugin Source Code.png
    Plugin Source Code.png
    23.7 کیلوبایت · بازدیدها: 380
  • MMBPlugin, Delphi SourceCode With Demo.zip
    114.5 کیلوبایت · بازدیدها: 333
آخرین ویرایش:

BEHESHT

Well-Known Member
فوق العادست یه انقلاب بزرگ

من همیشه می خواستم منتطق های دیجیتال رو که MMB نمی تونه پشتیابنی کنه مثل XOR یا XNOR و اشمی تیری گر رو اجرا کنم اما MMB این قدرت رو نداره

با وی بی می نویسم کد ها رو ولی نمی دونم چی جوری ارتباط بدم یه زمان شما فرمودید این با وی بی این امکان وجود نداره

الان که دیدم نوشتید وی بی خوشحال شدم ممکنه راهنمایی بفرمایید تشکر

:):rose:
 

splinter cell

Well-Known Member
سلام! کار بسیار پسندیده ای انجام دادید.
چند تا سئوال برام پیش اومد که مطرح میکنم.(ضمناً من دلفی2009 رو استفاده میکنم)
1-چرا از دو تا یونیت استفاده کرده ایم ؟فقط به خاطر اینکه فانکشن ها از پروسیجر ها تفکیک شده باشند ؟ و آیا همیشه بایستی اینکاررو کرد؟

2-این کلمه cdecl که در جلوی تعریف هر پروسیجر اومده چیه و کاربردش چیه؟

3- موقع بیلد کردن کامپایلر اعلام خطا کرددر پروسیجر GetLocalIPخط 65

کد:
GetHostName(Buffer, SizeOf(Buffer));


ظاهرا باید در تعریف آرایه Buffer از AnsiChar استفاده میشد تا ارور برطرف شود. ولی با اینکار موقع اجرای پلاگین توی بیلدر خوب جواب نمیداد و مثلاً بجای نمایش کلمه True فقط حرف اول اون رو نمایش میداد.

4- حجم پلاگین من 140 کیلو شد در صورتیکه اونی که شما گذاشتین 90 کیلو بیشتر نبود در صورتیکی من هیچ Uses جدیدی اضافه نکردم.
فعلاً بیشتر از این مزاحم نمیشوم.
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
behesht##

سلام دوست عزیز ،

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

قرار خواهم داد.

اما هنوز نتوانستم پلاگین های وی بی را با ام ام بی ربط دهم.

ولی ایده ای دارم که 70% آن عملی شده است ، و آن این است که

دو سورس کد مرتبط با هم را ارئه خواهم کرد ، یکی به زبان وی بی و دیگری

به زبان دلفی یا سی++ ، و با سورس وی بی یک پلاگین ایجاد می کنید

و در سورس دلفی یا سی++ کدهایی قرار می دهم که آن پلاگین را در خود لود کند

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

به طوری که پلاگین ساخته شده با دلفی یا سی++ یک پوسته است و در هسته ی آن

کدهای وی بی شما قرار دارد.

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

ام ام بی منطبق خواهد بود.

و در مورد منطق های دیجیتال ، این کار در دلفی و سی++ آسان تر و سریع تر می باشد.

در این مبحث هم که کدهای نمونه به زبان سی++ و مخصوصا دلفی زیاد قرار خواهم داد

به نظر بنده بهتر است که یکی از این دو زبان نام برده را دنبال کنید و یاد بگیرید که بسیار

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

Free Man

کاربر متخصص مولتی مدیا بیلدر
splinter cell##

سلام دوست گرامی،

از آخر به اول پاسخ می دم :shock: :

4- بهترین کامپایلر در زبان دلفی برای پلاگین های کوچک و بدون فرم ، کامپایلر دلفی7 می باشد.

و این تفاوت حجم به علت این است که کامپایلر 2009 این کدها را می تواند با این سایز ارائه نماید

(140kb) ،در دلفی7 و با همین کدها به علت دارا بودن کامپایلری بهینه و ساده ، پلاگین شما حجم کمتری

پیدا می کند (70kb)

3- اگر اعلام خطا کرد چطور پلاگین را بیلد کرد؟!

شاید در طول زمان کلمه ی Buffer یک کلمه ی کلیدی شده باشد.

بافر را به BFR تغییر دهید.

کد:
BFR: Array[0..63] of Char;
GetHostName(BFR, SizeOf(Buffer));

نه اصلا نیازی به تغییر نوع آرایه نمی باشد ، ایراد از دلفی2009 است.

2- cdecl بیان گر این است که پروسیجر ما یک عبارت است و می توانیم آن را

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

مورد نظر خود را export کرده و برای ام ام بی بفرستید.


1- یه بحثی در علم برنامه نویسی است به نام ماژولار نویسی ، که یکی

از موارد این سبک برنامه نویسی ، تقسیم کردن کدهای برنامه در قالب

چند فایل است ، البته نه اینکه بدون حساب و کتاب تقسیم شوند ، بلکه

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

را استفاده کردم و حسنش چیست ، در این مبحث نمی گنجد.


نکته ی آخر اینکه بهتر است نسخه ی 7 دلفی را نیز نصب کنید ،

با دلفی7 بدون هیچگونه اروری پلاگین برای شما ایجاد خواهد شد.

بنده هم همین کار را کرده ام ، برای ایجاد برنامه هایی با اشیای گرافیکی زیبا

و جدید از نسخه های جدید دلفی استفاده و برای ایجاد پروژه های بدون

فرم از دلفی7 استفاده می کنم.

موفق باشید.
 

splinter cell

Well-Known Member
ممنون از توضیحاتتون.
برای برطرف شدن خطا من نوع آرایه رو از char به ansichar تبدیل کردم و بیلد شد.البته بعداً توی بیلدر خوب کار نمیکرد.
این متن خطا بود
[DCC Error] PluginFunctions.pas(65): E2010 Incompatible types: 'Array' and 'PAnsiChar'
[DCC Warning] PluginFunctions.pas(72): W1057 Implicit string cast from 'AnsiChar' to 'string'
با عوض کردن کلمه بافر باز هم مشکل حل نشد.فکر میکنم مربوط به ساختار خود دلفی2009 هست که یونیکد رو پشتیبانی میکنه! اینطور نیست؟

سعی میکنم نسخه 7 رو گیر بیارم.البته 2006 رو هم دارم فکر میکنید بدرد بخوره؟

چند تا سئوال دیگه

1- در مورد TextInput: array [1..5] of string میشه توضیح بدین که چرا 1 تا 5 گرفتین؟ و این استرینگها همون رشته هایی هستند که بکمک دستورpluginSet بیلدر به پلاگین میفرسته؟
2- اینکه در پروسیجر SetFile چه عملی داره انجام میشه که inputBox ها رو مساوی هم قرار میدیم؟
3-آخر سر اینکه محبت کنید یه توضیح ساده راجع به ورودیها و خروجیها بدین.یعنی از موقعی که از بیلدر فرمانی میدیم تا موقعی که مقدار برگشتی دوباره به اون اکسپورت میشه چه روندی طی میشه!
ممنون از شما دوست عزیز
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
بله خود دلفی 2009 مشکل دارد.

ممکن است در 2006 جواب دهد.

1- بهتر بود 1 تا 3 می گرفتم ، نیازی به بیشتر از این در این سورس کد نبود.

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

2- باید دقیقا این دستور در پلاگن موجود باشد تا بتوانیم ورودی دریافت کنیم.

یک کد ثابت می باشد .

3-
کد:
TextInput: array [1..3] of string;

procedure SetFile(s: pChar); cdecl;
begin
  TextInput[3] := TextInput[2];
  TextInput[2] := TextInput[1];
  TextInput[1] := s;
end;

فرض کنید که یک پلاگین طراحی کرده اید که حداکثر برای یک عملیات

سه ورودی رشته ای می گیرد ، پس باید در درون پلاگین برای مدیریت

این ورودی ها آرایه ای طراحی نماییم با دارا بودن سه عضو:

TextInput: array [1..3] of string

و برای دریافت آنها از ام ام بی این تابع را درون کدهایمان قرار دهیم :
کد:
procedure SetFile(s: pChar); cdecl;
begin
  TextInput[3] := TextInput[2];
  TextInput[2] := TextInput[1];
  TextInput[1] := s;
end;

و به همین صورت اگر تعداد ورودی ها 5 بود باید کدهای بالا را تا 5 ادامه دهید و

آرایه را 5 عضوی تعریف کنید.

به طور نمونه اگر در ام ام بی چنین کدی بنویسید :

کد:
a$='How'
PluginSet("Plugin","a$")
b$='are'
PluginSet("Plugin","b$")
c$='you'
PluginSet("Plugin","c$")

در پلاگین به این ترتیت در آرایه ی شما قرار خواهند گرفت:

کد:
TextInput[1] = 'you'
TextInput[2] = 'are'
TextInput[3] = 'How'
 

Silver Soft

کاربر متخصص مولتی مدیا بیلدر
بله خود دلفی 2009 مشکل دارد.
خیلی جالبه ، دلفی 2009 بعد از چندین نسخه از دلفی که چنیدین میلیون بار کامپایل شدن که یکی از زبانهایی هست که خیلی خیلی به ندرت میشه ازش ایراد گرفت دارای مشکل شده اون هم در تعریف یک آرایه ی یک بعدی ساده ...

دوست عزیز دلفی 2009 به هیچ وجه مشکل نداره اون هم در این مورد ، کافی هست نوع آرایه رو از Char به AnsiChar تغییر بدید چون خود تابه موقع فراخوانی ورودی رو از نوع AnsiChar میخواد .
 

splinter cell

Well-Known Member
ممنونfree man عزیز! با توضیحات شما خیلی چیزا برام داره روشن میشه.
با توضیحاتی که دادین میشه گفت یونیت Plugin Interface رو برای هر پلاگینی باید داشته باشیم چون یک سری توابع ضروری برای ارتباط با بیلدر هستند منظورم
Copyright,
GetInfo,
SetFile,
GetFile,
SetData,
GetData; هستند.و فقط توی یونیت PluginFunctions توابع و بروسجر های مورد نیاز خودمون رو مینویسیم.

امیدوارم درست گفته باشم.من چند تا پروسیجر برای تمرین به نمونه شما اضافه کردم که اینجا میذارم بببینید درسته؟(من هنوز نتونستم دلفی 7 رو گیر بیارم و اینها رو تست کنم البته با 2009 تابع Squart اش خوب جواب میده اما بقیه ظاهرا خیر).
کد:
procedure Squart; cdecl;
var
 Num :integer;
begin
   Num:=NumInput[1] ;
   Num:=Sqr(Num);
   NumOutput:=Num;
end;
    ///////////////////////////////////////////////////////////////
     procedure LowerCaseText; cdecl;
var
 str :string;
begin
  str:=LowerCase(TextInput[1]);
  TextOutput:=str;
end;
  ///////////////////////////////////////////////////////////////
     procedure UppeCaseText; cdecl;
var
 str :string;
begin
  str:=upperCase(TextInput[1]);
  TextOutput:=str;
end;
 ///////////////////////////////////////////////////////////////
     procedure ReverseText; cdecl;
var
 str :string;
begin
  str:=ReverseString(TextInput[1]);
  TextOutput:=str;
end;
exports
  Squart,
  UppeCaseText,
ReverseText,
 LowerCaseText;
end.

در ضمن ممنون میشم اگر بحثی هم راجع به ساخت پلاگینهای ویژوال داشته باشید(شبیه کامپوننتهایی که توی UO استفاده کردین) و نمونه ای قرار بدین!
 
آخرین ویرایش:

Free Man

کاربر متخصص مولتی مدیا بیلدر
دوست عزیز ،

قبل از اینکه پاسخ شما را بدهم ، بهتر دانستم کمی خود را معرفی کنم:

رشته ی بنده نرم افزار کامپیوتر می باشد ، و تا بحال دو کامپایلر طراحی کرده ام

البته خیلی ساده تر از کامپایلرهای موجود و تجاری ای که در دنیای نرم افزار موجود هستند.

برای میکروکنترولرها و مخصوصا آی سی های PIC ، یکی از آنها در مرحله ی آزمایشی است

و دیگری در حال کار بر روی بردهای صنعتی می باشد. بنده 9 سال است که برنامه نویسی می کنم

و 7 سال به صورت حرفه ای و به عنوان پیشه ی خود این تخصص را دنبال نموده ام.

این را بیان کردم تا بگویم که ، اطمینان داشته باشید بنده نیز از نوع ورودی تابع مطلع بودم (AnsiChar).


در دلفی2009 شکی در کیفیت و امکاناتش نیست ،

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

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

و پیرو همین ساختار که مسلما دارای ایراداتی می باشد ، مشکلی پیش می آید برای

آنهایی که قصد تولید پلاگین برای ام ام بی را دارند ، زیرا که تعدادی از توابع در دلفی آرگومان AnsiChar

را برای ورودی می پذیرند ولی ما مجبوریم که به آن Char وارد کنیم ، در دلفی7 با اینکه تولید سالها پیش

می باشد به راحتی تشخیص نوع می دهد و آرگومان ورودی را کستینگ می کند (انطباق نوع متغیر و تغییر آن

به نوع مورد نظر تابع) اما از چنین امکان قدرتمندی در دلفی2009 خبری نیست.

و نکته ی بعدی آنکه : نمی دانم شما برای ام ام بی پلاگین نوشته اید یا خیر اما اگر بگفته ی شما

Char را به AnsiChar تغییر دهیم ، درست است که خطایی رخ نمی دهد ، اما مقدار ارسالی برای

ام ام بی اشتباه خواهد شد. زیرا که ام ام بی با ساختار AnsiChar مشکل اساسی دارد.


و کلام آخر اینکه: بحثی که شما در مورد نوع ورودی تابع و تغییر آن نوع کردید کاملا درست و صحیح است

اما قصد ما ترکیب ام ام بی و دلفی است و این نوع راهکار برای پروژه ای که مستقل کار کند مفید و راهبر است

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

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

دوستان این انجمن قرار دهید.

موفق باشید.
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
نیازی به تعریف str نیست ، مانند کد زیر عمل کنید

باید StrUtils و SysUtils را در قسمت uses قرار دهید.

کد:
TextOutput:=StrUtils.ReverseString(TextInput[1])

TextOutput:= SysUtils.UpperCase(TextInput[1])

.
.
.

بله تقریبا درست بیان نمودید ، معنای خود یونیت ها بیانگر موضوع آنها می باشد.

فعلا کمی مشغله ام زیاد شده انشا الله در ماه های آینده.

تا چند ماه آینده نمی توانم حضوری مداوم و بطور روزانه داشته باشم.

اما دوستان ، سوالات خود را مطرح کنید ، و بنده هم سعی خواهم کرد هر چند روز یک بار

به انجمن سری بزنم و پاسخ های سوالات شما را در حد توان بیان نمایم.
 

Silver Soft

کاربر متخصص مولتی مدیا بیلدر
دوست عزیز ،

قبل از اینکه پاسخ شما را بدهم ، بهتر دانستم کمی خود را معرفی کنم:

رشته ی بنده نرم افزار کامپیوتر می باشد ، و تا بحال دو کامپایلر طراحی کرده ام

البته خیلی ساده تر از کامپایلرهای موجود و تجاری ای که در دنیای نرم افزار موجود هستند.

برای میکروکنترولرها و مخصوصا آی سی های pic ، یکی از آنها در مرحله ی آزمایشی است

و دیگری در حال کار بر روی بردهای صنعتی می باشد. بنده 9 سال است که برنامه نویسی می کنم

و 7 سال به صورت حرفه ای و به عنوان پیشه ی خود این تخصص را دنبال نموده ام.

این را بیان کردم تا بگویم که ، اطمینان داشته باشید بنده نیز از نوع ورودی تابع مطلع بودم (ansichar).

مطمئن هستم که شما میدونستید چون خودتون پلاگین رو نوشتید این رو گفتم چون بهترین برنامه نویسها هم گاهی اوغات یه جاهایی که فکرشم نمیکنن اشتباه میکنن ...

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

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

به نکته ی جالبی اشاره کردید ...

و نکته ی بعدی آنکه : نمی دانم شما برای ام ام بی پلاگین نوشته اید یا خیر اما اگر بگفته ی شما
char را به ansichar تغییر دهیم ، درست است که خطایی رخ نمی دهد ، اما مقدار ارسالی برای
ام ام بی اشتباه خواهد شد. زیرا که ام ام بی با ساختار ansichar مشکل اساسی دارد.
بله درسته ، من خواستم به شما بگم که دلفی مشکل نداره !!! به گفته ی خودتون :
زیرا که ام ام بی با ساختار ansichar مشکل اساسی دارد
 
آخرین ویرایش:

peyman136

کاربر متخصص مولتی مدیا بیلدر
سلام دوستان من الان داشتم نمونه رو تست میکردم وقتی خواستم پلاگین رو بیلد کنم به عبارت زیر گیر داد و پلاگین رو بیلدر نکرد
چطوری رفعش کنم ؟
من از دلفی 8 استفاده میکنم
کد:
[COLOR="Red"]function Copyright: pChar; cdecl;[/COLOR]
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
با سلام ،

عبارتی که قرار داده اید هیچ گونه مشکلی ندارد.

آیا در سورس کد تغییری داده اید ؟ اگر اینطور می باشد:

سورس کدها را پاک کنید و از اول فایل زیپی که سورس در آن موجود است را استخراج کنید

و پلاگین را بیلد کنید.
 

peyman136

کاربر متخصص مولتی مدیا بیلدر
با سلام ،

عبارتی که قرار داده اید هیچ گونه مشکلی ندارد.

آیا در سورس کد تغییری داده اید ؟ اگر اینطور می باشد:

سورس کدها را پاک کنید و از اول فایل زیپی که سورس در آن موجود است را استخراج کنید

و پلاگین را بیلد کنید.
kه تغییری توی ساختار کد ها ندادم ولی کاری شما گفتید رو هم انجام دادم ولی برطرف نشد اما بعد از تبدیل pChar به AnsiChar مشکل اون خط برطرف شد اما این بار به begin گیر داد
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
AnsiChar کاملا اشتباه می باشد ، زیرا که این تابع (Copyright) مقدار متغیر

کد:
PluginCopyright = 'Programmer & Author: Mohsen Farhadi';


attachment.php


را در شی پلاگین برای ام ام بی ارسال می کند ، و ام ام بی نمی تواند نوع AnsiChar

را بپذیرد.

اگر دلفی شما از pchar ایراد می گیرد ، آن را به System.PChar تغییر دهید.

و سوال دیگر آنکه ، دلفی شما دات نت است یا Win32 ؟

و اینکه اگر خطایی رخ می دهد لطف کنید پیغام خطا را نیز به همراه سوال خود درج نمایید.
 

پیوست ها

  • p.png
    p.png
    13.4 کیلوبایت · بازدیدها: 127

splinter cell

Well-Known Member
با سلام !
محسن عزیز من پیرو سفارش شما رفتم و دلفی 7 رو گیر آوردم و همونطور که گفته بودین مشکل بطور کلی برطرف شد و الان یکی دو تا پلاگین هم واسه خودم به عنوان نمونه ساختم و به خوبی داره کار میکنه! و حجم پلاگینها هم بسیار کاهش پیدا می کنه!
پیشنهاد میکنم پیمان و بقیه بچه ها هم از دلفی 7 استفاده کنند. توی 2009 مدام همین پیام AnsiChar رو میداد و اگر هم به خواسته اش عمل میکردم و نوع متغیر رو تغییر میدادم درسته که بیلد میشد اما توی MMB فرامین اجرا نمیشد حتی نام و مشخصاتCopyRight پلاگین رو هم توی پنجره پلاگین درست نشون نمیداد.
یعنی حرف شما مبنی بر پشتیبانی نکردن MMB ازAnsiChar کاملاً درسته.
باز هم از راهنمایی های شما تشکر میکنم و امیدوارم وقت این رو داشته باشید که به سئوالاتی که ممکنه بعداً برام پیش بیاد پاسخ بدین.
 

Free Man

کاربر متخصص مولتی مدیا بیلدر
splinter cell##

تشکر دوست عزیز ، در حد توان حتما پاسخگو خواهم بود.


Golden soft##

شما درست می فرمایید ، حواسم نبود که نسخه ی دوستمان 8 می باشد.


peyman136

پس با این حال ، به هیچ وجه سورس کد نمی تواند به درستی برای شما کار کند

و پلاگین ای برای بیلدر بسازید ، زیرا که محصول ساخته شده ی شما با این نسخه

تحت دات نت است و ام ام بی هم با دات نت تناقضی شدید دارد.

بهتر است که نسخه ی 7 دلفی را استفاده نمایید.


موفق باشید
 

جدیدترین ارسال ها

بالا