تبليغاتX
دنياي برنامه نويسی World of Programming
به وب سايت "دنياي برنامه نويسي" خوش آمديد Welcome to "World of programming" Web Site

 
همكاري، همفكري و آموزش برنامه نويسي
 

آموزش زبان برنامه نویسی

 

PASCAL

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 14:23  توسط محمدرضا فتحي  | 

آموزش زبان برنامه نويسي پاسكال

(قسمت اول)

جهت رفتن به قسمت اول آموزش برنامه نويسي پاسكال:

لطفاً "ادامه مطلب" را كليك نماييد.


ادامه مطلب
  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 14:19  توسط محمدرضا فتحي  | 

آموزش زبان برنامه نويسي پاسكال

(قسمت دوم)

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

لطفاً "ادامه مطلب" را كليك نماييد.


ادامه مطلب
  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 14:16  توسط محمدرضا فتحي  | 

آموزش زبان برنامه نويسي پاسكال

(قسمت سوم)

جهت رفتن به قسمت سوم آموزش برنامه نويسي پاسكال:

لطفاً "ادامه مطلب" را كليك نماييد.


ادامه مطلب
  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 14:14  توسط محمدرضا فتحي  | 

آموزش زبان برنامه نويسي پاسكال

(قسمت چهارم)

جهت رفتن به صفحه قسمت چهارم آموزش برنامه نويسي پاسكال:

لطفاً "ادامه مطلب" را كليك نماييد.


ادامه مطلب
  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 14:10  توسط محمدرضا فتحي  | 

آموزش زبان برنامه نويسي دلفي

 

DELPHI

 

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:57  توسط محمدرضا فتحي 

دلفی در واقع یک کامپایلر پاسکال است. دلفی 6 نسل جدید کامپایلر های پاسکال است که شرکت Borland از زمان ایجاد اولین نسخه پاسکال توسط Andres Hejlsberg در 15 سال پیش به بازار عرضه کرد.

برنامه نویسی به زبان پاسکال در سالیان سال از استواری و ثبات، زیبایی و ظرافت و البته سرعت بالای کامپایل سود برده است. دلفی هم از این قاعده مستثنی نیست. کامپایلر دلفی ترکیبی از بیش از یک دهه تجربه طراحی کامپایلر پاسکال و معماری بهبود یافته کامپایلر های 32 بیتی است. اگرچه قابلیت های کامپایلرها با گذشت زمان پیشرفت قابل توجهی داشته است ولی سرعت آن چندان کاهش نیافته و همچنان از سرعت بالایی برخوردار است. به علاوه استحکام و قدرت کامپایلر دلفی معیاری برای سنجش دیگر کامپایلر هاست.

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

جهت مطالعه و بررسی تاریخچه زبان برنامه نویسی دلفی لطفاْ "ادامه مطلب" را کلیک نمایید.


ادامه مطلب
  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:54  توسط محمدرضا فتحي  | 

محیط دلفی برای برنامه نویسی یکی از بهترین محیطهای برنامه نویسی است.

 گذشته از کارکرد داخلی و کمپایلر آن که بسیار قوی و سریع است، محیط آن یعنی IDE آنهم قدرت بسیار زیادی دارد که باعث شده یکی از بهترین ادیتورها باشد. در این مقاله من سعی بر این داشته ام تا با ارائه یک سری از نکات و کلیدهای میانبر که می توانند برای کار در دلفی بسیار مفید و کارا باشند، کمک کنم تا شما بتوانید با قدرت بیشتر به برنامه نویسی و کار در این محیط قدرتمند ادامه دهید.

در قسمت اول مقاله که در حال حاضر در مقابل شماست من یک سری از کلیدهای میانبر و ترکیبی مورد استفاده در
IDE دلفی را بصورت لیست وار و همراه یک توضیح کوچک آورده ام. دوستان عزیز برنامه نویس ممکنه که شما مدتها با دلفی مشغول برنامه نویسی بوده باشید اما من یقین دارم که در این لیست نکات و روشهای جدیدی را خواهید آموخت.

جستجو در متن بصورت مستقیم:
برای اینکار کلیدهای
Ctrl+E را بفشارید و بدنبال آن شروع به تایپ کلمه مورد نظر کنید نتیجه آن را خود ببینید. برای اینکه به کلمه بعدی بروید کافیست کلید F3 را بزنید.

ایجاد فرورفتگی در کد:
بعضی اوقات - که خیلی هم پیش می‌آید - لازم است که یک مقداری از متن را بصورت بلوک شده به جلو و یا عقب ببریم. منظور دندانه دار کردن متن است که به خوانایی برنامه کمک می کند. برای اینکار می تونید از کلید
Ctrl +Shift+I برای جلو بردن و Ctrl+Shift+U برای عقب برگرداندن متن بلوک شده استفاده کنید.

پرش به قسمت تعریف یک شی (
Object):
ببنید شی مورد نظرتون (از قبیل
VCL, Procedure, Function,...) در کجا و چطور تعریف شده می توانید کلید Crtl رو پایین نگه داشته و روی شی مورد نظر Click کنید.

برای تغییر حالت کاراکترها:
شما می توانید یک قسمت از متن (که ممکن است با حروف بزرگ و یا کوچک تایپ شده باشد) را انتخاب کنید و با زدن کلیدهای
Ctrl+O+U به ترتیب تمامی حروف کوچک آن قسمت از متن را به حروف بزرگ و تمامی حروف بزرگ آنرا به حروف کوچک تبدیل کنید. برای تعییر حالت یک کلمه نیز میتوانید روی کلمه مورد نظر رفته و کلیدهای Ctrl+K+F برای بزرگ کردن و کلیدهای Ctrl+K+E را برای کوچک کردن حروف آن کلمه بکار برد.

درست کردن ماکرو متنی:
این امکان بسیار مفید است و می تواند بسیاری از کارهای نوشتاری را کاهش دهد با اینکار شما میتوانید یک سری از کارهای تکراری که روی متون انجام می دهید را بصورت ماکرو در آورده و از آنها به راحتی استفاده کنید. برای شروع به ضبط ماکرو کلیدهای
Ctrl+Shift+R را بفشارید و آن سری کارهایی را که می خواهید را انجام دهید و سپس برای اینکه به کار ضبط ماکرو پایان دهید کلیدهای Ctrl+Shift+R را دوباره بزنید. حال برای استفاده از ماکرو کافیست در هر جا که لازم بود کلیدهای Ctrl+Shift+P را بفشارید.

انتخاب متن بصورت مربعی:
اگر شما از کهنه کارهای کامپیوتر باشید حتما از زمان داس یادتون هست که برنامه ای بود به نام
PE2 که یکی از امکانات بسیار جالبش این بود که یک مربع از متن رو میتوانستین انتخاب کنید و آنرا کپی یا حذف کنید. بله درست متوجه شدید در محیط دلفی هم شما اینکار را میتوانید انجام دهید اما نه به مشکلی PE2 بلکه اینکار را میتوانید فقط با گرفتن کلید Alt و کشیدن موس روی متن انجام دهید. هر چند ممکن است در نگاه اول زیاد این امکان مفید به نظر نیاید ولی بعضی وقتهای خیلی کار را راحت میکنه، که حتماً تجربه خواهید کرد.

گذاشتن علامت روی متن:
این کار که به
BookMark معروف است بسیار مفید و کارا می باشد. در هنگامی که شما روی قسمتی از متن برنامه کار میکنید و می خواهید به یک قسمت دیگر بروید ممکن است برای برگشتن به مکان اول خود کمی مشکل پیدا کنید. ولی شما میتوانید با زدن چند دکمه به محل مورد نظرتون باز گردید. برای اینکار در خطی که قصد دارید علامت بگذارید کلیدهای Ctrl+Shift+0..9 را بفشارید. منظور اینست که کلیدهای Ctrl+Shift را نگه دارید و یکی از اعداد 0 تا 9 را وارد کنید تا آن خط به همان شماره علامت گذاری شود و سپس هر جا که خواستید بروید و سپس هر بار که کلید Ctrl را نگه دارید و شماره مورد نظر را وارد کنید به همان خط باز خواهید گشت. البته توجه داشته باشید که فقط می توانید 10 خط را با این روش علامت گذاری بکنید و برای برداشتن علامت ها کافیست روی همان خط دوباره کلید Ctrl+shift و شماره‌ای که برای آن خط وارد کرده اید را بفشارید با اینکار علامت آن خط برداشته می شود.

ایجاد کلاس مورد نظر:
شما هنگامی که در قسمت
Private و یا Public یک type، روال یا تابع درست کردید لازم دارید که قسمتی را برای قرار دادن کدهای مربوط به آن روال یا تابع را ایجاد کنید. برای اینکار شما پس از اینکه نام تابع را تایپ کردید می توانید کلیدهای Ctrl+Shift+C را فشار دهید تا دلفی یک قسمت برای نوشتن کدهای مورد نظرتان ایجاد کند.

ظاهر کردن پنجره
Code insight:
شما حتما به اهمیت و مفید بودن این قسمت دلفی واقفید که در هنگام کد نویسی تا چه حد می تواند کارها را راحت کند. بله در هنگام وارد کردن کدها بعد از وارد کردن نام یک کلاس و یا
Object با زدن یک نقطه (.) پنجره Code Insight‌ ظاهر می شود. حال در بعضی وقتها شما ممکن است که نقطه را قبلا وارد کرده باشید و یا در مواقع دیگر این پنجره ظاهر نشود. در این صورت برای اینکه پنجره را ظاهر کنید باید دوباره نقطه را وارد کنید ولی راه آسانتری هم وجود دارد و آن اینست که کلیدهای Ctrl+Speacebar را فشار دهید.

ظاهر کردن پنجره
Code Parameter:
همانند بالا در هنگام ظاهر شدن
Hint مربوط به راهنمای توابع که معمولاً بعد از گذاشتن پرانتز مربوط ظاهر میشود و در مورد پارامترهای لازم می باشد نیز می توانید از کلیدهای Ctrl+Shift+SpaceBar استفاده کنید.

رفتن از قسمت تعریف توابع و روالها به قسمت کد آنها:
همیشه این نیاز وجود خواهد داشت که شما در هنگامی که دارید به دنبال یک روال در قسمت
type میگردید بعد از پیدا کردن نام آن می خواهید که خود آن تابع یا روال را نیز ببنید. برای اینکار خوب حتما نام آن را جستجو میکنید ولی یک راه آسانتر اینست که شما روی نام آن تابع قرار گیرید و کلیدهای Ctrl+Shift+Up/Down را بزنید. در اینحالت اگر روی کد تابع باشید به قسمت تعریف آن خواهید رفت.

http://www.idevcenter.com :منبع

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:53  توسط محمدرضا فتحي  | 

دلفی به ما امکان می دهد آرایه‌هایی از هر نوع متغییری را ایجاد کنیم.

برای تعریف آرایه به صورت زیر عمل میکنیم:

var
   array[indexType1, ..., indexTypen] of baseType;


در این تعریف برای نامگذاری آرایه، از قانون نامگذاری متغییرها استفاده میکنیم و مقدار اولیه را نیز درون یک جفت کروشه قرار می دهیم.

نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:

d(.i.):= 3 + i; // Equivalent d[i]:= 3 + i;


نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:

var
   A : array [Boolean] of integer;
begin
   A[True] := 50;
   A[False] := 100;
end;


نکته: توابع Low و High کران‌های پایین وبالای یک متغییر آرایه‌ای یا نوعی یا ترتیبی را بر میگردانند:

for I := 0 to High(X) do S := S + X[I];



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

type
   TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
 
const
   DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday',
                                           'Wednesday', 'Thursday', 
                                           'Friday', 'Saturday');
var
   Today : TDay;
 
begin
   Today := TDay(DayOfWeek(Date) - 1);
   ShowMessage('Today is ' + DayNames[Today] + '!');
end;



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

var MyFlexibleArray: array of Real;


قبل از به کار گیری آرایه‌های دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:

