آموزش دلفی در مجید آنلاین

saalek110

Well-Known Member
منبع:
http://delphilog.persianblog.com/1382_8_delphilog_archive.html
--------------------------------------
کد تست شده خود را در این قسمت می گذارم ولی قسمتهای قرمز اضافه شود و قسمتهای آبی می گوید که چه ابزارهایی اضافه شود.
برنامه زیر ساعت و مسیر فایل را نشان می دهد.
کد:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
[COLOR="Blue"]
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
[/COLOR]
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
[COLOR="Red"] appldir:string;[/COLOR]

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
[COLOR="Red"]
         appldir:=extractfilepath(paramstr(0));
         Edit1.Text:= TimeToStr(Time);
         Edit2.Text:= appldir;
[/COLOR]
end;

end.
 
آخرین ویرایش:

saalek110

Well-Known Member
منبع:
http://www.rightclick.ir/forum/ajax_topic-405.html
-------------------------------------------------------------
ویندوز چیست (از نگاه برنامه نویسی و توابع API):

ویندوز یک سیستم عامل چند وظیفه ای و چند کاربره گرافیکی برای کامپیوتر های شخصی است.
در زمان سیستم عامل Dos کاربران درون یک محیط متنی ساده ، تک کاربره و تک وظیفه ای کارهای خود را انجام می دادند . اما در اواسط دهه 1980 میلادی نیازهای جدیدی پیدا شد از قبیل امکان اجرای چند برنامه همزمان ، امکان دسترسی چند کاربر ، رابط کاربری زیباتر ، مدیریت کامل بر منابع و غیره. اینگونه بود که سیستم عامل Windows متولد شد.
سیستم عامل Windows به تمام نیازهای فوق پاسخ داد اما محدودیت هایی نیز بوجود آورد مخصوصا برای برنامه نویسان سیستمی.
در محیط Dos شما مجاز به استفاده از تمام قسمت های حافظه بودید. اما در Windows چنین چیزی نیست زیرا نمی توان به بخشهایی از حافظه که متعلق به برنامه دیگری است دسترسی داشت حتی نمی توان آنها را خواند. و یا استفاده از فضای حافظه مجازی تحت نظر سیستم فایل است که اجازه هیچ گونه دسترسی مستقیم به Hard Disk را به ما نمی دهد. مورد بسیار مهم دیگر این است که در Dos برنامه نویس می بایست خودش با Port ها ارتباط برقرار کند اما در Windows چنین اجازه ای ندارد. و موارد بسیار زیاد دیگر(مخصوصا در ارتباط با سخت افزار).
اما اینها هیچ کدام ضعف نیست بلکه نشان دهنده قدرت Windows است که اجازه نمی دهد برنامه ها در کارهای یکدیگر دخالت کنند . با وجود این دست برنامه نویس هم برای انجام کارهای مورد نیاز بسته نیست بلکه همان ویندوزی که تمام کارها را بدست می گیرد همان نیز امکاناتی را به برنامه نویس می دهد تا بتواند برنامه سیستمی بنویسد . این امکانات API (Application Programming Interface)نامیده می شوند . در واقع API یکسری توابع استاندارد است که شرکت Microsoft داخل یکسری فایل DLL برای برنامه نویسی سیستمی قرار داده است و بیش از 1000 تابع و رویه (Procedure) می باشد.
API را اصطلاحا قلب ویندوز می نامند ، هر کاری که در این سیستم عامل انجام می شود API است یعنی خود این سیستم عامل هم برای بسیاری از اعمال خویش نیز از آن استفاده می کند. زبانهای برنامه نویسی که تحت Windows کار می کنند (مثل Delphi) از API استفاده می نمایند . مثلا اگر یک متغیر تعریف کنید یک API بصورت خودکار اجرا شده و مقدار حافظه مورد نیاز را به برنامه شما اختصاص می دهد.
پس به زبانی می توان ادعا کرد که Windows مجموعه ای از توابع API است و می توان گفت که نه تنها این سیستم عامل ما را محدود نکرده است بلکه کار ما را ساده نموده است. مثلا اگر در Dos مجبور بودیم برای Save یک فایل ، کلی برنامه نویسی کنیم وهمه چیز را در نظر بگیریم که مثلا مبادا اطلاعاتمان روی اطلاعات دیگری Overwrite شود ، در Windows کافی است یک API را فراخوانی کنید و به همین سادگی Window تمام کارهای مربوطه را انجام می دهد.
در این Topic باز هم از API و نحوه کارکردن با آن ، DLL ها ، Message ها ، DC ها و غیره در چند روز آینده صحبت خواهد شد.


