تبلیغات
برنامه نویسی و الکترونیک - دریافت سورس صفحه یک آدرس اینترنتی ( دلفی )
 
منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_M


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش DataBase

الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی


لینك دوستان
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: برنامه نویسی و طراحی وب
:: خرید ساعت دیواری
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین

 : " دریافت سورس صفحه یک آدرس اینترنتی ( دلفی ) " :
 
با سلام ...
در این مقاله ی کوتاه قصد داریم با استفاده از کامپوننت IdHTTP در دلفی سورس صفحه ی یک آدرس اینترنتی رو بدست بیاریم ...
برای این کار به یک کامپوننت IdHTTP و یک Memo برای نمایش سورس و یک دکمه ( ترجیحا BitBtn ! ) نیاز داریم ، این ابزارها رو بر روی فرم قرار بدید و در رویداد OnClick دکمه کد زیر رو بنویسید :

Memo1.Lines.Text := IdHTTP1.Get('http://www.DelphiPlus.com');

به همین راحتی !   ، همونطور که در بالا مشاهده می کنید ، کامپوننت IdHttp تابعی به نام Get داره که با گرفتن آدرس اینترنتی به عنوان ورودی ، سورس صفحه ی اون رو به صورت String بر می گردونه ...
اما مقاله ی ما در اینجا تمام نمیشه  ! ، اگر کد بالا رو اجرا کنید ، مخصوصا برای آدرسهایی که صفحاتشون شلوغ هست ، زمان زیادی ( در حد چند ثانیه ) طول میکشه که سورس دریافت بشه و در این مدت هم برنامه هنگ می کنه ، می خوایم به وسیله ی یک Thread این مشکل رو حل کنیم ...
امیدوارم با Thread ها آشنایی داشته باشید ، اگر آشنایی ندارید مقاله ای که در سایت برنامه نویس قرار داره رو بخونید ...

اگر با Thread ها آشنا باشید حتما می دونید که در این مورد Synchronize کردن مشکلی از ما حل نمی کنه ! ، متد Synchronize مربوط به Thread زمانی مفید هست که ما با خصوصیات ظاهری برنامه یا GUI اون کار داشته باشیم ، و بخوایم در Thread خودمون اونها رو تغییر بدیم ، اما در اینجا ما باید سورس یک صفحه ی اینترنتی رو بگیریم و کاری به ظاهر برنامه خودمون نداریم !
خوب ، باید برای Thread خودمون یک IdHTTP در نظر بگیریم و به وسیله ی اون سورس صفحه رو بدست بیاریم ، در ابتدا یک Thread به صورت زیر تعریف می کنیم :

type
 MyThread = class(TThread)
  IH   : TIdHTTP;
  PBar : TProgressBar;
  Src  : TMemo;
 protected
  procedure Execute; override;
 public
  Source : WideString;
  procedure SetObjects(IdH : TIdHTTP; PB : TProgressBar; SrcMemo : TMemo);
 end;

به تعریف Thread دقت کنید ، برای Thread سه شیء در نظر گرفتیم ، یکی IdHTTP که عملیات دریافت سورس رو انجام میده ، یک ProgressBar که وضعیت دریافت رو نشون میده و یکی هم Memo برای نمایش خروجی سورس صفحه ...
در قسمت Protected متد Execute مربوط به Thread رو تعریف کردیم ، و در قسمت Public هم یک متد به نام SetObjects تعریف شد که وظیفش مرتبط کردن اشیاء روی فرم با اشیاء مربوط به Thread هست ...
حالا باید متد SetObjects رو در خارج از بدنه ی Thread تعریف کنیم ، این متد رو به این صورت تعریف کندی :

procedure MyThread.SetObjects(IdH : TIdHTTP; PB : TProgressBar; SrcMemo : TMemo);
begin
 IH := IdH;
 PBar := PB;
 Src := SrcMemo;
end;

این متد ابتدا مقادریری رو به عنوان ورودی دریافت میکنه و اونها رو به اشیاء مربوط به Thread ربط میده ...

حالا نوبت به متد Execute مربوط به Thread میرسه ، این رویداد رو به صورت زیر تعریف کنید :

procedure MyThread.Execute;
begin
 SetObjects(MainFrm.IdHTTP, MainFrm.PBar, MainFrm.SourceMemo);
 Source := IH.Get('http://www.DelphiPlus.Mihanblog.com');
 Src.Lines.Text := Source;
end;

همونطور که خودتون هم متوجه شدید ، اول متد SetObjects اجرا میشه و اشیاء رو مرتبط میکنه ، و در مرحله بعد هم سورس صفحه دریافت میشه و درون Memo ریخته میشه ...
البته قبل از شروع کار یک Memo و یک ProgressBar و یک IdHTTP روی فرم بزارید ، یک دکمه هم برای شروع کار روی فرم قرار بدید ، در رویداد OnClick دکمه باید Thread رو ایجاد و اجرا کنیم :

procedure TMainFrm.GetBtnClick(Sender: TObject);
begin
 Tr := MyThread.Create(True);
 Tr.FreeOnTerminate := True;
 Tr.Resume;
end;

توجه کنید که نام فرم برنامه ما در کد بالا MainFrm و نام دکمه ای که قرار دادیم هم GetBtn هست ...
در نهایت نوبت به نمایش وضعیت دریافت در یک ProgressBar هست که می تونیم از دو رویداد مربوط به IdHTTP به نامهای OnWorkBegin ( در شروع کار فراخوانی میشه ) و OnWork ( در هنگام انجام عملیات فراخوانی میشه )  استفاده کنیم ، در رویداد اول باید Max مربوط به ProgressBar رو تنظیم کنیم و در رویداد دوم هم باید هر بار Position مربوط به ProgressBar رو مقداردهی کنیم :

procedure TMainFrm.IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
 Tr.PBar.Max := AWorkCountMax;
end;

procedure TMainFrm.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
 Tr.PBar.Position := AWorkCount;
end;

کامپوننت IdHTTP رویداد دیگه ای به نام OnWorkEnd داره که در پایان کار اتفاق می افته ، در این رویداد می تونیم سورس بدست اومده رو در Memo نمایش بدیم :

procedure TMainFrm.IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
 SourceMemo.Lines.Text := Tr.Source;
end;

توجه کنید که در دستور بالا ما سورس بدست اومده رو در Memo ی مربوط به Thread درون Memo ی اصلی قرار دادیم ...
نکته آخر اینکه ، ما رویدادها رو برای اشیاء روی فرم نوشتیم ولی وقتی اونها رو به اشیاء مربوط به Thread مربوط می کنیم ، رویداد اونها هم به اشیاء مربوط به Thread اختصاص داده میشه ...
خوب کار ما به پایان رسید ، یک برنامه نمونه هم براتون قرار دادم که می تونه به درک بهتر موضوع کمک کنه ...

برنامه ی نمونه رو می تونید از لینک زیر دانلود کنید ( حجم : 218 کیلوبایت ) :


موفق باشید    ، نظر یادتون نره !!

 

 :: لینك ثابت نویسنده : محمود مهری نظرات Comment

مطالب اخیر

معرفی کانال و گروه های تلگرام
استفاده از Component Template ها در دلفی
مقاله : نحوه ی استفاده از پنل پیامک در نرم افزار
E-Book :: راه اندازی موتورهای DC و پله ای با استفاده از میکرو کنترلر AVR
آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE


صفحات وبلاگ :