SetLength (MyFlexibleArray, 2; (


نکته: آرایه‌های دینامیکی همیشه مبتنی بر صفر می باشند.

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

MyFlexibleArray := nil;


نکته: مقدار حافظه‌ای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایه‌ای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص می‌یابد.


فشرده‌سازی آرایه‌ها:
در دلفی شما هنگامی که ساختار خود را تعیین کردید می‌توانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:

type TNumbers = packed array[1..100] of Real;


نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایه‌ای از کاراکترها این مورد سازگارتر می‌باشد.


آرایه‌های چند بعدی دینامیکی:
برای تعریف آرایه‌های چند بعدی دینامیکی، تنها کافی است ...
array of را در ساختار خود تکرار کنید. به طور مثال:

type
   TMessageGrid = array of array of string;
 
var
   Msgs: TMessageGrid;


این تعریف یک آرایه دو بعدی از رشته‌ها می باشد. سپس باید به آرایه خود فضا نسبت داد:

SetLength(Msgs, I, J);



شما می‌توانید آرایه‌های چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:

var
   Ints: array of array of Integer;
 
SetLength(Ints, 10);


ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازه‌های مختلف) تخصیص دهید:

SetLength(Ints[2], 5);

 http://www.idevcenter.com :منبع

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:50  توسط محمدرضا فتحي  | 
تخصیص خودکار حافظه
وقتی شما از نوع‌های پایه (Integer ،real ،word و…) برای ایجاد متغییرهای خود استفاده می کنید،
هیچ نگرانی درباره تخصیص حافظه آن وجود ندارد چون دلفی خودش آنرا تخصیص حافظه می کند و سپس آزاد میکند.

جهت ديدن ادامه مطالب لطفاً "ادامه مطلب" را كليك نماييد.

ادامه مطلب
  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:48  توسط محمدرضا فتحي  | 

ابتدا باید یک عنصر جدید مبتنی بر TDBGrid ایجاد کنید و رویداد OnMouseMove را فراخوانی کنید:

type
   TMyDBGrid = class(TDBGrid)
   published
    property OnMouseMove;
   end;


اگرچه شما در رویداد OnMouseMove مختصات X و Y را بدست خواهید آورد، اما شما باید ستون مورد نظر را پیدا کنید. برای ادامه کار لازم است که سطر زیر را در قسمت protected قرار دهید:

procedure WMMouseMove(var Message : TWMMouse); message WM_MOUSEMOVE;


همچنین متغیر های زیر را در قسمت public اضافه نمایید:

MouseRow : integer;
MouseCol : integer;


بنابراین متد WMMouseMove بصورت ریر خواهد بود:

procedure TMyDBGrid.WMMouseMove(var Message : TWMMouse);
var
   t : TGridCoord;
begin
   t := MouseCoord(Message.XPos, Message.YPos);
   MouseCol := t.x;
   MouseRow := t.y;
   inherited;
end;


ما ابتدا فیلدهای XPost و YPos را از ساختار WMMouseMove تنظیم میکنیم:

procedure TForm2.MyDBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
Integer);
begin
    if (((dgIndicator in MyDBGrid1.Options) and (MyDBGrid1.MouseCol > 0)) or
       ((not (dgIndicator in MyDBGrid1.Options)) and (MyDBGrid1.MouseCol <> -1)))
       and (MyDBGrid1.MouseCol <> OldMouseCol) then begin
      OldMouseCol := MyDBGrid1.MouseCol;
      if dgIndicator in MyDBGrid1.Options then
         MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol - 1].FieldName
      else
         MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol].FieldName;
    end;
end;


حالا مجددا" تعریف زیر را در قسمت public قرار دهید:

HintMouseMessage(Control : TControl; var Message : TMessage)


در قسمت
OnMouseMove از TDBGrid نیز فرامین زیر را اضافه نمایید:

var
   r : TMessage;
begin
 
   Application.HintMouseMessage(self, r);
   TWMMouse(r).XPos := X;
   TWMMouse(r).YPos := Y;
   Application.HintMouseMessage(MyDBGrid1, r);
end;


همه کارها انجام شد. حالا شما میتوانید نتیجه را مشاهده کنید.

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:46  توسط محمدرضا فتحي  | 

چطور میتوان زمان کپی شدن فایل را با استفاده از ProgressBar نمایش داد؟
برای انجام این کار ابتدا بر روی یک فرم یک
ProgressBar اضافه کنید سپس تابع زیر را تایپ کنید:

procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string); 
var 
  FromF, ToF: file of byte; 
  Buffer: array[0..4096] of char; 
  NumRead: integer; 
  FileLength: longint; 
begin 
  AssignFile(FromF, Source); 
  reset(FromF); 
  AssignFile(ToF, Destination); 
  rewrite(ToF); 
  FileLength := FileSize(FromF); 
  with Progressbar1 do 
  begin 
    Min := 0; 
    Max := FileLength; 
    while FileLength > 0 do 
    begin 
      BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); 
      FileLength := FileLength - NumRead; 
      BlockWrite(ToF, Buffer[0], NumRead); 
      Position := Position + NumRead; 
    end; 
    CloseFile(FromF); 
    CloseFile(ToF); 
  end; 
end; 


در این تابع شما در واقع فایل مبدا را خوانده و در مقصد مینویسید. حالا یک دکمه اضافه کرده کد زیر رو اضافه نمایید:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  CopyFileWithProgressBar1('c:\Welcome.exe', 'c:\temp\Welcome.exe'); 
end;



چطور می توان زمان کپی شدن فایل را محاسبه و نمایش داد؟
برای این کار نیز میتوانید از تابع زیر استفاده کنید:

procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string); 
var 
  FromF, ToF: file of byte; 
  Buffer: array[0..4096] of char; 
  NumRead: integer; 
  FileLength: longint; 
  t1, t2: DWORD; 
  maxi: integer; 
