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

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 4 1234 آخرآخر
نمايش نتايج 1 به 10 از 33

نام تاپيک: همه آموزشها و مقالات در دلفی‌ بسیار جالب

  1. #1
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض همه آموزشها و مقالات در دلفی‌ بس

    پس از گذشت 10 ماه ويرايش جديد دلفي 7 به بازار آمد، اين ويرايش همانند سابق در سه نسخه به بازار نرم افزار عرضه شده است كه شامل نسخه Standard، Professional و Enterprise مي‌باشد.

    در ويرايش دلفي 7، شركت بورلند تغييراتي را در ساختار داخلي دلفي داده است كه مهمترين آن حمايت و توانايي برنامه‌نويسي بر اساس تكنولوژي .NET مي‌باشد. اين بدين معنااست كه برنامه‌نويسان دلفي مي‌توانند از هم اكنون به محيط .Net framework سوئيچ كنند و از مزاياي برنامه‌نويسي در آن كه مي‌توان به داشتن كلاسهاي برنامه‌نويسي فراوان، امنيت بالاي برنامه‌نويسي و وابسته نبودن به محيط برنامه‌نويسي و محيط اجراي برنامه را نام برد.

    ويرايش جديد دلفي 7 در دو CD ارائه شده است كه CD اول كامپايلر دلفي بوده و CD دوم شامل نسخه Preview از .Net framework جهت اجراي برنامه‌هاي نوشته شده توسط دلفي 7 مي‌باشد. لازم به ذكر است كه كاربران بايد حتماً .Net را بر روي سيستم خود نصب كنند تا بتوانند در محيط دلفي 7 برنامه‌نويسي كنند.


    حداقل سيستمي كه جهت كار با دلفي 7 پيشنهاد مي‌شود بايد داراي مشخصات زير باشد:

    - Intel Pentium II/233MHz يا بالاتر

    - MS Windows 98, 2000, XP

    - RAM 64MB (البته 128MB پيشنهاد مي‌شود)

    - 520MB فضاي خالي روي ديسك سخت

    - درايو CD-ROM

    - كارت گرافيكي SVGA يا بالاتر


    امكانات جديد درون دلفي 7 شامل چندين بخش مي‌باشد :


    - افزودن ابزار Model Driven Architecture (MDA) به دلفي، اين يكي از محصولات معروف شركت نرم افزاري بورلند مي‌باشد كه امكان مي‌دهد تا شما بتوانيد بهتر و قويتر معماري برنامه خود را كنترل و پشتيباني كنيد اين محصول براساس UML بوده و مدلهاي Rose را نيز حمايت مي‌كند.


    - طراحي و مدلسازي برنامه‌ها با UML : يكي از ويژگيهاي ويرايش 7 دلفي حركت به سمت برنامه نويسي و طراحي شيءگرا با ابزار UML مي‌باشد. محصول Mode Maker از معروفترين اين ابزارها مي‌باشد كه جهت طراحي پروژه با UML در محيط دلفي توسط شركتي به همين نام نوشته شده است. در اين محصول شما امكان طراحي كلاسها و دياگرامهاي UML را داريد كه سورس دلفي آنها نيز بطور خودكار براي شما نوشته مي‌شود.


    - ايجاد برنامه‌هاي C-business : در ويرايش جديد شما مي‌توانيد به راحتي به توليد برنامه‌هاي مبتني بر Web اقدام كنيد Websnap و bizsnap در ويرايش جديد كامل شده‌اند و تكنولوژي .Net را نيز همراه خود دارند، اين قابليت بزرگي مي‌باشد زيرا شما با كمترين زمان ممكن مي‌توانيد به توليد محصولات تحت وب بپردازيد و فروشگاههاي تجاري خود را ايجاد كنيد.


    - ايجاد برنامه‌هاي كاربردي با ويندوز XP : از ديگر قابليتهاي جديد دلفي 7 افزودن حالات و شكل و قيافه ويندوز XP با VCLهاي دلفي مي‌باشد. اين امكان به شما اجازه مي‌دهد تا برنامه‌هاي قويتري را در محيط ويندوز پياده‌سازي كنيد.


    - افزايش قدرت دلفي 7 در تهيه گزارشات و حمايت از محيط‌هاي كاري باعث شده است تا بتوان روي اين محصول بعنوان يكي از كامپايلرهاي قوي در محيط .Net سرمايه گذاري كرد، حمايت از Kylix3 در ويرايش جديد و توانايي برنامه نويسي تحت Linux از ديگر تواناييهاي دلفي ويرايش 7 مي‌باشد.


    - امكان ايجاد سيستمهاي چند لايه (3-tier) براساس ساختار DCOM، COM+ و CORBA بر پايه تكنولوژي Datasnap و حمايت از تمامي بانكهاي اطلاعاتي معروف دنيا از قبيل DBZ ،Oracle ،MySQL ،SQL Server و ... كه در ويرايش 6 دلفي نيز وجود داشت ولي در ويرايش جديد اين امكانات بهتر، سريعتر و قويتر شده است.

  2. #2
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    با سلام

    Microsoft Agent يكي از سرگرم كننده ترين فن آوريهاي Microsoft مي باشد كه تا كنون توانسته بسيار مورد علاقه كاربران قرار بگيرد. Agentها به برنامه هاي شما جذابيت زيادي مي دهند و امكان ارتباط بهتر و جالبتري را با كاربر ايجاد ميكنند. در اينجا من مي خواهم شما را با Microsoft Agent و طريقه بكار گيري آن در برنامه هاي خودتان را آموزش بدهم كه اميدوارم مفيد باشد. از آنجايي كه من اين امكان را در دلفي استفاده كرده ام براي شما هم مثالهاي دلفي آورده ام ...

    اولين باري كه از اين تكنولوژي استفاده شد در برنامه Office 97 بود كه خيلي مورد علاقه كاربران قرار گرفت. من اون موقع خيلي گشتم تا بتونم از اين امكان استفاده كنم ولي خوب نتونستم ): اما بعد ها با پيشرفت كردن علم برنامه نويسي و همچنين با پيشرفت كردن عقل Microsoft (كه از نظر من بزرگترين كلاه بردار قرن هست) اين تكنولوژي در اختيار ديگران هم قرار گرفت... براي همين در اوايل فقط در Office بود كه از اين امكان استفاده مي شد.

    حالا اينا رو گفتم اما ببينيم اصلاً Agent چي هست؟؟!!!

    شما اگه از Office استفاده ميكنيد حالا هر كدوم از برنامه هاش كه باشه (Word,Excel,FrontPage,...) يك شكلكي رو ميبينيد كه هميشه نسبت به كارهايي كه انجام ميدين يك سري حركات از خودش نشون ميده كه هم سرگرم كننده هست هم آموزنده. حالا حتماً متوجه شدين كه در مورد چي صحبت ميكنيم (هر چند كه ميدونم ميدونستيد (; ) خوب حالا مي خواهيم ببينيم كه چطور ميشه از اين امكان تو برنامه هاي خودمون استفاده كنيم مثلاً وقتي برنامه داره كار ميكنه يه شكلكي بياد براي كاربر ادا در بياره تا طرف نفهمه كه برنامه چيكار ميكنه (: يا مثلا موقع ذخيره كردن و بازيابي كردن و يا جستجو و ... يك سري حركات مربوط به آن عمل انجام بده...

    اينكار خيلي ساده است و فقط كافي هست شما يك Agent رو انتخاب كنيد و در برنامتون تعريفش كنيد و بعد هر كاري كه خواستين رو بهش دستور بدين تا براتون انجام بده . ضمنا شما لازم نيست اصلاً غصه درست كار كردن اون رو بخورين چون خود Windows اونو كنترل ميكنه كه يه وقت كار بدي نكنه ((:

    شما نميتونيد كه Agent رو داخل يك جعبه مكالمه (Dialog Box) قرار بدين و فقط ميتونيد جاي اوليه اون رو انتخاب كنيد بعد نمايش بدين و كاربر ميتونه اونو به دلخواه خود تغيير مكان بده با Drag كردن اينكار رو انجام ميده. خوب حالا براي شروع كار به يك سري Agent نياز داريم كه البته همراه ويندوز هميشه يك سري همراه هستند بهترين اونها كه ميتونه كارهاي زيادي انجام بده (منظور حالتهاي زيادي براش تعريف شده) Merlin هست كه يك جادوگر پير مي باشد. براي Download كردن اينها ميتونيد به سايتهايي كه معرفي ميكنم يك سري بزنيد. ضمناً شما خودتون هم ميتونيد يك Agent طراحي بكنيد كه براي اينكار بايد از يك سري نرم افزار استفاده كنيد.

    براي اينكه كاربر بتونه از Agent برنامه شما استفاده كنه بايد حتماً Microsoft Agent Server‌ رو نصب كنه. كه البته من تا حالا تو هر ويندوزي كه برنامم رو اجرا كردم نصب شده بوده فكر كنم اين برنامه همراه خود ويندوز هست (; ولي اگه نبود شما ميتونيد يك سري به آدرس زير بزنيد اونجا چيزهاي جالبي در اين مورد داره كه يك مطالعه كنيد بد نيست.

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    در اين آدرس اخرين باري كه رفتم مطالب زير بود حالا اگه تا حالا بيلي جون حوصله اش از اونا سر نرفته باشه و عوض نكرده باشد بايد باشه:

    - The Agent Server

    - The Characters/Agents

    - A Text-to-Speech pices

    - A Voice command (input) pices



    اين مطالب تحت عنوان Microsoft Agent Software Development Kit هست كه در اونجا شما همچنين ميتونيد نرم افزار Microsoft Agent Character Editor رو براي درست كردن Agent دريافت كنيد. در اين مقاله ما در مورد Voice Command‌ (فرمان هاي صوتي) و طراحي Agent صحبت نميكنيم و فقط طرز استفاده از اين امكان رو شرح ميدم كه خودتون بعداً ميتونيد در موردش بيشتر جستجو كنيد. ما براي كارمون فقط احتياج به Agent Server و يك كاراكتر داريم كه اگه روي ويندوزتون ندارين ميتونيد از اينجا Download بكنيد.

    خوب حالا ميريم سر اصل مطلب:

    بعد از اينكه مطمئن شدين روي ويندوزتون AgentServer رو دارين دلفي رو اجرا كنيد و مراحل زير رو مو به مو انجام بدين:

    1- Component|Import ActiveX Control رو انتخاب كنيد.

    2- Microsoft Agent Control رو از تو ليست پيدا كنيد و رو ي دكمه Install كليك كنيد.

    3- خوب حالا بايد تو قسمت ActiveX يك آيكوني شبيه به MenInBlack داشته باشيد.

    خوب تا يادم نرفته اينو بگم كه براي پيدا كردن يك كاراكتر روي ويندوزتون بايد براي acs.* جستجو كنيد كه البته به طور عادي اگر Agent Server نصب باشه توي شاخه Windows يك msagent بايد وجود داشته باشه و داخل اون هم يك شاخه ديگه به نام Char هم هست كه توش يك يا چند كاراكتر وجود داره كه اگر از XP استفاده ميكنيد حتماً يكيش Merlin.acs هست (كه من خيلي بهش علاقه دارم (: ) براي همين ما بايد تو برنامه مون چك كنيم كه آيا اين شاخه وجود داره يا نه اگه وجود داشت ميدونيم كه Agent Server روي ويندوز كاربر نصب هست و ما مي تونيم از Agent استفاده كنيم .

    خوب براي اينكار بايد اول ActiveX رو به روي فرم منتقل كنيم با اينكار يك type با نام TAgent به تعاريف فرم اضافه ميشه . بعد بايد يك متغيير تعريف كنيم كه از نوع Boolean باشه تا با اون چك كنيم كه آيا Agent Server نصب هست يا نه براي اينكار ميشه از Code زير استفاده كرد:



    TYourObject

    private

    AgentInstalled: Boolean;

    function AgentIsInstalled: Boolean;

    procedure CreateAndLoadAgentIfInstalled;

    function GetColorDepth: Word;

    function GetWinDir: String;

    procedure SetFormColor;

    function AgentWasClicked



    شما ميتونيد روي ويندوز كاربر به دنبال اون شاخه و كاراكتري كه مي خواهيد از او استفاد هكنيد بگرديد و اگه بود كار رو باهاش شروع كنيد اگه هم نبود خوب ديگه كاربر بايد محيط خشك برنامتون رو تحمل كنه (;

    حالا مثلاً ما مي خواهيم از Merlin استفاده كنيم :

    {-----------------------------------------------}

    function TYourObject.AgentIsInstalled: Boolean;

    begin

    Result := (FileSearch('Merlin.acs',

    Format('%s\MSAGENT\CHARS', [GetWinDir]))<>'');

    end;



    {-----------------------------------------------}

    function TYourObject.GetWinDir : string;

    var

    WinDirZ : array[0..256] of Char;

    begin

    GetWindowsDirectory(WinDirZ, SizeOf(WinDirZ));

    Result := StrPas(WinDirZ);

    end;



    نكته : در بالا براي بدست آوردن نام شاخه اي كه ويندوز در آن نصب هست از API استفاده شده كه مسير كامل ويندوز را به ما ميدهد.

    حال كه فهميديم كاربر امكان استفاده از Agent رو داره مي تونيم كار رو شروع كنيم. در ادامه بايد يك Object براي Agent خودمون بسازيم تا از اين به بعد از اون استفاده كنيم و مجبور نباشيم از ActiveX استفاده كنيم. براي اينكار از كد زير ميشه استفاده كرد:

    implementation



    uses

    AgentDemoConsts,

    Registry,

    OLECtrls, AgentObjects_TLB;



    {-----------------------------------------------}

    procedure

    TYourObject.CreateAndLoadAgentIfInstalled;

    const

    RightBias = 80;

    TopBias = 70;

    var

    tp: TPoint;

    begin

    if (AgentInstalled) and

    not (Assigned(RobotAgent)) then begin

    RobotAgent := TAgent.Create(Application);

    RobotAgent.Characters.Load('Merlin','Merlin.acs');

    { Move the Agent to the center of the screen }

    tp.x := (Screen.Width div 2)-(Width div 2);

    tp.y := (Screen.Height div 2)-(Height div 2);

    with RobotAgent.Characters.Item['Merlin'] do begin

    MoveTo(tp.x+RightBias, tp.y+TopBias, 0);

    Show(0);

    Play('Greet');

    Play('Explain');

    Speak(SDemoIntro, '');

    Play('Pleased');

    Play('RestPose');

    Speak(SWhisper, '');

    Speak(SMonotone, '');

    Speak(SMap, '');

    end;

    end;

    end;





    چند خط اول كه مشخص هست چه كار ميكنه . اما بعد از اينكه كاراكتر تعريف شد (RobotAgent) اونو به Merlin نسبت ميديم وبعد هم اونو به وسط صفحه نمايش منتقل ميكنيم و حالا ميرسيم به مهمترين قسمت كار كه دستور دهي به Merlin هست.

    با استفاده از Play شما ميتونيد به Agent دستور بدين اما براي هر Agnet دستورات متفاوت هست يعني ممكن هست كه دستوارتي كه براي Merlin كار ميكنه براي Robby (كه يكي ديگر از Agent ها هست) كار نكنه. شما اگه كاراكترتون رو خودتون درست ميكنيد خوب پس ليست دستوراتش رو داريد اما اگه اونو از جايي Download ميكنيد حتما ليست دستوارتش هم همراش هست مثلا شما ميتونيد در مورد Merlinو يا Robby و يا چند Agent ديگه از تو همون آدرسي كه در بالا دادم ليست دستوارتش رو بگيريد.

    حالا در كد بالا ميبينيد كه در ابتدا از دستور Show استفاده شده اين دستور براي به نمايش در آوردن Agent هست و در تمامي آنها كار ميكنه . بعد با استفاده از Play كارهاي مورد نظرمون رو به Agent‌ ميگيم. مثلاً من در ابتدا با استفاده از دستور Greet از Agent خواستم كه سلام كنه و بعد هم با استفاده از Explain خواستم كه شروع كنه به گفتن يك سري مطالب كه با دستور Speak اونها رو كه در متغيير SDemoIntro قرار داده ام به صورت يك بالون كه بالاي سرش باز ميشه ميگه. شما براي اينكه بگين مطالب رو با چه حالتهايي بخونه مي تونيد از دستواراتي كه در جدول زير آوردم استفاده كنيد:

    Addition

    Resulting capability

    \Chr="Whisper"\

    The Agent will whisper the following text.

    \Pau=N\

    The Agent will pause for the designated number of milliseconds.

    \Emp\

    The Agent will give special emphasis to the following phrase.

    \Chr="Montone"\

    The Agent will emphasize nothing at all.

    \Map=

    The Agent will say one thing, and = "think" another.

    خوب حالا براي اينكه بيشتر متوجه بشين در زير يك سري مثال آوردم كه ميتونيد اونها رو در برنامه استفاده كنيد و نقش هر كدوم از دستوارت رو ببينيد:

    SFuzzyWuzzy = 'Fuzzy wuzzy was a bear;\Pau=500\ ' +

    'fuzzy wuzzy had no hair;\Pau=500\ ' +

    'fuzzy wuzzy wasn't very \Emp\fuzzy, \Emp\was he?';

    SWhisper = '\Chr="Whisper"\Now I will whisper: ' +

    'Whisper whisper whisper.';

    SMonotone = '\Chr="Monotone"\Now I will speak in a ' +

    'monotone. Pat Paulsen for President.';

    SMap = '\Map="I will now continue to speak in ' +

    'English, but you will see my words ' +

    'translated into German in the balloon above ' +

    'my head. How are you today? I am just ' +

    '\Emp\dandy!"="Jetzt werde ich zwar immer ' +

    'noch in Englisch reden, sie werden ' +

    'aber meine Woerte im Balloon obenauf ins ' +

    'Deutsch uebersetzt sehen. Wie geht es ' +

    'Ihnen heute? Mir geht es ganz gut!"\';



    خوب ديگه همين بود تمام ماجرا حالا شما اگه مي خواهين بيشتر در اين مورد كار كنيد من در مقالات بعدي يكي سري سايت و مطلب ديگه هم براتون ميزارم البته به زبون اصلي خودشون حتماً خيلي مفيد خواهد بود.

    ضمنا شما ميتونيد از Event ها هم در Agent استفاده كنيد و مثلا براي رويداد OnClick روي Agent‌ يك چيزي تعريف كنيد.



    خوب در آخر از شما كه تا اينجا آمديد متشكرم و يك سري نكات رو هم بايد ذكر كنم :

    1- اين مطالب حاصل تجربه خودم و همچنين برگرفته از يك سري مقالاتي بوده كه در اين مورد مطالعه كردم.

    2- در مورد استفاده از اين كدهايي كه در اين مقاله آورده ام و همچنين در پايان اين مقاله ضميمه كرده ام هيچ گونه مسئوليتي بعهده من نخواهد بود كه درست كار كنه يا بزنه كامپيوتر شما رو بسوزونه !!!!!

    3- استفاده از اين مقاله به شرط ذكرنام و آدرس اصلي مقاله در سايتها و جاهاي ديگر آزاد است .

    4- اگه در اين مورد نظري دارين يا حتماً براي من ايميل كنيد خوشحال خواهم شد بشنوم.

  3. #3
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    چگونه تمامي رويدادهاي يك شيء را در زمان اجرا به Nil تنظيم ‌كنيم؟

    در اين مقاله روشي را جهت اينكه تمامي رويدادهاي يك شيء تعريف شده در دلفي را در زمان اجرا به Nil تنظيم كنيد براي شما بازگو مي‌كنيم. شما مي‌توانيد از RTTIها جهت رسيدن به اهداف خود استفاده كنيد اما فقط براي زمان طراحي و اجرا و اين امكان براي رويدادها وجود ندارد. استفاده از RTTI، تا حدودي پيچيده است بنابراين من رويه‌اي را براي نسبت دادن Nil به يك شيء موجود در زمان اجراي يك برنامه در دلفي آورده‌ام كه نحوه انجام اين كار را به شما نشان مي‌دهد.

    unit uNilEvent;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    {Private declarations}
    public
    {Public declarations}
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    uses
    Typlnfo;

    procedure NilEvents(lnstance: TObject);
    var
    Typelnfo: PTypelnfo;
    I, Count: Integer;
    PropList: PPropList;
    Proplnfo: PProplnfo;
    Method: TMethod;
    begin
    Typelnfo := Instance.Classlnfo;
    Method.Code := nil;
    Method.Data := nil;
    Count := GetPropList(Typelnfo, [tkMethod], nil);
    GetMem(PropList, Count * SizeOf(Pointer));
    try
    GetPropList(Typelnfo, [tkMethod], PropList);
    for I := 0 to Count -1 do
    begin
    Proplnfo := PropList^[I];
    SetMethodProp(lnstance, Proplnfo, Method);
    end;
    finally
    FreeMem(PropList);
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    const
    sText = 'The 2nd time you click Button1 the event will not fire';
    begin
    NilEvents(Button1);
    ShowMessage(sText);
    end;

    end.

    چگونه رويداد مربوط به تمامي اجزاء درون برنامه خود را تغيير دهيم؟

    گاهي لازم مي‌شود تا ما فراميني را براي يكي از رويدادهاي برنامه خود به تمامي اشياء استفاده شده در برنامه نسبت دهيم اينكار مي‌تواند با استفاده از RTTI دلفي صورت گيرد شما مثالي را مي‌بينيد كه اين كار را شبيه‌سازي كرده است.

    uses
    Typlnfo;

    procedure TFrmRTTIOnChange.Button1Click(Sender: TObject);
    var
    proplnfo: PProplnfo;
    thisEvent: TNotifyEvent;
    begin
    proplnfo := GetProplnfo(Memo1.Classlnfo, 'OnChange');
    if proplnfo <> nil then
    begin
    thisEvent := Memo1AltChange;
    SetOrdProp(Memo1, Proplnfo, integer(@thisEvent));
    end;
    end;

    procedure TFrmRTTIOnChange.Memo1Change(Sender: TObject);
    begin
    Caption := 'Normal On Change';
    end;

    procedure TFrmRTTIOnChange.Memo1AltChange(Sender: TObject);
    begin
    Caption := 'Alternate On Change';
    end;

  4. #4
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    طريقه بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
    اطلاعاتي که روالهاي زير برمي گرداند عبارتست از شماره سريال - نوع سيستم فايل -
    پشتيباني از نام فايلهاي طولاني و نام درايو


    From The Windows.Pas
    --------------------
    --------------------

    function GetVolumeInformationA(lpRootPathName: PAnsiChar;
    lpVolumeNameBuffer: PAnsiChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
    var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
    lpFileSystemNameBuffer: PAnsiChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

    function GetVolumeInformationW(lpRootPathName: PWideChar;
    lpVolumeNameBuffer: PWideChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
    var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
    lpFileSystemNameBuffer: PWideChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

    function GetVolumeInformation(lpRootPathName: PChar;
    lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
    var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
    lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

    Example
    -------
    -------

    Used Variables
    --------------
    Path : PChar;
    --> String that contains the root directory of the volume to
    be described.
    VolumeName : PChar;
    --> Points to a buffer that receives the name of the specified
    volume.
    VolumeNameSize : DWord;
    --> Specifies the lenght in characters of the buffer that
    receives the volume name.
    SerialNumber : DWord;
    --> Points to a variable that receives the volume's serial
    number.
    MaxLength : DWord;
    --> Receives the maximum length in characters of a filename
    supported by the specified file system.
    (to indicate if long file names are supported)
    - long file names --> value : 255
    Flags : DWord;
    - FS_CASE_IS_PRESERVED
    - FS_CASE_SENSITIVE
    - FS_UNICODE_STORED_ON_DISK
    - FS_PERSISTENT_ACLS
    - FS_FILE_COMPRESSION
    - FS_VOL_IS_COMPRESSED
    (for more info on the flags look in the help file)
    FileSystem : PChar;
    --> Points to a buffer that receives the name of the specified
    file system.
    FileSystemNameSize: DWord;
    --> Specifies the lenght in characters of the buffer that
    receives the filesytem name.

    Code
    ----
    Path := 'C:\';
    VolumeNameSize := 256;
    FileSystemNameSize := 256;
    GetVolumeInformation(Path,VolumeName,VolumeNameSiz e,
    @SerialNumber,MaxLength,Flags,FileSystem,FileSyste mNameSize);

  5. #5
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    كمي تاريخچه
    FastReport قبلا با نام FreeReport عرضه مي شد و يك محصول رايگان بود. ولي بعدها به FastReport تغيير نام پيدا كرد و به صورت تجاري عرض گرديد. البته هنوز كمپوننت FreeReport توسعه مي يابد و نسخه هاي جديدتر آن را از سايت [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] يا [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] مى‌توانيد داون لود كنيد.

    آشنايي كلي با شكل گزارش سازي در FastReport
    اين كمپوننت يك محيط Report Desinger در اختيار شما قرار مي دهد كه با استفاده از آن مي توانيد Reportها را طراحي كنيد، اسكريپت نويسي كنيد و يا فرم هاي جديد براي انتخابي كردن گزارش خود ايجاد كنيد. براي وارد شدن به اين Report Desinger بايد از كمپوننت TfrReport استفاده كنيد. كافي است يك كمپوننت TfrReport روي فرم بگذاريد و روي آن دابل كليك كنيد يا كليد سمت راست را زده و گزينه Design Report را انتخاب كنيد. ممكن است اين محيط كه موسوم به Desinger است در ابتدا كمي شلوغ به نظر بيايد ولي در انتهاي اين مقاله آموزشي كاملا با استفاده از اين Desinger آشنا خواهيد شد.

    شما مي توانيد گزارش هاي خود را در فايلهايي با پسوند frf. ضبط كنيد و در موقع نياز هر كدام از آنها را Load نماييد و همچنين اگر برنامه شما تنها يك گزارش دارد مي توانيد آن گزارش را در خود فايل EXE نگهداري كنيد.

    ساخت يك گزارش ساده
    يك كمپوننت TfrReport را روي فرم قرار دهيد و روى آن دابل كليك كنيد تا به محيط Report Designer برويم. خوب ... مى‌خواهيم براى شروع يك گزارش بسيار ساده بسازيم.

    از ToolBar سمت چپ گزينه Insert rectangle object را انتخاب كنيد. آيكن اين گزينه شبيه به آيكن كمپوننتMemo است.
    مىبينيد كه وقتى اين كمپوننت را در محل مربوطه قرار مى‌دهيد پنجره اى باز مي شود:

    همانند شكل در قسمت بالا تايپ كنيد: "سلام دوستان!" و سپس اين پنجره را ببنديد.
    خوب! اولين گزارش خودمون رو ساختيم. حالا به سادگى گزارش را Save كنيد و اسم اون رو بگذاريد Test. اين فايل رو در همون جايى ضبط كنيد كه پروژه تون در اونجا Save شده است.
    حالا Designer رو ببنديد و يك Button روي فرمتون بگذاريد و و در اونت OnClick آن كد زير رو بنويسيد:

    frReport1.LoadFromFile('Test.frf');
    frReport1.ShowReport;

    خوب! كار ساخت اولين گزارشمون تمام شد. ما خيلي ساده در ابتدا گزارشى را كه قبلا ساخته بوديم Load كرديم و بعدش هم از متد ShowReport براى نمايش گزارش استفاده كرديم. البته مى‌توانستيم از متد PrintPreparedReportDlg براى چاپ مستقيم گزارش بدون نمايش پيش‌نمايش يا Preview استفاده كنيم.
    نكته: در صورتى كه بخواهيم ميتوانم با True كردن پراپرتي StoredInDFM گزارش را در EXE خود ضبط كنيم. در آن صورت لازم نيست گزارش را ضبط كنيم و همچنين احتياجى نيست كه آن را در كد Load بكنيم.
    اين حالت تنها وقتى مفيد است كه برنامه شما فقط يك گزارش داشته باشد.
    خوب! ما تا حالا اصول استفاده از FastReport رو ياد گرفتيم. در باقي اين مقاله آموزشى گزارش‌هاى پيشرفته‌ترى مى‌سازيم و آرام آرام شما با FastReport احساس راحتى مى‌كنيد.

    ساخت يك گزارش ديگر
    خوب ... يك كمپوننت TTable رو از پالت BDE روى فرمتون قرار دهيد و پراپرتي DatabaseName آن را برابر DBDEMOS و پراپرتى TableName را برابر Biolife قرار دهيد.
    يك كمپوننت TfrReport و همچنين يك كمپوننت TfrDBDataSet روى فرم قرار دهيد و پراپرتى DataSet آن را برابر نام Table1 قرار دهيد و پراپرتى DataSet كمپوننت TfrReport را برابر frDBDataSet1 قرار بدهيد. حالا با كليك بر روى كمپوننت frReport1 وارد محيط Designer شده و Tools>Tools>Insert DB Fields را انتخاب كنيد.
    خوب شما انتخاب كنيد و آن را روي فرم قرار دهيد. پنجره اي شبيه به شكل زير نمايش داده مى‌شود:


    تمام فيلدها را انتخاب كنيد و OK را بزنيد.....
    خوب تقريبا كارمان تمام است. اگر خوب نگاه كنيد مي بينيد كه دو باند روى فرم گزارش اضافه شد كه يكى Page Header و ديگرى Master Data نام دارد. File>Preview را انتخاب كنيد و ببينيد گزارش شما چه شكلى خواهد بود. گزارش خودتان را Save كنيد و از روشى كه قبلا ذكر شد براى نمايش گزارش در زمان اجرا يا Run-Time استفاده كنيد.

    ساخت گزارش‌هاى پيشرفته‌تر
    به موارد زير توجه كنيد:
    1- اگر بخواهيد از كمپوننتهايى مثل RichEdit - Chart - CheckBox و ... در گزارش خود استفاده كنيد بايد كمپوننت مربوطه را روى فرم برنامه خود قرار دهيد.
    2- اگر بخواهيد امكان Export گزارش به فرمتهاى HTML - Text - CSV يا DOC را به برنامه خود بدهيد بايد كمپوننت مربوطه را روى فرم برنامه خود قرار دهيد.
    3- اگر بخواهيد گزارش Master-Detailى بسازيد بايد از دو باند Master data و Detail data استفاده كنيد.
    4- اگر بخواهيد مجموع مقادير يك فيلد رو در انتهاى يك گزارش بنويسيد بايد از يك باند Master footer استفاده كنيد و گزينه Insert rectangle object را انتخاب كنيد. سپس Insert Expression را انتخاب كنيد. Functions را انتخاب كنيد و از تابع Count براى انجام اين كار استفاده كنيد. همچنين مى‌توانيد Variables را انتخاب كنيد و از مواردى همچون شماره صفحه، كل صفحات، تاريخ و ... استفاده كنيد.

    اميدوارم اين مقاله بتونه هر چند اندك شما رو با FastReport آشنا كنه

  6. #6
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    يكي از فرمتهاي محبوب وب است و به راحتي مي توان براي ساخت Interfaceها در برنامه از آن استفاده كرد. بعضي از برنامه نويسان معتقدند استفاده از Flash سبب سنگين شدن برنامه، وابستگي برنامه به ActiveX فلش، امكان نداشتن تبادل اطلاعات بين Flash و دلفي و مشكلات ديگري مي شود.
    در اين مقاله خواهيد ديد كه به راحتي تمامي اين مشكلات را مي توانيد رفع كنيد.

    نصب ActiveX فلش
    براي نصب ActiveX فلش به Component>Import ActiveX Control برويد. در ليست مربوطه به دنبال Shockwave Flash بگرديد. در صورتي كه آن را پيدا نكرديد. دكمه Add را زده و به آدرس زير برويد:

    WIN_DIRECTORY\System32\Macromed\Flash

    و فايل Flash.ocx را انتخاب كنيد و سپس Install را بزنيد.
    خوب ... تا به اينجا كار نصب اكتيوايكس فلش تمام است. كمپوننت مربوطه را ميتوانيد در پالت ActiveX پيدا كنيد.
    نكته: در صورتي كه شاخه مذكور در كامپيوتر شما وجود ندارد، احتمالا شما Flash Player را نصب نكرده‌ايد.
    البته نگران نباشيد، با شيوه اي كه در اين مقاله ذكر شده كاربر شما بدون نياز به نصب Flash Player مي تواند برنامه شما را اجرا كند.

    استفاده از اكتيوايكس فلش
    اكتيوايكس فلش را مي‌توانيد در پالت ActiveX پيدا كنيد. آن را روي فرمتان قرار دهيد. از پراپرتيMovie ميتوانيد براي Load كردن فايل SWF خود استفاده كنيد.
    به باقى پراپرتى‌هاى اكتيوايكس فلش دقت كنيد:
    (البته توضيحات پراپرتى‌ها را به صورت انگليسى آورده‌ام. چون نوشتن آنها به صورت فارسى زياد جالب نيست. به خاطر اينكه پر از لغاتى هستند كه ترجمه‌شون غير ممكن است.)

    ReadyState (get only)
    0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete.

    TotalFrames (get only) Returns the total number of frames in the movie. This is not available until the movie has loaded. Wait for ReadyState = 4.

    FrameNum (get or set) The currently displayed frame of the movie. Setting this will advance or rewind the movie.

    Playing (get or set) True if the movie is currently playing, false if it is paused.

    Quality (get or set) The current rendering quality (0=Low, 1=High, 2=AutoLow, 3=AutoHigh). This is the same as the QUALITY parameter.

    ScaleMode (get or set) Scale mode (0=ShowAll, 1= NoBorder, 2 = ExactFit). This is the same as the SCALE parameter.

    AlignMode (get or set) The align mode consists of bit flags. (Left=+1, Right=+2, Top=+4, Bottom=+8). This is the same as the SALIGN parameter.

    BackgroundColor (get or set) Override the background color of a movie. An integer of the form red*65536+green*256+blue use -1 for the default movie color.

    Loop (get or set) True if the animation loops, false to play once. Same as the MOVIE parameter.
    Movie (get or set) The URL source for the Flash Player movie file. Setting this will load a new movie into the control. Same as the MOVIE parameter.


    متدها:


    Play() Start playing the animation.

    Stop() Stop playing the animation.

    Back() Go to the previous frame.

    Forward() Go to the next frame.

    Rewind() Go to the first frame.

    SetZoomRect(int left, int top, int right, int bottom) Zoom in on a rectangular area of the movie. Note that the units of the coordinates are in twips (1440 units per inch). To calculate a rectangle in Flash, set the ruler units to Points and multiply the coordinates by 20 to get TWIPS.

    Zoom(int percent) Zoom the view by a relative scale factor. Zoom(50) will double the size of the objects in the view. Zoom(200) will reduce the size of objects in the view by one half.

    Pan(int x, int y, int mode) Pan a zoomed in movie. The mode can be: 0 = pixels, 1 = % of window.


    نصب اكتيوايكس فلش روي كامپيوتر كاربر
    براي اين كه كاربر نهايي بتواند از برنامه شما استفاده كند بايد اكتيوايكس فلش را داشته باشد. در واقع شما بايد اكتيوايكس مربوطه را براي او نصب كند. روش كار به اين گونه است كه شما بايد چك كنيد كه آيا كاربر نهايي اكتيوايكس فلش را بر روي دستگاه خود نصب كرده است يا نه و در صورتي كه وي اين اكتيوايكس را ندارد برنامه شما بايد به طور اتوماتيك آن را نصب كنيد.
    براي پياده سازي اين روش ما بايد در ابتدا OCX فلش را با استفاده از Resourceها در فايل Exe خود مخلوط كنيم. در صورتي كه شما با Resourceها آشنايي نداريد نگران نباشيد. مراحل زير را انجام دهيد و باقي كار را به دلفي بسپاريد: 1- يك فايل Text بسازيد و اسم آن را SWFActivex.rc بگذاريد
    2- خطوط زير را در آن قرار دهيد:

    FlashOCX EXTRA Flash.ocx

    و فايل Flash.ocx را از مسيري كه قبلا ذكر شد در شاخه پروژه خود قرار دهيد.
    3- آن را ضبط كنيد و با استفاده از BRCC32.EXE كه در شاخه Bin محل نصب دلفي وجود دارد، آن را كامپايل كنيد. (خط زير را در Command Line تايپ كنيد يا به سادگي فايل SWFActivex.rc را بر روي فايل BRCC32.EXE دراگ (Drag) كنيد.

    BRCC32.EXE MyExeRes.rc

    خوب حالا شما يك فايل Resource كامپايل شده داريد به نام SWFActivex.res داريد.
    4- خطوط زير را در در سورس كد فرم اصلي خود قرار دهيد:

    ...
    ...
    implementation
    ...
    ...
    ...
    {$R *.dfm}
    {$R SWFActivex.RES}
    5- حالا اين تابع را به كد خود اضافه كنيد:

    function GetResourceFile(S : string; FilePath : string) : Boolean;
    var
    Res : TResourceStream;
    begin
    Result := True;
    if S <> '' then
    begin
    if FindResource(hInstance, PChar(S), Pchar('EXTRA')) = 0 then
    begin
    Result := False;
    Exit;
    end;
    try
    Res := TResourceStream.Create(hInstance, S, Pchar('EXTRA'));
    except
    Result := False;
    Exit;
    end;
    if FileExists(FilePath) then DeleteFile(FilePath);
    try
    Res.SaveToFile(FilePath);
    except
    Result := False;
    end;
    Res.Free;
    end;
    end;


    6- اين تابع را نيز اضافه كنيد:

    function GetSystemDir : string;
    var
    SysPath : PChar;
    begin
    GetMem(SysPath, MAX_PATH + 1);
    GetSystemDirectory(SysPath, MAX_PATH);
    Result := StrPas(SysPath)+ '\';
    FreeMem(SysPath, MAX_PATH + 1);
    end;



    7- خوب! حالا بگذاريد به مهمترين قسمت قضيه يعني Register كردن OCX مربوطه بپردازيم. در ابتدا يونيت ActiveX را به ليست uses خود اضافه كنيد. سپس تابع زير را نيز به سورس خود اضافه نماييد.

    function RegisterOCX( OCXFileName : string; Flag : Boolean) : Boolean;
    var
    OCXHand: THandle;
    RegFunc: TDllRegisterServer;
    OCXFileNamePtr : PChar;
    begin
    Result := True;
    if not FileExists( OCXFileName ) then
    begin
    Result := False;
    Exit;
    end;
    GetMem(OCXFileNamePtr, Length(OCXFileName) + 1);
    StrPCopy(OCXFileNamePtr, OCXFileName);
    OCXHand:= LoadLibrary(OCXFileNamePtr);
    FreeMem(OCXFileNamePtr, Length(OCXFileName) + 1);
    OCXFileNamePtr := nil;
    if OCXHand = 0 then
    begin
    Result := False;
    Exit;
    end;
    if Flag then
    RegFunc:= GetProcAddress(OCXHand, 'DllRegisterServer')
    else
    RegFunc:= GetProcAddress(OCXHand, 'DllUnregisterServer');

    if RegFunc = S_OK then
    Result := False;

    FreeLibrary(OCXHand);
    end;


    8- اين سه متغيير را نيز به كد خود اضافه كنيد:

    var
    FilePath : string;
    FlashOCX: TShockwaveFlash;




    9- تابع زير را نيز اضافه كنيد:

    function CreateFlashOCX : Boolean;
    var
    FilePath : string;
    begin
    Result := True;
    FilePath := GetSystemDir + 'Macromed\Flash\Flash.ocx';
    if not GetResourceFile('FlashOCX', FilePath) then
    begin
    Result := False;
    Exit;
    end;
    try
    FlashOCX := TShockwaveFlash.Create(nil);
    except
    if not RegisterOCX(FilePath, True) then
    Result := False
    else
    try
    FlashOCX := TShockwaveFlash.Create(nil);
    except
    Result := False;
    end;
    end;
    end;




    10- كدهاي زير را به انتهاي فايل خود، قبل از .end اضافه كنيد:


    initialization
    CoInitialize(nil);
    if not CreateFlashOCX then
    ShowMessage('An Error Occured!' + #13 + 'Program dosent run correctly!');
    finalization
    if Assigned(FlashOCX) then
    begin
    try
    FlashOCX.Free;
    FlashOCX := nil;
    except
    end;
    DeleteFile(FilePath);
    end;
    CoUninitialize;
    end.

    end.


    11- در اونت OnCreate فرم خودتون به راحتي از كمپوننت مربوطه استفاده كنيد:

    FlashOCX.Parent := Form1;
    FlashOCX.Movie := ExtractFilePath(Application.ExeName) + 'Main.swf';
    FlashOCX.Play;


    Resize شدن درست
    يكي از مشكلاتي كه ممكن است با اكتيو ايكس فلش پيدا كنيد مشكل Resize شدن است. همه ما مي دانيم كه يكي از مهمترين مزاياي فلش برداري بودن آن است و اين برداري بودن سبب مي شود كه فايل فلش بتواند در هر اندازه به درستي نشان داده شود. ولي متاسفانه فرم خود را در RunTime تغييراندازه مي دهيد فايل Flash تغيير اندازه نمي يابد. در اين جا يك راه حل ساده براي حل اين مشكل بيان شده كه به خوبي كار ميكند. كافي است كمپوننت فلش را در يك پانل قرار دهيد و پراپرتي Align آن را برابر alClient بگذاريد. حالا پراپرتي Anchor پانل خود را به گونه‌اي تنظيم كنيد كه مايل هستيد كمپوننت فلش Resize شود. سپس در اونت OnResize فرم خود، خطوط زير را درج كنيد:
    FlashOCX.Parent := nil;
    FlashOCX.Parent := Self;


    غيرفعال كردن كليك سمت راست
    مساله ديگرى كه ذهن بسيارى از برنامه‌نويسان را مشغول مى‌كند منوى Popup فلش است. غيرفعال كردن اين منو بسيار ساده است. كافي است يك كمپوننت TApplicationEvents را روي فرم خود قرار دهيد و كد زير را در اونت OnMessage اين كمپوننت بنويسيد:


    if (Msg.message = WM_RBUTTONDOWN) and (Msg.hwnd := FlashOCX) then
    begin
    PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    Handled := True;
    end;



    ارتباط بين Flash و دلفى
    يكى از مسائل بسيار مهم و اساسى ديگر برقرارى ارتباط بين Flash و دلفي است. فرض كنيد در فايل SWF خود چند Button داشته باشيد و بخواهيد وقتى كاربر روى هر كدام از اين اونتها كليك كرد فرم خاصى باز شود. در اين صورت چه بايد بكنيد. پياده سازى اين كار بسيار ساده است. كافى است در Flash براى هر كدام از دكمه‌هاى خود يك Action تعريف كنيد و از دستور FSCommand استفاده نماييد. از يك مقدار دلخواه مثل fMatn يا fSearch استفاده كنيد و در دلفى نيز از اونت OnFSCommand به صورت زير استفاده كنيد:

    if command = 'fMain' then fMain.ShowModal;
    if command = 'fSearch' then fSearch.ShowModal;




    خوب! فكر كنم با توضيحاتى كه در اين مقاله اومده، قانع شده باشيد كه Flash يكى از بهترين راه حلها براى طراحى Interfaceهاست.

  7. #7
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    آيا به دنبال راهى مى‌گرديد كه اپلت‌هاى كنترل پانل را از داخل برنامه تان بدون باز كردن خود كنترل پانل باز كنيد؟

    آيا احتياج داريد كه كاربرانتان بتوانند تاريخ/زمان سيستم را تغيير دهند، يك مودم اضافه كنند يا تنظيمات مربوط به joystick را تغيير دهند؟ يك راه ساده براي انجام چنين كارهاي بدون اين كه كاربر را مجبور كنيد Control Panel را باز كند وجود دارد. مسئله جالب اين است كه شما مي توانيد از اين روش در هر ويندوزى و يا در يك BATch فايل ساده استفاده كنيد.

    اجرا كردن دستور زير در برنامه شما سبب انجام اين حقه خواهد شد (CPL نام فايلهاي اپلت كنترل پانل است. ليستى از اين فايلها را مى‌توانيد در انتهاى اين مقاله پيدا كنيد. مضافا اينكه مي توانيد به دنبال فايلهايى با پسوند CPL در شاخه ويندوز Search كنيد و ليست كامل فايلهاي را بيابيد)


    rundll32.exe shell32.dll,Control_RunDLL CPL


    به عنوان مثال براى نشان دادن پنجره "تنظيمات تاريخ/زمان" از كد زير استفاده كنيد:


    rundll32.exe shell32.dll,Control_RunDLL timedate.cpl

    مثال كد دلفي / C++ Builder
    يونيت زير را در پروژه خود قرار دهيد و تابع RunControlPanelApplet را همراه با نام Applet مورد نظرتان صدا كنيد تا باز شود. به عنوان مثال: RunControlPanelApplet( 'timedate.cpl' );


    unit open_cpl;

    interface

    function RunControlPanelApplet(
    sAppletFileName : string) : integer;

    implementation

    uses Windows;

    function RunControlPanelApplet(
    sAppletFileName : string) : integer;
    begin
    Result :=
    WinExec(
    PChar('rundll32.exe shell32.dll,'+
    'Control_RunDLL '+sAppletFileName),
    SW_SHOWNORMAL);
    end;

    end.


    چگونه نام فايلهاى اپلت را پيدا كنيم؟
    اپلتهاى كنترل پانل پسوند CPL دارند. براى پيدا كردن ليستى از اپلتهاى نصب شده بر روي سيستم خود به شاخه SYSTEM (در ويندوزهاي 95) يا شاخه SYSTEM32 (در ويندوزهاي NT) برويد و به دنبال فايلهايى بگرديد كه پسوند CPL دارند.
    در زير ليستي از اپلتهاى عمومى را در ويندوز 95 و ويندوز NT مى‌بينيد:


    access.cpl: Accessibility Properties
    appwiz.cpl: Add/Remove Programs Properties
    desk.cpl: Display Properties
    intl.cpl: Regional Settings Properties
    joy.cpl: Joystick Properties
    main.cpl: Mouse Properties
    mmsys.cpl: Multimedia Properties
    modem.cpl: Modems Properties
    sysdm.cpl: System Properties
    timedate.cpl: Time/Date Properties

    خوب ديگه! تموم شد....

  8. #8
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    چگونه از فايلهاى PDF در دلفى استفاده كنيم؟
    1. دلفى را آغاز كرده و Component | Import ActiveX Control را انتخاب كنيد.
    2. به دنبال "(Acrobat Control for ActiveX (Version x.x" بگرديد و به Install را بزنيد.
    3. نام پالتى كه كمپوننت مورد نظر بايد در آن نصب شود را انتخاب كنيد.
    4. Install را كليك كنيد.
    5. Packageي كه قرار است كمپوننت در آن نصب شود را انتخاب كنيد يا يك Package جديد براى كنترل جديد TPdf بسازيد.
    6. بر روي OK كليك كنيد.
    7. دلفى به شما پيغام مى‌دهد كه آيا مايل به Rebuild كردن Package جديد/تغييريافته هستيد؟
    8. Yes را كليك كنيد. دلفى به شما پيغام مى‌دهد كه كمپوننت TPdf نصب شده است.
    9. Package را ببنديد و به دلفى اجازه دهيد كه آن را Save كند.
    10. حالا كمپوننت در تب ActiveX موجود مى‌باشد.
    13. كمپوننت TPdf را روي فرم بكشيد.
    14. با استفاده از Object Inspector پراپرتي src را مطابق آدرس يك فايل PDF كه روى كامپيوتر شما يا وب موجود مى‌باشد قرار دهيد. حالا تنها كارى كه بايد انجام دهيد تغيير اندازه كمپوننت مورد نظر است.



    نكات:
    1. اگر شما ActiveX مربوطه را نداريد، همين حالا آن را از سايت [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] داون لود كنيد. چون براي اين مثال ضرورى است.
    2. مي‌توانيد آخرين مرحله (مرحله 14) را در زمان اجرا يا RunTime انجام دهيد. بنابراين شما مى‌توانيد هر فايلى را در اجرا باز كرده و آنرا تغيير اندازه دهيد.

  9. #9
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    پس از مطالعه اين مقاله خواهيد آموخت چگونه از دلفي براي توليد صفحات ديناميك وب مبتني بر تكنولوژي ASP.NET مايكروسافت استفاده كنيد .

    مرحله اول : قبل از هركار بايد سيستم ASP.NET را از وجود دلفي به عنوان يكي از زبانهاي اسكريپت نگاري تحت NET. مطلع سازيد .

    ASP.NET براي اجراي برنامه ها به دنبال فايلي با نام web.config خواهد گشت كه جزئيات زبانهاي مورد استفاده سيستم در آن ثبت شده است . اين فايل XML-Based بايد براي معرفي دلفي به سيستم تغيير كند .

    كد زير نمونه خامي از اين نوع فايل را نمايش ميدهد :

    كد:



    <configuration>

    <configSections>

    <section name="appSettings"

    type="System.Configuration.NameValueFileSectionHan dler,

    System, Version=1.0.3300.0,

    Culture=neutral, PublicKeyToken=b77a5c561934e089" />

    <section name="sessionState"

    type="System.Web.SessionState.SessionStateSectionH andler,

    System.Web, Version=1.0.3300.0, Culture=neutral,

    PublicKeyToken=b03f5f7f11d50a3a"

    allowDefinition="MachineToApplication" />

    </configSections>



    <appSettings>

    <add key="dsn" value="localhost;uid=MyUserName;pwd=;" />

    <add key="msmqserver" value="server\myqueue" />

    </appSettings>



    <sessionState cookieless="true" timeout="10" />

    </configuration>





    فايل مورد نظر براي سازگاري با دلفي بايد به اين شكل باشد :



    كد:



    <configuration>

    <system.web>

    <compilation debug="true">

    <assemblies>

    <add assembly="DelphiProvider" />

    </assemblies>

    <compilers>

    <compiler language="Delphi" extension=".pas"

    type="Borland.Delphi.DelphiCodeProvider,DelphiProv ider" />

    </compilers>

    </compilation>

    </system.web>

    </configuration>




    فايل مورد نظر بايد در دايركتوري مجازي معرفي شده براي وب سرور كه محل قرار گرفتن برنامه هاي ASP.NET ساخته شده با دلفي است قرار بگيرد . براي اين مقصود به وب سرور خود دايركتوري مجازي ديگري معرفي كرده و فايل فوق الذكر را آنجا قرار دهيد .



    مرحله دوم : در محيط ويژوال استوديو ( .. والبته اگر تمايل داريد Notepad !!!!! ) پروژه وب جديدي باز كنيد و يك تكست باكس - يك كليد - يك ليبل روي فرم خود قرار داده و تابع click را به رويداد OnClick كليد فشاري نسبت دهيد . نام تكست باكس را اديت وان و نام ليبل را مسج بگذاريد . فايل حاصل را بصورت زير ويرايش كنيد :



    كد:


    <html>

    <script language="Delphi" runat="server">

    procedure Click(Sender: System.Object; E: EventArgs);

    begin

    Message.Text := Edit1.Text;

    end;

    </script>

    <body>

    <form runat="server">

    <asp:textbox id="Edit1" runat="server"/>

    <asp:button text="Click Me!" OnClick="Click" runat="server"/>

    </form>

    <p><b><asp:label id="Message" runat="server"/></b></p>

    </body>

    </html>




    فايل را با نام Test.AspX ذخيره كرده و اجرا كنيد . ( براي اجرا كرده برنامه هاي ASP.NET بايد IIS و NET. Run Times را قبلا نصب و تنظيم كرده باشيد !

    ... [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] )

    مجموعه كامپايلر دلفي و ASP.NET كد زير را توليد و كامپايل (!) ميكنند :

    كد:


    unit ASP;



    interface



    uses System.Collections, System.Collections.Specialized, System.Configuration,

    System.Text, System.Text.RegularExpressions, System.Web, System.Web.Caching,

    System.Web.SessionState, System.Web.Security, System.Web.UI, System.Web.UI.WebControls,

    System.Web.UI.HtmlControls, System.Globalization;



    var

    editdemo_aspx___autoHandlers: Integer;

    editdemo_aspx___intialized: Boolean = False;

    editdemo_aspx___fileDependencies: System.Collections.ArrayList;

    type

    editdemo_aspx = class(System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState)

    protected

    Edit1: System.Web.UI.WebControls.TextBox;

    __control3: System.Web.UI.WebControls.Button;

    __control2: System.Web.UI.HtmlControls.HtmlForm;

    Message: System.Web.UI.WebControls.Label;

    procedure ButtonClick(Sender: System.Object; E: EventArgs);

    public

    constructor Create;

    function get_AutoHandlers: Integer; override;

    function get_ApplicationInstance: System.Web.HttpApplication; virtual;

    function get_TemplateSourceDirectory: System.String; override;

    procedure set_AutoHandlers(Value: Integer); override;

    protected

    property AutoHandlers: Integer read get_AutoHandlers write set_AutoHandlers;

    property ApplicationInstance: System.Web.HttpApplication read get_ApplicationInstance;

    public

    property TemplateSourceDirectory: System.String read get_TemplateSourceDirectory;

    private

    function __BuildControlEdit1: System.Web.UI.Control;

    function __BuildControl__control3: System.Web.UI.Control;

    function __BuildControl__control2: System.Web.UI.Control;

    function __BuildControlMessage: System.Web.UI.Control;

    procedure __BuildControlTree(__ctrl: System.Web.UI.Control);

    protected

    procedure FrameworkInitialize; override;

    public

    function GetTypeHashCode: Integer; override;

    end;



    implementation


    procedure editdemo_aspx.ButtonClick(Sender: System.Object; E: EventArgs);

    begin

    Message.Text := Edit1.Text;

    end;

    constructor editdemo_aspx.Create;

    var

    dependencies: System.Collections.ArrayList;

    begin

    inherited Create;



    if (ASP.editdemo_aspx___intialized = False) then

    begin

    dependencies := System.Collections.ArrayList.Create;

    dependencies.Add('d:\vslive\editdemo.aspx');

    ASP.editdemo_aspx___fileDependencies := dependencies;

    ASP.editdemo_aspx___intialized := True;

    end;

    Self.Server.ScriptTimeout := 30000000;

    end;



    function editdemo_aspx.get_AutoHandlers: Integer;

    begin

    Result := ASP.editdemo_aspx___autoHandlers;

    end;



    function editdemo_aspx.get_ApplicationInstance: System.Web.HttpApplication;

    begin

    Result := Self.Context.ApplicationInstance as System.Web.HttpApplication;

    end;



    function editdemo_aspx.get_TemplateSourceDirectory: System.String;

    begin

    Result := '/vslive';

    end;



    procedure editdemo_aspx.set_AutoHandlers(Value: Integer);

    begin

    ASP.editdemo_aspx___autoHandlers := Value;

    end;



    function editdemo_aspx.__BuildControlEdit1: System.Web.UI.Control;

    var

    __ctrl: System.Web.UI.WebControls.TextBox;

    begin



    __ctrl := System.Web.UI.WebControls.TextBox.Create;

    Self.Edit1 := __ctrl;

    __ctrl.ID := 'Edit1';

    __ctrl.Width := System.Web.UI.WebControls.Unit.Parse('300px', System.Globalization.CultureInfo.InvariantCulture) ;

    Result := __ctrl;

    end;



    function editdemo_aspx.__BuildControl__control3: System.Web.UI.Control;

    var

    __ctrl: System.Web.UI.WebControls.Button;

    begin



    __ctrl := System.Web.UI.WebControls.Button.Create;

    Self.__control3 := __ctrl;

    __ctrl.Text := 'Click Me!';

    __ctrl.add_Click(Self.ButtonClick);

    Result := __ctrl;

    end;



    function editdemo_aspx.__BuildControl__control2: System.Web.UI.Control;

    var

    __parser: System.Web.UI.IParserAccessor;

    __ctrl: System.Web.UI.HtmlControls.HtmlForm;

    begin



    __ctrl := System.Web.UI.HtmlControls.HtmlForm.Create;

    Self.__control2 := __ctrl;

    __parser := __ctrl as System.Web.UI.IParserAccessor;

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create(''#13#10' '));

    Self.__BuildControlEdit1;

    __parser.AddParsedSubObject(Self.Edit1);

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create(''#13#10' '));

    Self.__BuildControl__control3;

    __parser.AddParsedSubObject(Self.__control3);

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create(''#13#10' '));

    Result := __ctrl;

    end;



    function editdemo_aspx.__BuildControlMessage: System.Web.UI.Control;

    var

    __ctrl: System.Web.UI.WebControls.Label;

    begin



    __ctrl := System.Web.UI.WebControls.Label.Create;

    Self.Message := __ctrl;

    __ctrl.ID := 'Message';

    Result := __ctrl;

    end;



    procedure editdemo_aspx.__BuildControlTree(__ctrl: System.Web.UI.Control);

    var

    __parser: System.Web.UI.IParserAccessor;

    begin

    __parser := __ctrl as System.Web.UI.IParserAccessor;

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create('<html>'#13#10' '));

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create(''#13#10' <body>'#13#10' '));

    Self.__BuildControl__control2;

    __parser.AddParsedSubObject(Self.__control2);

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create(''#13#10' <p><b>'));

    Self.__BuildControlMessage;

    __parser.AddParsedSubObject(Self.Message);

    __parser.AddParsedSubObject(System.Web.UI.LiteralC ontrol.Create('</b></p>'#13#10' </body>'#13#10'</html>'#13#10));

    end;



    procedure editdemo_aspx.FrameworkInitialize;

    begin

    Self.__BuildControlTree(Self);

    Self.FileDependencies := ASP.editdemo_aspx___fileDependencies;

    Self.EnableViewStateMac := True;

    end;



    function editdemo_aspx.GetTypeHashCode: Integer;

    begin

    Result := -764444463;

    end;



    end.



    كد فوق صرفا زماني قابل رويت است كه خطاي دستوري در برنامه دلفي خود داشته باشيد و وب سرور ضمن ارائه Error مربوط سورس كد را نير به شما نشان خواهد داد و در بقيه موارد راهي براي ديدن اين كد وجود ندارد و برنامه شما بصورت اسكريپت AspX كامپايل شده كه به زبان دلفي نوشته شده است قابل استفاده است .



    هر چند هنوز محصول جامع و قابل اطمينان بورلند براي سازگاري محصولاتش با دات نت معرفي نشده است و احتمالا جزئيات موجود در .Net Preview نيز تغيير خواهند كرد اما اميد است توضيحات فوق تصوير نسبتا روشني از آنچه در آينده اي نزديك از تركيب تكنولوژي مايكروسافت و كامپايلر بورلند نصيبتان خواهد شد ايجاد كرده باشد .



    به دو مثال زير نيز توجه كنيد :



    الف)



    يكي از اشيا مفيد همراه ويژوال استوديو براي توسعه وب Calendar ميباشد . يك نمونه از آن را روي فرم وب خود گذاشته و پس از نسبت دادن مقادير مناسب به خواص پايه اي آن كد مناسب دلفي را براي توليد خروجي با عنوان تاريخ انتخاب شده توسط كاربر و حركت به سمت تاريخ مورد نظر كاربر را به شكل زير بنويسيد :



    كد:


    <script language="Delphi" runat="server">

    procedure Calendar1Selected(Sender: System.Object; E: EventArgs);

    begin

    Label1.Text := 'Delphi for .NET says you picked ' + Calendar1.SelectedDate.ToString('D');

    end;



    procedure Button1Click(Sender: System.Object; E:EventArgs);

    begin

    Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);

    Label1.Text := 'Delphi for .NET says you set ' + Calendar1.VisibleDate.ToString('D');

    end;

    </script>



    <body style="font:18pt Verdana">

    <form runat="server">

    <center>

    <h1>Delphi for .NET running in ASP.NET</h1>

    <p>Please pick a date</p>

    <asp:Calendar id="Calendar1" runat="server" ForeColor="#0000FF" BackColor="#FFFFCC"

    OnSelectionChanged="Calendar1Selected">

    <TodayDayStyle Font-Bold="True"/>

    <NextPrevStyle ForeColor="#FFFFCC"/>

    <DayHeaderStyle BackColor="#FFCC66"/>

    <SelectedDayStyle ForeColor="Black" BackColor="#CCCCFF"/>

    <TitleStyle Font-Size="14pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"/>

    <OtherMonthDayStyle ForeColor="#CC9966"/>

    </asp:Calendar>

    <p><asp:TextBox id="Edit1" width=200 runat="server"/>

    <asp:Button text="Set date" id="Button1" OnClick="Button1Click" runat="server" />

    </p>

    <p><asp:Label id="Label1" runat="server"/></p>

    </center>

    </form>

    </body>



    خروجي برنامه ASP.NET اي خواهد بود كه در محيط ويژوال استوديو توليد شده و از كامپوننت تقويم طراحي شده با #C استفاده ميكند و پياده سازي آن توسط دلفي انجام شده است .

    ب)

    اگر آشنائي مقدماتي با محيط ويژوال استوديو داشته باشيد ميدانيد كه اين محيط براي توليد سريع محتواي وب مبتني بر بانكهاي اطلاعاتي كامپوننتهاي خاصي جهت نمايش و ويرايش داده ها دارد .



    يك نمونه از كامپوننت DataGrid را و يك نمونه TextBox را به فرم مثال قبلي ( تقويم ) اضافه كنيد . كد دلفي نوشته شده با بانك اطلاعاتي معروف Northwind موجود در سيستم ارتباط برقرار ميكند . ( بايد اسكوئل سرور 2000 نصب شده باشد ! ) .

    حالا تقويم شما با بانك اطلاعاتي اتصال برقرار كرده و اطلاعات لازم استخراج ميگردد .
    كد:


    <%@Import Namespace="System.Data"%>

    <%@Import Namespace="System.Data.SqlClient"%>



    <script language="Delphi" runat="server">

    const

    ProdName = 'Delphi for .NET';

    DispFields = 'OrderID, CustomerID, ShipName, ShipCity, ShipCountry';



    procedure DateSelected(Sender: System.Object; E: EventArgs);

    begin

    Label1.Text := ProdName + ' says you picked ' + Calendar1.SelectedDate.ToString('D');

    DataGrid1.DataSource := GetOrders(Calendar1.SelectedDate);

    DataGrid1.DataBind;

    end;



    procedure Button1Click(Sender: System.Object; E:EventArgs);

    begin

    Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);

    Label1.Text := ProdName + ' says you set ' + Calendar1.VisibleDate.ToString('D');

    end;



    procedure Button2Click(Sender: System.Object; E:EventArgs);

    begin

    DisplayFields.Text := DispFields;

    end;



    function GetOrders(Date : DateTime) : DataSet;

    var

    Adapter : SqlDataAdapter;

    begin

    Adapter := SqlDataAdapter.Create(

    'select ' + DisplayFields.Text + ' from Orders '+

    'where OrderDate = ''' + date.ToString('d')+'''',

    'Server=(local);Database=Northwind;Trusted_Connect ion=yes');

    Result := DataSet.Create;

    Adapter.Fill(Result);

    end;



    </script>



    <body style="font:18pt Verdana">

    <form runat="server">

    <h1><%=ProdName %> with a Calendar, DataGrid, & SqlClient in ASP.NET</h1>

    <table>

    <tr valign="top"><td>

    <p><b>Pick a date</b></p>

    <asp:Calendar id="Calendar1" runat="server" ForeColor="#0000FF" BackColor="#FFFFCC"

    OnSelectionChanged="DateSelected">

    <TodayDayStyle Font-Bold="True"/>

    <NextPrevStyle ForeColor="#FFFFCC"/>

    <DayHeaderStyle BackColor="#FFCC66"/>

    <SelectedDayStyle ForeColor="Black" BackColor="#CCCCFF"/>

    <TitleStyle Font-Size="14pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"/>

    <OtherMonthDayStyle ForeColor="#CC9966"/>

    </asp:Calendar>

    <p><asp:TextBox id="Edit1" width=150 runat="server"/>

    <asp:Button text="Set date" id="Button1" OnClick="Button1Click" runat="server" />

    </p>

    </td><td valign="top">

    <p><b>Display fields:</b> <asp:TextBox id="DisplayFields"

    text="OrderID, CustomerID, ShipName, ShipCity, ShipCountry" width=500 runat="server"/>

    <asp:Button text="Reset fields" id="Button2" OnClick="Button2Click" runat="server" /></p>

    <aspataGrid id="DataGrid1" runat="server" BorderColor="#FFCC66" ForeColor="#0000FF">

    <HeaderStyle ForeColor="#FFFFCC" BackColor="#990000"/>

    </aspataGrid>

    </td></tr></table>

    <p><asp:Label id="Label1" runat="server"/></p>

    </form>

    </body>


    بخاطر داشته باشيد كه خطوط :
    كد:



    <%@Import Namespace="System.Data"%>

    <%@Import Namespace="System.Data.SqlClient"%>



    درست مانند SqlConnection و ClientDataset محيط دلفي عمل كرده و ارتباط با بانك داده ها و ظرفي براي استخراج داده ها فراهم مي آورند .

    اميد است توضيحات هر چند سطحي فوق ذهنيت مناسبي براي برنامه نويساني كه قصد دارند پاي به عرصه وب بگذارند ايجاد كرده باشد . موفق و مويد و سلامت باشيد

  10. #10
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    به هر دليل امکان دارد يک برنامه نويس دلفي تصميم بگيرد - يا مجبور شود - که با ويژوال بيسيک برنامه بنويسد. در ابتدا اجازه دهيد به مساله اي بپردازيم که شايد همه ما به نحوي با آن برخورد کرده ايم، اسم اين حالت يا احساس را چه ميتوان گذاشت! مشخص نيست، ولي اجازه دهيد ساده بگوييم احساس برتري برنامه نويسان زبانهاي مختلف نسبت به برنامه نويسان ويژوال بيسيک. هر زبان برنامه نويسي برتريها و ضعفهاي مخصوص به خود را دارد. فرض کنيم قرار بر اين باشد که يک بازي نوشته شود، براي يک بازي جدي استفاده از ويژوال بيسيک با توجه به سرعت پايين برنامه هاي کامپايل شده آن منطقي به نظر نمي رسد، خوب در اين حالت از دلفي استفاده ميشود. يا در زماني که بخواهيم با يک زبان برنامه نويسي بر اساس کلاسها و اشياء (Object Oriented) واقعي کار کنيم، واضح است که دلفي يکي از بهترين انتخابهاست و در اين مورد ويژوال بيسيک بازنده حقيقي است (در ويژوال بيسيک هر چند از اشياء استفاده شده است اما مفهوم کلاسها، ارث بري و ... رعايت نشده اند). حال فرض کنيم قرار بر نوشتن برنامه اي ساده براي کار با يک پايگاه داده اي Microsoft Access باشد وبايد خيلي سريع هم آماده شود، کدام را انتخاب کنيم؟ جواب يک برنامه نويس دلفي کاملا واضح است! اما شايد اگر در کنار دلفي با ويژوال بيسيک هم کار کرده باشد نظر ديگري داشته باشد. در هر دو انتخاب ما کار با پايگاههاي داده اي پيش بيني شده است، هر دو نيز از قابليتهاي معيني براي کار برخوردار هستند که براي نوشتن برنامه ما کافي هستند. اگر با هر دو زبان کار کرده باشيد حتما قبول داريد نوشتن اين برنامه با ويژوال بيسيک به مراتب سريعتر از دلفي پايان ميپذيرد. خواهش ميکنم! قبل از اينکه من هدف حمله کفشهاي شما قرار بگيرم چند دقيقه اي تحمل کنيد و به بقيه بحث هم توجه کنيد...
    بد هم نيست اگر يک برنامه نويس دلفي با ويژوال بيسيک هم برنامه نويسي کند، ويژوال بيسيک هم نقاط قوتي دارد که گاهي به برنامه نويس کمک ميکند. بعضي مواقع برنامه ها با ويژوال بيسيک خيلي سريعتر آماده ميشوند و براي برنامه نويسان دلفي يادگيري ويژوال بيسيک آسان است چون به هر حال امکانات و قابليتهاي آن به مراتب کمتر از دلفي است. ويژوال بيسيک يک زبان مبتني بر اشياء به معناي واقعي اينگونه زبانها نيست. ويژوال بيسيک از اشاره گرها استفاده نميکند، و همين آنرا به يک زبان آسان براي کار تبديل کرده است و البته کمي با قابليت! اما در همه برنامه ها وجود اشاره گرها و OOP (Object Oriented Programming) ضروري نيست. VB هم يکي از زبانهاي RAD(Rapid Application Development) است و آماده کردن برنامه ها با آن به نسبت سريعتر از دلفي است. راستي! گاهي نسخه اجرايي برنامه هاي ويژوال بيسيک از معادل دلفي آن کم حجم تر ميشود! البته دليل اينست که مستقل نيستند و يک کتابخانه زمان اجرا با حجمي در حدود يک مگا بايت را يدک ميکشند (مثلا در VB6 فايل msvbvm60.dll) و اين فايل بايد در کامپيوتر مورد نظر براي اجرا باشد.
    در هر حال آشنايي با VB به عنوان يک زبان برنامه نويسي هم سطح دانش شما را در زمينه برنامه نويسي بالا ميبرد و هم ميبينيد که ويژوال بيسيک هم بدک نيست و فقط يک بيسيک تحت ويندوز نيست و به مراتب بيشتر از تغيير دلفي در مقايسه با پاسکال تحت DOS نسبت به بيسيک قديمي تغيير کرده است.


    با VB آشنا شويم

    خوب! ويژوال بيسيک همانگونه که از نام آن پيداست بر پايه BASIC ساخته شده است. اما در واقع بسيار گسترده تر از آن است. اجازه دهيد طرح کلي VB را بررسي کنيم. در VB بر خلاف دلفي بخش مربوط به unitها را نداريم. علاوه بر اين، حتي بخش VAR را براي تعاريف متغيرها نداريم! اين کار در هر جاي برنامه امکان پذير است، حتي اگر تمايل نداريد ميتوانيد اصلا اين کار را انجام ندهيد. مشخص کردن نوع متغير در VB به صورت اتوماتيک انجام ميشود.

    بد نيست يک مثال از قطعه برنامه اي در اين دو زبان را بررسي کنيم. يک تابع:

    Function AddNumbers( Num1: Integer; Num2: Integer): Integer;
    Var
    Num3: Integer;
    Begin
    Num3 := Num1 + Num2;
    Result := Num3;
    End;

    FUNCTION AddNumbers( Num1 AS Integer, Num2 AS Integer) AS Integer
    DIM Num3 AS Integer
    Num3 = Num1 + Num2
    AddNumbers = Num3
    END FUNCTION

    در کد VB علامت ";" در انتهاي دستورات قرار نميگيرد به اين دليل که VB بر اساس خطوط کار ميکند (اصطلاحا Line Based است) يعني دستورات چند خطي ندارد (البته اين مساله راه حلي دارد که از بحث خارج است). نکته دوم و بسيار مهم Begin و End در کد VB مشاهده نميشود و در واقع مجموعه دستورات پشتيباني نميشوند.
    روش معرفي متغيرها در VB که در هر جاي برنامه امکان پذير است به صورت زير ميباشد:

    Dim As


    نکته ديگر اينست که در VB مانند اکثر زبانها و بر خلاف پاسکال از علامت = استفاده ميشود ( نه از := ). همچنين در VB هم - مانند دلفي - مقدار بازگشتي تابع در متغيري با نام خود تابع بازميگردد.
    از بخشهاي مهم يک زبان برنامه نويسي دستورات شرطي آن است. در دلفي دستورات با If … Then شروع شده و دستورات در يک مجموعه که با Begin و End مشخص ميشوند قرار ميگيرند و امکان استفاده از Else هم پيش بيني شده است:

    If a = 1 Then
    begin
    a := 0;
    Text := ‘Hello World’;
    end
    Else
    a := a + 1;

    IF a = 1 THEN
    a = 0
    Text = "Hello World"
    ELSE
    a = a + 1
    END IF

    تفاوت آشکار است، باز هم عدم استفاده از Begin و End در کد VB، همچنين لزوم وجود END IF در پايان مجموعه شرطي و نکته مهم؛ استفاده از علامت (") در VB براي نمايش عبارات متني با جاي (‘) در دلفي. به نظر ميرسد تنها نکته گيج کننده عدم وجود Begin و End باشد. نوبتي هم باشد بايد حلقه ها را بررسي کنيم:

    For i := 1 To 100 Do
    Begin
    a = i * 2;
    Text := ‘Hello World’
    End;

    FOR i = 1 TO 100
    a = i * 2
    Text = "Hello World"
    NEXT i

    اولين تفاوتي که به چشم ميخورد عدم استفاده از Do در قالب دستور FOR در VB است. نکته ديگر مشخص شدن انتهاي حلقه با استفاده از دستور NEXT است. کليه دستورات مابين FOR و NEXT در حلقه قرار دارند. اما در مورد Repeat … Until کافيست از Do … Loop Until استفاده شود!
    اما مساله بعد Procedureهاي دلفي هستند. معادل Procedure دلفي در VB از SUB(Subroutine) استفاده ميشود. و باقي مثل تابعي است که در بالا ديديم و در پايان آن هم از END SUB استفاده ميشود.
    در توابع VB نکته مهم اينست که متغير Result نداريم و بايد حتما از نام همان تابع براي بازگرداندن مقدار استفاده کرد.
    در مورد آرگومانهاي توابع و SUBها بايد دقت کرد به جاي ( که در دلفي استفاده ميشود، اينجا بايد (,) را به کار برد و باقي مثل تعريف متغير در VB بدون استفاده از DIM است.
    شايد بد نباشد مثالي از SUB هم ببينيد:

    SUB MakeSound
    Beep
    END SUB

    به نظر ميرسد مسائل اساسي بررسي شدند، باقي به عهده خودتان!
    اما نکات زير را به خاطر داشته باشيد:
    از ( در انتهاي خطوط استفاده نکنيد. همانگونه که گفته شد VB به تغيير خط حساس است، يعني عبارت زير نيز ايجاد خطا ميکند:

    IF (a = 1) AND (b = 2) AND (c = 3)
    AND (d = 4) AND (e = 5) THEN
    Beep
    END IF

    و بايد به صورت زير باشد:

    IF (a = 1) AND (b = 2) AND (c = 3) AND (d = 4) AND (e = 5) THEN
    Beep
    END IF

    البته همانطور که گفته شد براي ايجاد دستورات چند خطي راه حلي در نظر گرفته شده است و آن استفاده از (_) (Under-line/Underscore) است:

    IF (a = 1) AND (b = 2) AND (c = 3)_
    AND (d = 4) AND (e = 5) THEN
    Beep
    END IF

    فراموش نکنيد در VB امکان استفاده از مجموعه دستورات را نداريد و تنها مجموعه ها عبارتند از:
    IF…END IF, FOR…NEXT, DO…LOOP UNTIL, DO…LOOP WHILE, FUNCTION…END FUNCTION, SUB…END SUB

    خوب فکر کنم کافي باشد، اگر علاقه مند شديد کتب متعدد ويژوال بيسيک راهنماي خوبي براي شما هستند...
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]


    کيفيت مقاله :

صفحه 1 از 4 1234 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •