ghabil
پنج شنبه 09 آذر 1385, 01:20 صبح
اینتراوب محصول شرکت Atozed هست که هدف اون ایجاد صفحات وب با داشتن حداقل اطلاعات از برنامه نویسی تحت وب بیان میکنند ، اما برای افراد حرفه ای نیز ابزاری کارآمد و بسیار منعطف می باشد.
ورژن فعلی اینتراوب 8 میباشد اما بزودی ورژن 9 با پشتیانب از Ajax به بازار ارائه خواهد شد و در حالا حاضر نیز ورژن 9 ببصورت Beta ریلیز شده.
ورژنی که با دلفی 7 ارائه شد ورژن 5 بود که برای زمان خودش بسیار جلب بود اما ار اون زمان اینتراوب بشدت توسعه پیدا کرده و امکانات بسیار زیادی در اون اضافه شده.
متاسفانه آپدیت سایر ورژنهای اینتراوب برای کاربران رایگان نمیباشد و باید خریداری بشه.
نسخه 7 اینتراوب نسخه بسیار فدرتمند و کارآمدی هست که قابلیتهای اصلی که به اون اضافه شده ساپورت HTML3.2 (برای PDA ها) و Partial Update میباشد که تا حد ریادی سرعت لود صفحات رو افزایش میده (جالبه توجه که این امر حداقل 1 سال قبل از مطرح شدن طرح Ajax طراحی شده) .
امکانی که توجه برنامه نویسان دلفی رو به اینتراوب جذب کرده اینه که شما زمان برنامه نویسی با دلفی کاملا احساس میکنید که دارید کد برای ویندوز مینویسید و به هیچ وجه درگیر مسائل برنامه نویسی تحت وب نمیشوید.
ایجاد برنامه با اینتراوب :
برای ایجاد برنامه با اینتراوب باید از ویزاد اولیه دلفی استفاده کنید: اینتراوب امکان ایجاد ISAPI برای IIS همینطور DS,DSO برای آپاچی و ایجاد برنامه بصورت StandAlone رو داره که تمامی این حالت به راحتی قابل تبدیل به یکدیگر می باشند و با توجه به این مسئله و امکاناتی که حالت StandAlone در زمان نوشتن برنامه اراده میکنه (امکان دیباگ بدون دردسر و عدم وجود دردسرهای Unload کردن ) حالت ایده آل طراحی برنامه در حالت Stand Alone هست ، اما با توجه به اینکه حالت Stand Alone به سختی قابل هاست کردن می باشد میتوان برنامه رو در حالت StandAlone نوشت و پس از پایان به یک ISAPI تبدیل کرد. (اینکه این امکان چقدر لذت بخشه برای کسانی که قدیمها برنامه تحت وب مینوشتند کاملا ملموسه)
همچنین اینتراوب امکان ترکیب شدن با وب اسنپ رو هم داره که در بعضی شرایط واقعا مناسبه (مثلا برای نوشتن وب سایتهای ساده)
از دیگر امکانات اینتراوب میتوان به Session Managment کاملش اشاره کرد که کاملا تمامی نیازهای برنامه نویسی رو پوشش میده . در این زمینه باید بیشتر (عملی ) توضیح بدم ...
اینتراوب برای Session Managment سه حالت URL, Coockiesو Hidden Fields رو ساپورت میکنه که اینها رو م توضیح خواهم داد .
قبل از اینکه انشاا.. عملی توضیح دادن امکانات اینتراوب رو شروع کنم بهتره که یکمی خودتون باهاش کار بکنید و امکاناتش رو ببینید ...
در ابتدای کار یک برنامه StandAlone اینتراوب ایجاد کنید....
حالا بسته به ورژن اینتراوبی که استفاده میکنید به جز یونیت پروژه 3 یونیت و 3 فرم (یا دو یونیت و 2 فرم ایجاد میشه)
1) IWServerControler : یونیت تنظیمات برنامه میباشد که بسیاری از تنظیمات اساسی سرور برنامه ما در این یونیت قرار داره (برای کسانی که asp.net آشنایی دارند این یونیت معادل WebConfig میباشد.) اگر پراپرتیهای این آبجکت رو تغییر دادین و سراغ پورت رفتین (پورتی که وب سرور StandAlone روی اون پاسخ میده) دقت کنید که اگر از نسخه ای استفاده میکنید که Trial هست؛ پورت بدون توجه به اونچه که شما تعیین میکنید بصورت رندم انتخاب خواهد شد ، که البته با رجیستر کردن برنامه این مشکل حل میشه.
بد نیست تا اینجایید یک نگاهی هم به SupportedBrowsers بکنید (تعیین این پراپرتی موجب میشه کدهای تولید شده برای بروسرهای مختلف قابل اجرا باشه)
2) IWUserSession : این آبجکت گلبال شما می باشد و در واقع بخش قابل استفاده برنامه نویس از آبجکت اصلی برنامه. (همون Session در ASP) بسیار نقش حیاتی در برنامه هایی که بعدا خواهید نوشت داره و در مسالهای ما مورد استفاده قرار خواهد گرفت.
توضیح مهم :
در برنامه نویسی تحت وب چون Applicationسرور شما برنامه های شمارو بصورت MultiThread اجرا میکنه پس تمام کد شما باید ThreadSafe باشه که این اولین نکتش یعنی Global Variable نداریم و اگر بخواهیم داشته باشیم باید Syncronize بشه به همین خاطر ما هرآنچه رو که بصورت گلوبال نیاز داریم در UserSession خواهیم گذاشت.
توضیح : در نسخ اولیه اینتراوب UserSession بصورت جداگانه وجود نداره و تا جایی که یادمه توی ServerController تعریف میشه .
3) IWUnit{IWForm1} : بک فرم از نوع IWAppForm می باشد که درواقع معادل وبی یک TForm می باشد. شما میتونید روی این فرم هر کدوم از کامپونتهای اینتراوب رو قرار بدین و چون Layout در حالت پبشفرض بصورت Absolute هست طراحی صفحات بسیار شبیه طراحی فرمهای دلفی خواهد شد .
برای اینکه حوصلتون سر نره بریم سراغ :
Hello Intrawb World
یک کامپونت IWLabel یک IWEdit و یک IWButton رو فرم قرار بدین :
درست مثل دلفی Caption لیبل رو مثلا بزارید Please enter your name بعد IWEdit رو بزارید جلوش و Button رو هم کنارشون ، همچنان عین دلفی : روی Button دوبارکلیک کنید تا Event کلیکش ساخته بشه : حالا خیلی ساده توی OnClick بنویسید
Webapplication.ShowMessage('Welcome to IW World ' + IWEdit1.Text);
برنامه رو اجرا کنید و وقتی که فرم سرور اومد دوباره F9 بزنید ...
همینطوری که میبینید کار با اینتراوب خیلی راحته و درست عین نوشتن کدهای دلفی میمونه(البته اولش اینطوریه) .
توی این مثال شما کدتون رو به دلفی نوشتید امام IW به جاوا اسکریپت تبدیلش کرد.
حالا به همین مثال یک Button دیگه اضافه کنیه ، اما اینبار بجای اینکه روش دبل کلیک کنید پراپرتی ScriptEvents رو پیدا کنید و OnClickش رو انتخاب کنید :
حالا توش بنیوسید
window.alert('welcome' + IWEDIT1IWCL.value);
این بار همون کار اما با استفاده از جاوااسکریپت انجام شد .
البته این روش دوم در این مثال ساده ما به روش اول خیلی ارجحیت داره اما اینا فقط نمونه هستند برای کارهای پیچیده ای که قرار هست بعدا انشاا.. انجام بدین و اونموقع از ترکیب هردوحالت استفاده خواهیم کرد.
الان وقت خوبیه که یکمی کامپونتهای Standardش رو تست کنید امام فعلا سراغ ساختن فرم دوم یا کار با دیتا نریند چون خودشون نکته دارند.
برنامه نویسی با دیتابیس
وقتی که سراغ برنامه نویسی تحت وب با اینتراوب میرید شاید باورتون نشه که چقدر ساده و شبیه دلفی هست ، در تب IWData معادل اکثر کامپونتهای ویندوز بیس دلفی هست و دقیقا به همون روشهای سابق ایجاد میشند و قابل استفاده هستند.
اما شاید اولین مشکلی که بهش برخورد خواهید کرد این باشه که زمانی که برنامه رو اجرا میکنید ، بجای اومدن برنامه با خطای Coinitilze has not been called مواجه میشوید! راه حل خیلی سادست براحتی برید سراغ ServerController و مقدار پراپرتی Cominitilzation رو به ciMultiThread تغییر بدید. اگر قبلا ISAPI درست کرده باشید حتما این کار رو با فراخوانی Coinitilize انجام داده اید.
شاید IWDBGrid یکی از قویترین کامپونتهای اینتراوب باشه که واقعا امکانات جالبی در اختیارتون قرار میده ، پیشنهاد میکنم که حتما به پراپرتیهاش یک نگاهی بندازید خوشبختانه اکثرا معلوم هسن که چی هستند ، اما زمانی که خوب با اونها آشنا شدید بد نیست نگاهی هم به Eventهاش و بخصوص Event قدرتمند OnRenderCell هست ، توی این ایونت دسترسی مستقیم به تک تک خانه های گریدتون دارید و هر کاری که بخواهید هم با کد نویسی پاسکال و هم با درج HTML در داخل اطلاعات میتونید انجام بدید .
مثلا کد زیر توی یک فیلد که مثلا URL یکسری عکس هست بجای اینکه URL ها رو نشون بده عکسهارو نشون میده :
procedure TIWForm2.IWDBGrid1RenderCell(ACell: TIWGridCell; const ARow,
AColumn: Integer);
begin
if (ARow > 0) and (AColumn = 3) then
ACell.Text := '<img src ="' + ACell.Text + '">';
end;
ARow > 0 برای اینه که روی Header و Footer این تغییرات اتفاق نیفته و AColumn = 3 مثلا یعنی ستون 4م ستونی هست که مقدارش آدرس عکسهاست.
حالا همین کد رو اینطوری مینویسیم :
if (ARow > 0) and (AColumn = 3) then
begin
ACell.Control := TIWImageFile.Create(IWDBGrid1);
with ACell.Control as TIWImageFile do
begin
ImageFile.URL := ACell.Text;
OnClick = ImageOnClick;
end;
end;
این بار آبجکت معادل این عکس هم در حافظه وجود داره و در واقع کدهای لازم برای ایجاد معادل HTML اون رو اینتراوب میسازه ضمنا به Event کلیک عکس نیز یک روال پاسکالی متصل میشه تا درصورت کلکی کاربر روی اون ، روال اجرا بشه . حالا مثلا اگر بجای این آبجکت یک IWEdit گذاشته بودیم اونوقت میتونستیم نوشته های کاربر در اون رو هم در کد پاسکال دریافت کنیم .
فرم دوم
برای ساحتن فرم دوم کافیه از New>Intraweb>AppForm رو انتخاب کنید تا مثل فرمهای دلفی یک فرم جدید ساخته بشه. اما اگر دقت کنید در کدش میبینید که متغیر گلوبالی که دلفی بصورت پیشفرض برای فرمهاش میگیره (مثلا Form1) اینجا وجود نداره و مثلا نمیتونید بنویسید Form2.show; دلیلش رو هم قبلا گفتم ;"استفاده از متغیرهی گلوبال threadSafe نیست".
برای نمایش فرمها اول باید یک Instance از اونارو بسازیم و بعد اون رو نمایش بدیم یعنی مثلا یک چیزی اینجوری :
WebApplicaiton.ActiveForm.Releas;
TIWFrom2.Create(webApplication).Show;
خط اول موجب آزاد شدن حافظه گرفته شده برای فرمی که در حال حاضر کاربر در حال دیدنش هست میشه ، دقت داشته باشید در IW برای فرمها بجای Free باید از دستور Releas استفاده کنید تا تمام حافظه آزاد بشه. اما خط دوم یک آبجکت جدید از فرم را میسازه و نمایش میده.
اما شاید گاهی اوقا لازم باشه که مثلا یک فرم رو نمایش بدیم بعد فرم دیگری رو نمایش بدیم و دوباره به همون آبجکتی که توی فرم اول داریم برگردیم ، اونوقته که باید بریم سراغ UserSession:
مثلا میتونیم توی UserSession یک پراپرتی Public به نام MyForm: TIWAppForm تعریف کنیم و کدمون رو اینطوری بنویسیم :
IWUserSession.Myform := TIwForm2.Create(WebApplication);
و بعد هر موقعه که لازم بود بریم سراغ این فرم میتونیم بنویسیم :
IWUserSession.MyFrom.Show;
البته IW در نسخه های بالاتر خودش آرایه ای از فرمهای ایجاد شده رو نگهداری میکنه و با کمک همین آرایه در ورژنهای بالاتر از دکمه Back در Browser هم پشتیبانی میکنه ...
طراحی Laouyt و Template ها
یکی از لذت بخشترین بخشهای برنامه نویسی با IW همین طراحی Layoutها با استفاده از Template ها هست که امکانات بسیار جالب و مفیدی در اختیار برنامه نویس قرار میده البته این امکلن قبلا تا حدودی به همین شکل در WebSnap اراده شده بود اما در اینتراوب کاملتر شده و از اونجایی که امکانات بسیار بیشتری رو اینتراوب نسبت به وب اسنپ ارائه میکنه برای همین بیشتر به چشم میاد.
این دفعه اول یک مثال میزنم بعد توضیح میدم :
بعد از ایجاد یک برنامه جدید و ذخیره اون ، برنامه رو Save کنید ، حالا به سراغ فلدری که برنامه رو در اون ذخیره کردید برید و یک فلدر به نام Templates ایجاد کنید (در ورژنهای بالاتر IW نام این فلدر انتخابی میباشد) حالا مثلا FrontPage رو باز کنید و مثلا یک صفحه Log in طارحی کنید ، به هرشکلی که دوست دارید فقط جای EditBox کد کاربری و پسورد و دکمه تایید رو خالی بزارید.
زمانی که کار طراحیتون تموم شد در جای EdiotBox کد کاربری این متن رو بنویسید {%EdUserName%} و در جای کلمه عبور بنویسید {%EdPassword%} و در جای دکمه تایید بنویسید {%btOK%} بعد فایل طراحی شده رو مثلا با نام MainFrom.HTML در فلدر Templates ذخیره کنید . حالا به سراغ برنامه در دلفی برید اسم فرم رو بکنید MainForm، دو تا IWEdit روی صفحه بزارید با نامهای edUserNAmeو edPassword و یک دکمه با نام btOK بعد از تب IWControls یک TIWTemplateProcessor بر روی فرم بزارید و توب پراپرتیهای فرم هم مقدار LayoutMgr رو به همین TemplateProcessor مربوط بکنید.
کارمون تموم شد ، حالا IW برنامه رو اجرا خواهد کرد و کنترلهای خودش رو در داخل طارحی HTML ما اضافه خواهد کرد.
واقعا دلپذیر و لذت بخش هست ، فکرش رو بکنید Layoutها رو کاملا شخص دیگری حتی بعد از اینکه شما برنامه رو نوشتید میتونه طراحی بکنه و شما اصلا نگران قیافه برنامتون نخواهید بود، یک چیز جالب تر هرموقع که لازم باشه میشه قیافه صفحات رو عوض کرد بدون اینکه نیازی به دست زدن به کد و یا دوباره کامپایل کردن باشه ، یا حتی برنامه شما میتونه Skinها مختلفی داشته باشه....
پایان
ورژن فعلی اینتراوب 8 میباشد اما بزودی ورژن 9 با پشتیانب از Ajax به بازار ارائه خواهد شد و در حالا حاضر نیز ورژن 9 ببصورت Beta ریلیز شده.
ورژنی که با دلفی 7 ارائه شد ورژن 5 بود که برای زمان خودش بسیار جلب بود اما ار اون زمان اینتراوب بشدت توسعه پیدا کرده و امکانات بسیار زیادی در اون اضافه شده.
متاسفانه آپدیت سایر ورژنهای اینتراوب برای کاربران رایگان نمیباشد و باید خریداری بشه.
نسخه 7 اینتراوب نسخه بسیار فدرتمند و کارآمدی هست که قابلیتهای اصلی که به اون اضافه شده ساپورت HTML3.2 (برای PDA ها) و Partial Update میباشد که تا حد ریادی سرعت لود صفحات رو افزایش میده (جالبه توجه که این امر حداقل 1 سال قبل از مطرح شدن طرح Ajax طراحی شده) .
امکانی که توجه برنامه نویسان دلفی رو به اینتراوب جذب کرده اینه که شما زمان برنامه نویسی با دلفی کاملا احساس میکنید که دارید کد برای ویندوز مینویسید و به هیچ وجه درگیر مسائل برنامه نویسی تحت وب نمیشوید.
ایجاد برنامه با اینتراوب :
برای ایجاد برنامه با اینتراوب باید از ویزاد اولیه دلفی استفاده کنید: اینتراوب امکان ایجاد ISAPI برای IIS همینطور DS,DSO برای آپاچی و ایجاد برنامه بصورت StandAlone رو داره که تمامی این حالت به راحتی قابل تبدیل به یکدیگر می باشند و با توجه به این مسئله و امکاناتی که حالت StandAlone در زمان نوشتن برنامه اراده میکنه (امکان دیباگ بدون دردسر و عدم وجود دردسرهای Unload کردن ) حالت ایده آل طراحی برنامه در حالت Stand Alone هست ، اما با توجه به اینکه حالت Stand Alone به سختی قابل هاست کردن می باشد میتوان برنامه رو در حالت StandAlone نوشت و پس از پایان به یک ISAPI تبدیل کرد. (اینکه این امکان چقدر لذت بخشه برای کسانی که قدیمها برنامه تحت وب مینوشتند کاملا ملموسه)
همچنین اینتراوب امکان ترکیب شدن با وب اسنپ رو هم داره که در بعضی شرایط واقعا مناسبه (مثلا برای نوشتن وب سایتهای ساده)
از دیگر امکانات اینتراوب میتوان به Session Managment کاملش اشاره کرد که کاملا تمامی نیازهای برنامه نویسی رو پوشش میده . در این زمینه باید بیشتر (عملی ) توضیح بدم ...
اینتراوب برای Session Managment سه حالت URL, Coockiesو Hidden Fields رو ساپورت میکنه که اینها رو م توضیح خواهم داد .
قبل از اینکه انشاا.. عملی توضیح دادن امکانات اینتراوب رو شروع کنم بهتره که یکمی خودتون باهاش کار بکنید و امکاناتش رو ببینید ...
در ابتدای کار یک برنامه StandAlone اینتراوب ایجاد کنید....
حالا بسته به ورژن اینتراوبی که استفاده میکنید به جز یونیت پروژه 3 یونیت و 3 فرم (یا دو یونیت و 2 فرم ایجاد میشه)
1) IWServerControler : یونیت تنظیمات برنامه میباشد که بسیاری از تنظیمات اساسی سرور برنامه ما در این یونیت قرار داره (برای کسانی که asp.net آشنایی دارند این یونیت معادل WebConfig میباشد.) اگر پراپرتیهای این آبجکت رو تغییر دادین و سراغ پورت رفتین (پورتی که وب سرور StandAlone روی اون پاسخ میده) دقت کنید که اگر از نسخه ای استفاده میکنید که Trial هست؛ پورت بدون توجه به اونچه که شما تعیین میکنید بصورت رندم انتخاب خواهد شد ، که البته با رجیستر کردن برنامه این مشکل حل میشه.
بد نیست تا اینجایید یک نگاهی هم به SupportedBrowsers بکنید (تعیین این پراپرتی موجب میشه کدهای تولید شده برای بروسرهای مختلف قابل اجرا باشه)
2) IWUserSession : این آبجکت گلبال شما می باشد و در واقع بخش قابل استفاده برنامه نویس از آبجکت اصلی برنامه. (همون Session در ASP) بسیار نقش حیاتی در برنامه هایی که بعدا خواهید نوشت داره و در مسالهای ما مورد استفاده قرار خواهد گرفت.
توضیح مهم :
در برنامه نویسی تحت وب چون Applicationسرور شما برنامه های شمارو بصورت MultiThread اجرا میکنه پس تمام کد شما باید ThreadSafe باشه که این اولین نکتش یعنی Global Variable نداریم و اگر بخواهیم داشته باشیم باید Syncronize بشه به همین خاطر ما هرآنچه رو که بصورت گلوبال نیاز داریم در UserSession خواهیم گذاشت.
توضیح : در نسخ اولیه اینتراوب UserSession بصورت جداگانه وجود نداره و تا جایی که یادمه توی ServerController تعریف میشه .
3) IWUnit{IWForm1} : بک فرم از نوع IWAppForm می باشد که درواقع معادل وبی یک TForm می باشد. شما میتونید روی این فرم هر کدوم از کامپونتهای اینتراوب رو قرار بدین و چون Layout در حالت پبشفرض بصورت Absolute هست طراحی صفحات بسیار شبیه طراحی فرمهای دلفی خواهد شد .
برای اینکه حوصلتون سر نره بریم سراغ :
Hello Intrawb World
یک کامپونت IWLabel یک IWEdit و یک IWButton رو فرم قرار بدین :
درست مثل دلفی Caption لیبل رو مثلا بزارید Please enter your name بعد IWEdit رو بزارید جلوش و Button رو هم کنارشون ، همچنان عین دلفی : روی Button دوبارکلیک کنید تا Event کلیکش ساخته بشه : حالا خیلی ساده توی OnClick بنویسید
Webapplication.ShowMessage('Welcome to IW World ' + IWEdit1.Text);
برنامه رو اجرا کنید و وقتی که فرم سرور اومد دوباره F9 بزنید ...
همینطوری که میبینید کار با اینتراوب خیلی راحته و درست عین نوشتن کدهای دلفی میمونه(البته اولش اینطوریه) .
توی این مثال شما کدتون رو به دلفی نوشتید امام IW به جاوا اسکریپت تبدیلش کرد.
حالا به همین مثال یک Button دیگه اضافه کنیه ، اما اینبار بجای اینکه روش دبل کلیک کنید پراپرتی ScriptEvents رو پیدا کنید و OnClickش رو انتخاب کنید :
حالا توش بنیوسید
window.alert('welcome' + IWEDIT1IWCL.value);
این بار همون کار اما با استفاده از جاوااسکریپت انجام شد .
البته این روش دوم در این مثال ساده ما به روش اول خیلی ارجحیت داره اما اینا فقط نمونه هستند برای کارهای پیچیده ای که قرار هست بعدا انشاا.. انجام بدین و اونموقع از ترکیب هردوحالت استفاده خواهیم کرد.
الان وقت خوبیه که یکمی کامپونتهای Standardش رو تست کنید امام فعلا سراغ ساختن فرم دوم یا کار با دیتا نریند چون خودشون نکته دارند.
برنامه نویسی با دیتابیس
وقتی که سراغ برنامه نویسی تحت وب با اینتراوب میرید شاید باورتون نشه که چقدر ساده و شبیه دلفی هست ، در تب IWData معادل اکثر کامپونتهای ویندوز بیس دلفی هست و دقیقا به همون روشهای سابق ایجاد میشند و قابل استفاده هستند.
اما شاید اولین مشکلی که بهش برخورد خواهید کرد این باشه که زمانی که برنامه رو اجرا میکنید ، بجای اومدن برنامه با خطای Coinitilze has not been called مواجه میشوید! راه حل خیلی سادست براحتی برید سراغ ServerController و مقدار پراپرتی Cominitilzation رو به ciMultiThread تغییر بدید. اگر قبلا ISAPI درست کرده باشید حتما این کار رو با فراخوانی Coinitilize انجام داده اید.
شاید IWDBGrid یکی از قویترین کامپونتهای اینتراوب باشه که واقعا امکانات جالبی در اختیارتون قرار میده ، پیشنهاد میکنم که حتما به پراپرتیهاش یک نگاهی بندازید خوشبختانه اکثرا معلوم هسن که چی هستند ، اما زمانی که خوب با اونها آشنا شدید بد نیست نگاهی هم به Eventهاش و بخصوص Event قدرتمند OnRenderCell هست ، توی این ایونت دسترسی مستقیم به تک تک خانه های گریدتون دارید و هر کاری که بخواهید هم با کد نویسی پاسکال و هم با درج HTML در داخل اطلاعات میتونید انجام بدید .
مثلا کد زیر توی یک فیلد که مثلا URL یکسری عکس هست بجای اینکه URL ها رو نشون بده عکسهارو نشون میده :
procedure TIWForm2.IWDBGrid1RenderCell(ACell: TIWGridCell; const ARow,
AColumn: Integer);
begin
if (ARow > 0) and (AColumn = 3) then
ACell.Text := '<img src ="' + ACell.Text + '">';
end;
ARow > 0 برای اینه که روی Header و Footer این تغییرات اتفاق نیفته و AColumn = 3 مثلا یعنی ستون 4م ستونی هست که مقدارش آدرس عکسهاست.
حالا همین کد رو اینطوری مینویسیم :
if (ARow > 0) and (AColumn = 3) then
begin
ACell.Control := TIWImageFile.Create(IWDBGrid1);
with ACell.Control as TIWImageFile do
begin
ImageFile.URL := ACell.Text;
OnClick = ImageOnClick;
end;
end;
این بار آبجکت معادل این عکس هم در حافظه وجود داره و در واقع کدهای لازم برای ایجاد معادل HTML اون رو اینتراوب میسازه ضمنا به Event کلیک عکس نیز یک روال پاسکالی متصل میشه تا درصورت کلکی کاربر روی اون ، روال اجرا بشه . حالا مثلا اگر بجای این آبجکت یک IWEdit گذاشته بودیم اونوقت میتونستیم نوشته های کاربر در اون رو هم در کد پاسکال دریافت کنیم .
فرم دوم
برای ساحتن فرم دوم کافیه از New>Intraweb>AppForm رو انتخاب کنید تا مثل فرمهای دلفی یک فرم جدید ساخته بشه. اما اگر دقت کنید در کدش میبینید که متغیر گلوبالی که دلفی بصورت پیشفرض برای فرمهاش میگیره (مثلا Form1) اینجا وجود نداره و مثلا نمیتونید بنویسید Form2.show; دلیلش رو هم قبلا گفتم ;"استفاده از متغیرهی گلوبال threadSafe نیست".
برای نمایش فرمها اول باید یک Instance از اونارو بسازیم و بعد اون رو نمایش بدیم یعنی مثلا یک چیزی اینجوری :
WebApplicaiton.ActiveForm.Releas;
TIWFrom2.Create(webApplication).Show;
خط اول موجب آزاد شدن حافظه گرفته شده برای فرمی که در حال حاضر کاربر در حال دیدنش هست میشه ، دقت داشته باشید در IW برای فرمها بجای Free باید از دستور Releas استفاده کنید تا تمام حافظه آزاد بشه. اما خط دوم یک آبجکت جدید از فرم را میسازه و نمایش میده.
اما شاید گاهی اوقا لازم باشه که مثلا یک فرم رو نمایش بدیم بعد فرم دیگری رو نمایش بدیم و دوباره به همون آبجکتی که توی فرم اول داریم برگردیم ، اونوقته که باید بریم سراغ UserSession:
مثلا میتونیم توی UserSession یک پراپرتی Public به نام MyForm: TIWAppForm تعریف کنیم و کدمون رو اینطوری بنویسیم :
IWUserSession.Myform := TIwForm2.Create(WebApplication);
و بعد هر موقعه که لازم بود بریم سراغ این فرم میتونیم بنویسیم :
IWUserSession.MyFrom.Show;
البته IW در نسخه های بالاتر خودش آرایه ای از فرمهای ایجاد شده رو نگهداری میکنه و با کمک همین آرایه در ورژنهای بالاتر از دکمه Back در Browser هم پشتیبانی میکنه ...
طراحی Laouyt و Template ها
یکی از لذت بخشترین بخشهای برنامه نویسی با IW همین طراحی Layoutها با استفاده از Template ها هست که امکانات بسیار جالب و مفیدی در اختیار برنامه نویس قرار میده البته این امکلن قبلا تا حدودی به همین شکل در WebSnap اراده شده بود اما در اینتراوب کاملتر شده و از اونجایی که امکانات بسیار بیشتری رو اینتراوب نسبت به وب اسنپ ارائه میکنه برای همین بیشتر به چشم میاد.
این دفعه اول یک مثال میزنم بعد توضیح میدم :
بعد از ایجاد یک برنامه جدید و ذخیره اون ، برنامه رو Save کنید ، حالا به سراغ فلدری که برنامه رو در اون ذخیره کردید برید و یک فلدر به نام Templates ایجاد کنید (در ورژنهای بالاتر IW نام این فلدر انتخابی میباشد) حالا مثلا FrontPage رو باز کنید و مثلا یک صفحه Log in طارحی کنید ، به هرشکلی که دوست دارید فقط جای EditBox کد کاربری و پسورد و دکمه تایید رو خالی بزارید.
زمانی که کار طراحیتون تموم شد در جای EdiotBox کد کاربری این متن رو بنویسید {%EdUserName%} و در جای کلمه عبور بنویسید {%EdPassword%} و در جای دکمه تایید بنویسید {%btOK%} بعد فایل طراحی شده رو مثلا با نام MainFrom.HTML در فلدر Templates ذخیره کنید . حالا به سراغ برنامه در دلفی برید اسم فرم رو بکنید MainForm، دو تا IWEdit روی صفحه بزارید با نامهای edUserNAmeو edPassword و یک دکمه با نام btOK بعد از تب IWControls یک TIWTemplateProcessor بر روی فرم بزارید و توب پراپرتیهای فرم هم مقدار LayoutMgr رو به همین TemplateProcessor مربوط بکنید.
کارمون تموم شد ، حالا IW برنامه رو اجرا خواهد کرد و کنترلهای خودش رو در داخل طارحی HTML ما اضافه خواهد کرد.
واقعا دلپذیر و لذت بخش هست ، فکرش رو بکنید Layoutها رو کاملا شخص دیگری حتی بعد از اینکه شما برنامه رو نوشتید میتونه طراحی بکنه و شما اصلا نگران قیافه برنامتون نخواهید بود، یک چیز جالب تر هرموقع که لازم باشه میشه قیافه صفحات رو عوض کرد بدون اینکه نیازی به دست زدن به کد و یا دوباره کامپایل کردن باشه ، یا حتی برنامه شما میتونه Skinها مختلفی داشته باشه....
پایان