begin 
  AssignFile(FromF, Source); 
  reset(FromF); 
  AssignFile(ToF, Destination); 
  rewrite(ToF); 
  FileLength := FileSize(FromF); 
  with Progressbar1 do 
  begin 
    Min  := 0; 
    Max  := FileLength; 
    t1   := TimeGetTime; 
    maxi := Max div 4096; 
    while FileLength > 0 do 
    begin 
      BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); 
      FileLength := FileLength - NumRead; 
      BlockWrite(ToF, Buffer[0], NumRead); 
      t2  := TimeGetTime; 
      Min := Min + 1; 
      // Show the time in Label1 
      label1.Caption := FormatFloat('0.00', ((t2 - t1) / min * maxi - t2 + t1) / 100); 
      Application.ProcessMessages; 
      Position := Position + NumRead; 
    end; 
    CloseFile(FromF); 
    CloseFile(ToF); 
  end; 
end;


در این تابغ ابتدا زمان اولیه در متغیر t1 ذخیره شده و سپس پس از کپی شدن هر قسمت از فایل، زمان در متغیر t2 ذخیره میشود و توسط فرمول زیر مقدار زمان باقی مانده تا کپی کامل فایل بدست می آید.

((t2 - t1) / min * maxi - t2 + t1) / 100

 

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:45  توسط محمدرضا فتحي  | 
StatusBar می باشد. انجام این کار بسیار ساده است. برای این کار کافی است بر روی فرم خود یک StatusBar اضافه نمایید حالا در قسمت تعاریف متغیر های عمومی کد زیر را بنویسید:

ProgressBar1: TprogressBar;


در ادامه دستورات زیر را در خاصیت
OnCreate فرم خود بنویسید:

var
ProgressBarStyle: LongInt;
begin
{create a run progress bar in the status bar}
ProgressBar1 := TProgressBar.Create(StatusBar1);
ProgressBar1.Parent := StatusBar1;
{remove progress bar border}
ProgressBarStyle := GetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE);
ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE;
SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle);
{set progress bar position and size - put in Panel[2]}
ProgressBar1.Left := StatusBar1.Panels.Items[0].Width +
StatusBar1.Panels.Items[1].Width + 4;
ProgressBar1.Top := 4;
ProgressBar1.Height := StatusBar1.Height - 6;
ProgressBar1.Width := StatusBar1.Panels.Items[2].Width - 6;
{set range and initial state}
ProgressBar1.Min := 0;
ProgressBar1.Max := 100;
ProgressBar1.Step := 1;
ProgressBar1.Position := 0;
end;


حالا برای آنکه پس از خارج شدن از فرم حافظه اشغال شده آزاد گردد، در قسمت OnDestroy در Event فرمتان دستور زیر را اضافه نمایید:

ProgressBar1.free;

 

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:44  توسط محمدرضا فتحي  | 

ایجاد یک DLL
با استفاده از منو فایل گزینه
New Items را انتخاب کنید و آیتم DLL Wizard را انتخاب نمایید. حال به فایل ایجاد شده، یک فرم با استفاده از روش بالا اضافه نمایید. دقت نمایید که Application را بجای فرم انتخاب ننمایید. حال اگر فرض کنیم که نام فرم شما Demo باشد و بانام UDemo.pas آنرا ذخیره کرده باشید. باید در فایل DLL بصورت زیر کد نویسی نمایید:

library demodll;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
   SysUtils,
   Classes,
   UDemo in 'UDemo.pas' {Demo};
 
{$R *.res}
procedure ShowdemoForm;stdcall;
begin
   Demo :=Tdemo.Create(nil);
   demo.Show;
end;
 
function ShowdemoFormModal:integer;stdcall;
begin
   demo :=Tdemo.Create(nil);
   Result := demo.ShowModal;
end;
 
Exports
   ShowDemoForm,
   ShowdemoFormModal;
begin
end.


دقت کنید که نام
DLL فوق DemoDll می باشد و با نام DemoDll.dpr ذخیره گردیده است.

حال بر روی فرم موجود تمام دکمه‌ها و آبجکت‌های مورد نظرتان را اضافه و کد نویسی کنید (اختیاری). در پایان در منو
Project گذینه Build DemoDll را انتخاب کرده و اجرا نمایید. فایلی با نام DemoDll.dll ایجاد می گردد که برای استفاده آماده است.


استفاده از یک
DLL بصورت دینامیکی
برای استفاده از یک
DLL ‌بصورت دینامیکی، ابتدا نام توابعی را که در فایل DLL شما موجود است بصورت زیر تعریف نمایید:

unit UMain;
 
interface
 
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, ExtCtrls;
 
type
TShowdemoFormModal= Function :integer;
.
.
.


دقت کنید که نام برنامه انتخابی پیش فرض
Main و با نام UMain.pas ذخیره گشته است. حال برای لود کردن DLL یادشده، یک دکمه بر روی فرم قرارداده آنرا بصورت زیر کد نویسی کنید:

var
hndDLLHandle:THandle;
ShowdemoFormModal:TShowdemoFormModal;
 
procedure TFMain.Button1Click(Sender: TObject);
begin
   try
      hndDLLHandle:=LoadLibrary('Demodll.dll');
 
      if hndDLLHandle <> 0 then begin
         @ShowdemoFormModal:=getProcAddress(hndDLLHandle,'ShowdemoFormModal');
 
         if addr(ShowdemoFormModal) <> nil then begin
            ShowdemoFormModal;
         end
         else
            showmessage ('function not exists ...');
         end
      else
         showMessage('Dll Not Found!');
      finally
         freelibrary(hndDLLHandle);
      end;
end;


فرم شما آماده اجراست. در پایان متذکر می شوم که استفاده ار روش دینامیکی در لود کردن
DLL ها باعث پایین آمدن سرعت نمایش فرم‌ها و در عوض بالارفتن سرعت برنامه خواهد شد.

 

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:43  توسط محمدرضا فتحي  | 

گاهی اوقات نیاز است فرم ما از نظر اندازه پیرو یک الگو باشد و کاربر نتواند خارج از محدوده این فرم را تغییر اندازه دهد، راهی که پیشنهاد می شود، استفاده از Windows Messages، تابع WM_GetMinMaxInfo میباشد.

unit MinMax;
 
interface
 
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs;
 
type
  TForm1 = class(TForm)
  private
    { Private declarations }
    procedure WMGetMinMaxInfo(var MSG: Tmessage); message WM_GetMinMaxInfo;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.WMGetMinMaxInfo(var MSG: Tmessage);
Begin
  inherited;
  with PMinMaxInfo(MSG.lparam)^ do
  begin
    with ptMinTrackSize do
    begin
      X := 300;
      Y := 150;
    end;
    with ptMaxTrackSize do
    begin
      X := 350;
      Y := 250;
    end;
  end;
end;
 
end.

 http://www.idevcenter.com :منبع

  نوشته شده در  یکشنبه بیست و چهارم دی 1385ساعت 13:38  توسط محمدرضا فتحي  | 

 شركت مايكروسافت جديدترين برنامه ويندوز "ويستا" را به بازار عرضه كرد

  وجود اينكه مايكروسافت از دو ماه پيش نسخه تجارتي ويندوز ويستا براي استفاده توسط شركتها به بازار عرضه كرده بود، اما نسخه خانگي ويندوز ويستا اكنون وارد بازار جهاني شد.

"بيل گيتس" بنيانگذار و مدير شركت مايكروسافت كه به اسكاتلند سفر كرده است، با تاكيد بر قابليت‌هاي امنيتي قابل توجه اين نسخه از ويندوز گفت اين قابليت‌ها ارزش جايگزيني نسخه‌هاي قديمي ويندوز با ويستا را ايجاد كرده است.

ويستا كه نسخه‌هايي از آن با قابليت‌هاي متفاوت در بازار عرضه شده است در آمريكا بين يكصد تا ‪ ۲۵۰‬دلار و در انگليس بين ‪ ۲۰۰‬تا ‪ ۵۰۰‬دلار قيمت‌گذاري شده است.

انتظار مي‌رود كه ويندوز ويستا در يكسال آينده روي بيش از يكصد ميليون رايانه نصب شود.

آخرين نسخه از برنامه سيستم عامل ويندوز نسخه "اكس پي" بود كه پنج سال پيش وارد بازار شده بود. با وجود وارد شدن ويندوز ويستا به بازار، مايكروسافت متعهد شده خدمات خود به استفاده‌كنندگان از ويندوز اكس پي را تا سال ‪ ۲۰۱۱‬ادامه دهد.

منبع: ايرنا

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

تازه هاي كامپيوتر

     

يكي از شركتهاي معروف توليدكننده صفحه نمايش، به تازگي صفحه نمايشي ساخته كه به طور همزمان، سه تصوير متفاوت را نشان مي دهد.
اين شركت سال گذشته صفحه نمايشي را ساخت كه دو تصوير مختلف را همزمان نشان مي داد.
صفحه نمايش جديد مي تواند در ماشينها يا مكانهاي ديگر مثل خيابانها استفاده شود و براي هركسي، با توجه به جهتي كه به آن نگاه مي كند، تصوير مشخصي را نشان بدهد.
نحوه كار آن به اين صورت است كه با شكسته شدن نور صفحه نمايش در سه جهت مختلف، هر فرد با توجه به جهت نگاه كردنش به آن از سمت راست، چپ يا روبه رو، تصويري متفاوت را مشاهده مي كند.

نسخه PDF چاپ ارسال به دوست

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