امروز برای نمونه دو سه تا از API های ساده و کارآمد را معرفی می کنیم. البته قبل از آن این مطلب را بگویم که Delphi استفاده از توابع API را ساده کرده است و ما حداکثر با Use کردن یک فایل از آنها استفاده می کنیم.

1- رویه ( Procedure ) Sleep:
با استفاده از این رویه در اجرای برنامه می توان وقفه ای ایجاد کرد.
شکل کلی این رویه به صورت زیر است. كد:
کد:
Procedure Sleep(dwMilliseconds:DWord);

همانطور که پیدا است این رویه یک ورودی از جنس DWord می گیرد. این ورودی عددی است که زمان توقف را بر حسب میلی ثانیه مشخص می کند(مثلا عدد 1000 معرف یک ثانیه است).

مثال:کد زیر مقدار Progress یک ProgressBar را از 0 تا 100 درصد در طول 10 ثانیه زیاد می کند. كد:
کد:
var 
i:Byte; 
begin 
  i:=0; 
  while i<100 do 
    begin 
        i:=i+10; 
        ProgressBar1.Position:=i; 
        Sleep(1000); 
    end; 
end;

2- تابع CopyFile:
یک فایل را از محلی به محلی دیگر کپی می کند.
شکل کلی این تابع به صورت زیر است. كد:
کد:
Function CopyFile (lpExistingFilename, lpNewFilename:PChar, bFailIfExists:BOOL):BOOL;


پارامتر lpExistingFilename یک String(در حقیقت PChar که نوعی رشته است) است که مسیر و نام فایل مبدا را مشخص می کند.
پارامتر lpNewFilename یک String(در حقیقت PChar که نوعی رشته است) است که مسیر و نام فایل مقصد را مشخص می کند. دقت کنید که نام فایل مقصد نیز باید قید شود و معمولا برابر با نام فایل مبدا گرفته می شود.
پارامتر bFailIfExists یک مقدار منطقی(Boolean) است که اگر فایل در مقصد وجود داشت چه کاری انجام شود. اگر True بود و فایل مقصد قبلا موجود باشد کار تابع نیمه تمام می ماند و اگر False باشد روی فایل اول Overwrite می گردد.
خروجی تابع منطقی است و اگر کارش به درستی انجام شود، True و در غیر این صورت False است.
مثال:خط زیر یک فایل را از درایو C داخل درایو D کپی می کند و اگر فایل در مقصد وجود داشته باشد آنرا Overwrite می کند. كد:
کد:
CopyFile('C:\Chortke.jpg','D:\Chortke.jpg',False);


3- تابع GetDriveType :
این تابع نوع هر یک از درایوهای سیستم را مشخص می کند انواعی از قبیل فلاپی ، دیسک سخت ، CDROM و غیره.
شکل کلی این تابع به صورت زیر است. كد:
کد:
Function GetDriveType(lpRootPathName:PChar): LongWord;
پارامتر lpRootPathName یک رشته است و نام درایو مورد نظر را مشخص می کند مثل "C:\".