ايران، اينترنتي ترين كشور خاورميانه:

تعداد كاربران اينترنت ايران طي سالهاي 2000 تا 2006 ميلادي با رشد 30 برابري از 250 هزار كاربر به هفت ميليون و 500 هزار نفر رسيده و به اين ترتيب ايران در خاورميانه رتبه نخست رشد كاربران اينترنتي را به خود اختصاص داده است.

به گزارش فارس، در سال 2006 تعداد جمعيت ايران بيش از 69 ميليون و 442 هزار نفر رسيده و از اين تعداد 8/10 درصد به اينترنت دسترسي دارند. در دسامبر سال 2000 تعداد كاربران اينترنت در ايران 250 هزار نفر بود.

در سال جاري ميلادي تعداد كاربران اينترنت كشور به 5/7 ميليون نفر بالغ شده است كه اين با رشد 30 برابر همراه بوده است.

ايران در بين كشورهاي خاورميانه در حال حاضر بيشترين كاربر اينترنت را دارد.پس از ايران رژيم صهيونيستي با سه ميليون و 700 هزار نفر و عربستان با 2 ميليون 540 هزار نفر و امارات با يك ميليون و 397 هزار نفر بيشترين كاربر اينترنت را در خاورميانه دارند.

اين گزارش حاكي است: تعداد كل كاربران اينترنت در خاورميانه 19 ميليون و 28 هزار و 400 نفر است.جمعيت اين منطقه نيز در سال 2006 به 190 ميليون نفر رسيده است.

در آسيا نيز تعداد كاربران اينترنت به 394 ميليون و 872 هزار نفر رسيد كه از سال 2000 تا 2006 اين تعداد با رشد 245 درصدي همراه بوده است.
در قاره كهن همچنان چين با 123 ميليون نفر، ژاپن با 86 ميليون نفر و هند با 60 ميليون نفر بيشترين كاربر اينترنت را به خود اختصاص داده‌اند.

 

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

نسخه PDF چاپ ارسال به دوست

تعداد سايتهای اينترنتي به صد ميليون رسيد

اينترنت با ثبت بيش از يكصد ميليون وب سايت در اين شبكه اطلاعاتي گسترده جهان، ركورد جديدي بر جاي گذاشت.

روزنامه"ال پاييس" چاپ مادريد، امروز جمعه به نقل از محاسبات شركت "نتكرافت" كه از سال ‪ ۱۹۹۵‬ميلادي شمار وب سايتها را در اينترنت محاسبه مي‌كند، نوشت: در ماه گذشته ميلادي شمار وب سايتها در اينترنت به ‪۱۰۰‬ ميليون مورد رسيد.

"ريچ ميلر" تحليلگر اين شركت، گفت: اكنون يكصد ميليون وب سايت داراي محتوا در اينترنت وجود دارد كه دراين ميان، حدود ‪ ۴۸‬ميليون وب سايت، فعال هستند و صفحات خود را بطور مرتب "به روز" مي‌كنند.

وي با بيان اين نكته كه "رشد وب سايتها در اينترنت باور نكردني است"، بخش مهمي‌از اين رشد را مربوط به‌تركيب وبلاگها، شركتهاي كوچك و سادگي ايجاد آن بويژه در طول دو سال گذشته دانست.

بر اساس اين گزارش، وقتي نتكرافت كه مركز آن در شهر بت در انگليس است، فعاليت خود را ‪ ۱۱‬سال پيش آغاز كرد ، فقط ‪ ۱۸‬هزار سايت اينترنتي در شبكه اينترنت وجود داشت.