خروجی این تابع یک عدد است که می تواند مقادیر زیر باشد.
DRIVE_UNKNOWN: درایوی که معرفی شده است قابل دسترسی نمی باشد. برابر با عدد 0 می باشد.
DRIVE_NO_ROOT_DIR: درایوی که معرفی شده است وجود ندارد. برابر با عدد 1 می باشد.
DRIVE_REMOVABLE: برابر با مقدار عددی 2 می باشد و مشخص می کند که دیسک درایو مورد نظر از نوع قابل حمل می باشد.
DRIVE_FIXED: برابر با مقدار عددی 3 می باشد ومشخص می کند که درایو مورد نظر از نوع ثابت است.
DRIVE_REMOTE: برابر با مقدار عددی 4 می باشد و مشخص می کند که درایو مورد نظر از نوع درایوشبکه می باشد.
DRIVE_CDROM: برابر با مقدار عددی 5 می باشد و مشخص می کند که درایو مورد نظر از نوع CD_Drive می باشد.
DRIVE_RAMDISK: برابر با مقدار عددی 6 بوده و مشخص می کند درایو مورد نظر از نوع درایو های ساخته شده در RAM می باشد.

مثال: خط زیر مشخص کننده نوع درایو C می باشد. كد:
کد:
if GetDriveType('C:\') = DRIVE_FIXED then 
 ShowMessage ('It is a hard drive Partition');


یک مثال با سه تابع فوق ساخته ام که می توانید بوسیله لینک زیر آنرا همراه Source Code اش DownLoad کنید.


http://rightclick.ir/downloads/Api_Delphi_Test1_rar

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

سالک: سورس بالا را دانلود کنید و نتیجه اجرا و کدها را ببینید.
حالا من کمی شرح می دهم. داریم از توابع api استفاده می کنیم که در بالا گفته شد چی هستند و اما شرح دیگر قسمتهای سورس.
در تب Dialogs در جعبه ابزار ابزاری به نام OpenDialog داریم که به مااجازه انتخاب فایل می دهد.
با نگاهی به پروژه می بینیم که دو فرم دارد. بعد اینکه کاربر فایل را انتخاب کرد با دستور :
کد:
Form2.ShowModal;
فرم دوم نمایان می شود. در سورس فوق برای دیدن فرم دوم از پروجکت منیجر استفاده کنید. این پنجره را از منوی ویو روشن کنید اگر روشن نیست.ابزاری روی این فرم هست به نام ShellTreeView . که با آن مسیر paste فایل مشخص میشه.

نکات کد نویسی:
کد:
i:=0;
while i<100 do
 begin
  i:=i+10;
  ProgressBar1.Position:=i;
  Sleep(1000);
 end;
در کد بالا یک حلقه while داریم که قبلش متغیری را برابر صفر گرفته و تا این متغیر به 100 نرسیده آن را ده تا ده تا اضافه کرده. و این متغیر را در صفت پوزیشن پروگرس بار ریخته. و همین طور از تابع Sleep استفاده شده داخل حلقه.

همچنین در کد زیر:
کد:
if Edit1.Text<>'' then
 begin
   DRV:=Edit1.Text+':\';
   Case GetDriveType(pchar(DRV)) of
    DRIVE_UNKNOWN:STR:='This Drive is not accessible.';
    DRIVE_NO_ROOT_DIR:STR:='This is not a real drive.';
    DRIVE_REMOVABLE:STR:='It is Removable Drive'+#13+'Like Floppy Drive.';
    DRIVE_FIXED:STR:='It is a hard drive Partition.';
    DRIVE_REMOTE:STR:='It is a network drive.';
    DRIVE_CDROM:STR:='It is CD_ROM Drive.';
    DRIVE_RAMDISK:STR:='It is RAM Drive.';
   end;
 end
else
 begin
  STR:='Please Enter a Character into edit.';
  Edit1.SetFocus; 
 end;
اولا شرط if را می بینیم که اگر داخل Edit1 خالی نباشد یعنی <> (نامساوی) دو تا کوتیشن به هم چسبیده یعنی خالی.
وقتی خالی نباشد آن Edit یا دستور Case حالات مختلفGetDriveType(pchar(DRV)) بررسی می شود و با هر حالت مقداری به STR داده می شود.
و در ادامه کد یعنی در این خط:
کد:
ShowMessage(STR);
یک کادر دیالوگی(یک پنجره کوچک) حاوی همان STR نمایان می شود.
بقیه سورس را خودتان تجزیه تحلیل کنید. از شل-تری – ویو مسیر گرفه شده و باز با دستورات if و case واکنشهای مختلفی به کاربر نشان داده شده وقتی که فایلی هم نام در مسیر مقصد موجود بوده و الی آخر.
 

saalek110

Well-Known Member
مطالبی از :
http://delphi32.persianblog.ir/
=====================
عناوین این سایت. بعضی از آنها را با کد یا شرح نقل کرده ام.
گرفتن عكس كوچك از صفحه
نحوه گت كردن نوع يك فايل

ايجاد يك شيء با دستور در دلفي
کد:
procedure TForm1.Button1Click(Sender: TObject);
var n1:TDirectoryListBox;
begin
n1:=TDirectoryListBox.Create(Form1);
n1.parent:=form1;
n1.Left :=100;
n1.Top:=100;
n1.Width :=400;
n1.Height :=200;
end;
ايجاد تايمر بدون استفاده از شيء TTimer
كار با فايلهاي خواندني-نوشتني باينتري در دلفي

كم حجم كردن فايل اجرايي خود در دلفي
فايلهاي اجرايي كه با دلفي ساخته ميشوند، معمولا كمتر از 280 كيلوبايت نيستند. ولي يك روش براي كم كردن حجم آن وجود دارد. در منوي Project | Options در برگه Packages يك گزينه به نام Build with runtime packages وجود دارد كه اگر در آن تيك بزنيد، فايل اجرايي شما بسيار كوچكتر ميشود.
اگر يك برنامه بسازيد كه فقط يك فرم داشته باشد و هيچ كدي هم ننوشته باشيد، حجم فايل exe شما 286KB ميشود ولي اگر از Build with runtime packages استفاده كنيد، حجم فايل exe، 14KB ميشود. البته اين فايل exe روي كساني كه دلفي نصب كرده اند اجرا ميشود. يعني به فايل vcl50.bpl نياز دارد. براي مثال اگر برنامه اي نوشته ايد و مي خواهيد آن را به دوستتان كه او هم دلفي دارد بدهيد، ميتوانيد به اين روش حجم فايل خود را كم كنيد تا سريعتر برسد.

همان گونه كه ميدانيد، فايلهاي exe اي كه با دلفي درست ميشوند، يعني فايلهايي كه با گزينه Build with runtime packages، ساخته نشده باشند، Standalone هستند يعني به DLL زمان اجرا احتياج ندارند و روي هر كامپيوتري اجرا ميشوند. البته اين، احتمال خطا را بالا ميبرد. يعني اين احتمال وجود دارد كه فايل روي كامپيوتر طرف اجرا نشود. يكي از را حلهاي اين مشكل، استفاده از Build with runtime packages است. يعني شما فايل exe خود را به اين روش درست كنيد و فايل vcl50.bpl را هم براي كسي كه ميخواهد اين برنامه را اجرا كند بفرستيد.
نحوه نوشتن يک Host Resolver دو طرفه
نحوه گت كردن دايركتوري Desktop
كار با TreeView در دلفي

جلوگيري از تحليل رفتن منابع سيستم
اگر برنامه نويسي گرافيكي با دلفي كار كرده باشيد، يه چيزي احتمالا حالتان را گرفته است و آن تحليل رفتن منابع سيستم بعد از انجام عمليات گرافيكي مي باشد.
اگر شما زياد از Pen و Brush براي تغيير رنگ استفاده مي كنيد (مثلا تو تايمر مي ذارين)، ديده ايد كه كم كم منابع سيستم شما تحليل مي رود تا اينكه به صفر مي رسد و شما مجبوريد Reset كنيد. (اگر Resource Meter بيارين متوجه اين قضيه مي شين)
براي حل اين مشكل بايد شما بعد از اين كه از هر يك از اشياء Pen , Brush استفاده كرديد، آن را DeleteObject كنيد. و در آخر كار نيز، DC را DeleteObject كنيد.
مثال:
کد:
form1.canvas.brush.color:=clred;
form1.canvas.ellipse(10,10,200,300);
DeleteObject(form1.canvas.brush.handle);
DeleteObject(form1.canvas.handle);
با اين كار ديگه منابع سيستمتون پايين نمياد.

================================================

از :
http://www.kadironline.blogfa.com/cat-1.aspx

باز شدن فرم همراه با افکت :
برای انجام این کار در رویداد OnCreate فرمی که می خواهید با افکت باز بشه خط زیر را اضافه کنید :
کد:
AnimateWindow(Form1.Handle, 300, AW_Center);
سالک: چک شد. احتمالا از توابع api است این AnimateWindow .
=========================================

از :
http://www.kadironline.blogfa.com/cat-1.aspx

عکس گرفتن از فرم:
کد:
 GetFormImage.SaveToFile('c:\Form.bmp');
سالک: چک شد. در help خود دلفی GetFormImage را سرچ کردم. به اطلاعات زیر برخوردم:

کد:
 VCL Reference
GetFormImage method (TCustomForm)


Returns a bitmap of the form.

Delphi syntax:

function GetFormImage: TBitmap;

C++ syntax:

Graphics::TBitmap* __fastcall GetFormImage(void);

Description

Use the GetFormImage method to obtain a bitmap of the form.

=========================================
از :
http://mansour-jari.persianblog.com/1383_1_29_mansour-jari_archive.html

تابع(SHOW CURSOR)
هدف := مخفي و نمایان كردن نشانگر موس
يك باتن را بروي فرم خودقرار دهيد سپس برو آن دوباركليك كنيد و
تابع زير را درآن بنوسيد.
کد:
 windows.ShowCursor(longbool(0));
حالا برنامه را اجرا كنيد سپس بروي گزينه كليك كنيد تا نتيجه را مشاهده كنيد.
توجه ...
درصورتي كه مي خواهيد موس به نمايش درآيد مقدار صفر را يك قرار دهيد.

سالک: چک شد.
============================================

منبع:
http://www.delphi2008.blogfa.com/
======================

وجود عناصر روی فرم( فرم نمایش داده نمی شود ):
کد:
procedure TForm1.FormCreate(Sender: TObject);
begin
 Form1.Brush.Style :=bsClear;
 Form1.BorderStyle :=bsNone;
end;

سالک: پروژه بالا باعث میشه که عناصر روی فرم هویدا باشند ولی خود فرم نامرئی باشد. می توانید ابزارهایی هم اضافه کنید به فرم تا این حالت را ببینید.
برای ایجاد کد FormCreate کاری که من بلدم اینه که بروم به پنجره پراپرتی و روی تب رویدادها events بروم و بعد رویOnCreate دابل کلیک کنم.

برای پروژه های زیر به سایت اصلی مراجعه کنید:
جلوگیری از خروج موس از فرم
داشتن یک فرم شفاف
ایجاد فرم شیشه ای یعنی فرمی که پشتش معلومه
ایجاد یه سوراخ دایره ای در فرم
یه لرزاننده دیگر فرم

باز و بستن سی دی رام
باز شدن فرم همراه با افکت

از کار انداختن Alt+F4 در ویندوز
با کلیک برروی Button اینترنت اکسپلورر باز شه و بره تو سایت موردنظر شما(Linker)

فرم دایره وار

Search in Database
ReStart Windows
Shake Form

مخفی کردن استارت باتن
 

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

بالا