به گفته نتكرافت، در ماه مه سال ‪ ۲۰۰۴(‬ارديبهشت ‪ (۱۳۸۳‬شمار وب سايتها به ‪ ۵۰‬ميليون مورد رسيد و پس از گذشت ‪ ۳۰‬ماه، اكنون شمار آنها دو برابر شده است.

طبق اين گزارش، آمريكا، آلمان، چين، كره جنوبي و ژاپن بيشترين رشد را در اين زمينه داشته‌اند.

به گفته نتكرافت، اولين سايت را در سال ‪ ۱۹۸۹‬ميلادي "تيم برنرز لي" در سوييس براي تبادل نظر در مورد برخورد ذرات ايجاد كرد.

نسخه PDF چاپ ارسال به دوست

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

پيوستن فارسي به جمع ‪ ۱۰‬زبان مرسوم در وبلاگ‌ها

تحقيقات جديد نشان مي‌دهد زبان فارسي براي نخستين بار به جمع ‪ ۱۰‬زبان پركاربرد در ميان وبلاگ‌هاي اينترنت پيوسته است.

به گزارش ايرنا به نقل از ««بي.بي.سي‌نيوز»، جديدترين آمار شركت تحقيقات آمار وبلاگ‌هاي اينترنتي «تكنوراتي» ‬علاوه بر مطلب فوق نشان مي‌دهد روند رو به رشد تعداد وبلاگ‌هاي اينترنتي همچنان ادامه داشته و هم‌اكنون روزانه حدود ‪ ۱۰۰‬هزار وب لاگ جديد در اينترنت ايجاد مي‌شود.

بر همين اساس كاربران وبلاگ‌ها در مجموع روزانه ‪ ۱/۳‬ميليون به‌روزنگاري انجام داده و مطالب وبلاگ‌هاي خود را تغيير مي‌دهند.

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

به گفته «ديويد سيفري» موسس شركت «تكنوراتي»، آمارهاي جمع‌آوري شده نشان مي‌دهند در حال حاضر وبلاگ‌ها نقش مهمي در بحث پيرامون وقايع و مسايل مهم جهان بر عهده دارند.

اطلاعات جمع‌آوري شده توسط اين شركت نشان مي‌دهد هم‌اكنون ‪ ۵۷‬ميليون وبلاگ در اينترنت وجود دارد كه ‪ ۵۵‬درصد از آنها دست كم يك بار در هر سه ماه توسط كاربران ايجادكننده آنها به روز مي‌شوند.

شركت «تكنوراتي» تمامي وبلاگ‌هاي اينترنت را بر اين اساس كه چه تعداد لينك به سوي آنها در ساير وب‌سايت‌ها و وبلاگ‌ها وجود دارد، رتبه‌بندي مي‌كند. هم‌اكنون حدود ‪ ۴‬هزار وب لاگ در اينترنت وجود دارد كه بيش از ‪۵۰۰‬ لينك به سوي آنها نشانه رفته‌است.

برخي از اين وبلاگ‌ها داراي سابقه فعاليت چندين ساله بوده و مطالبشان دست كم دو بار در روز توسط نگارندگانشان به روزنگاري مي‌شود.

هم‌اكنون زبان انگليسي بيشترين زبان مورد استفاده در وبلاگ‌هاي اينترنت بوده و پس از آن زبان ژاپني در رتبه دوم قرار دارد. به رغم محدوديت‌هاي اعمال شده براي وبلاگ‌نويسي در كشور چين، زبان چيني اكنون سومين زبان پركاربر در ميان وبلاگ‌هاي اينترنت است.

نسخه PDF چاپ ارسال به دوست

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

رکورد تبادل SMS در کشور شکسته شد

با تبادل 72 ميليون پيام کوتاه (SMS) در روز عيد غدير خم در شبکه ارتباطات سيار رکورد تبادل SMS در کشور شکسته شد.

مهندس وحيد صدوقي، مديرعامل شرکت ارتباطات سيار با اعلام اين خبر به خبرنگار ايستنا گفت: مشترکين شبکه تلفن همراه دولتي کشور (MCI) در روز عيد غدير خم (18دي ماه) با ارسال 72 ميليون پيام، رکورد ترافيک روزانه تبادل SMS در کشور را شکستند.

مهندس صدوقي با رد اخبار مربوط به اختلالات SMS تصريح کرد: با تبادل اين حجم پيام در طول يک روز SMS Centerهاي کشور به طور متوسط در هر ثانيه بيش از 830 پيام را به مقصد رسانده و به طور متوسط هر مشترک حدود 6 پيام ارسال کرده است.

مديرعامل شرکت ارتباطات سيار رکورد قبلي تبادل SMS در کشور را روز قبل از عيد غدير خم (17 ديماه) با 71 ميليون بار ارسال پيام کوتاه اعلام کرد. همچنين رکورد پيشين ترافيک روزانه تبادل SMS در کشور با 58 ميليون پيام در روز 30 آذرماه (شب يلدا) ثبت شده بود.

شبکه تلفن همراه دولتي کشور (MCI) در حال حاضر از طريق شش مرکز SMS Center امام خميني، الغدير، اروميه، شهرکرد، مشهد و شيراز به بيش از 13 و نيم ميليون مشترک خود در 1016 شهر کشور سرويس‌دهي مي‌کند.
نسخه PDF چاپ ارسال به دوست

منبع: http://www.ayaran.com

  نوشته شده در  شنبه بیست و سوم دی 1385ساعت 11:38  توسط محمدرضا فتحي  | 
 

درآمد آسان، عالي و تضمين شده، ثبت نام كنيد و شوكه شويد
  DESIGNED BY: M.REZA FATHI
محمدرضا فتحي