تبليغاتX
آموزش دلفی
ترفندهای دلفی

به زودی ترفندهای جدید در این وبلاگ گنجانده خواهد شد ...

+ نوشته شده در  جمعه 1386/05/12ساعت 22:32  توسط هوشنگ شیشه لو | 
   چطور می توان Desktop از  عکس گرفت ؟

روی فرمتون یک Button ، یک SaveDialog (از پالت Dialog) ، و یک Image بگذارید .

روی رویداد OnClick کلید خطوط زیر را بنویسید :

 

Image1.Width:=DesktopCanvas.ClipRect.Right;

Image1.Height:=DesktopCanvas.ClipRect.Bottom;

Image1.Canvas.CopyRect(Rect(0,0,1024,768),

DesktopCanvas,Rect(0,0,1024,768));

 If SaveDialog1.Execute then

   Image1.Picture.Bitmap.SaveToFile(SaveDialog1.FileName);

 

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:57  توسط هوشنگ شیشه لو | 

  چگونه می توان از طریق برنامه نویسی CD-Romرا باز و  بسته کرد ؟

 

ابتدا روی فرمتون دو کلید بذارید ، کپشن آنها رو به Open و Close تغییر بدهید :

برای انجام این کار نیاز داریم که یونیت MMSystem را قابل استفاده کنیم برای این کار در زیر implementation می نویسیم :

Uses MMSystem;

برای کلید Open خط زیر را بنویسید:

mciSendString('Set cdaudio door open wait',nil,0,handle);

و برای کلید Close هم خط زیر را بنویسید:

mciSendString('Set cdaudio door Closed wait',nil,0,handle);

 

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:56  توسط هوشنگ شیشه لو | 

   آیا می توان فرمی داشت که در آن سوراخی وجود داشته باشد؟

     بله ، این کار به راحتی انجام می شه ، اسکریپت زیر رو در رویداد OnPaint فرمتون کپی کنید:

 

Procedure TForm1.FormPaint(Sender: TObject);

Var

 Wnd:HWnd;

 R1,R2:HRGN;

 R:TRect;

Begin

  Wnd:=Application.MainForm.Handle;

  GetWindowRect(Wnd,R);

  R1:=CreateRectRgn(0,0,R.Right-R.Left,R.Bottom-R.Top);                             

  R2:=CreateEllipticRgn(10,30,150,120);

  CombineRgn(R1,R1,R2,RGN_DIFF);

  SetWindowRgn(Wnd,R1,true);

End;

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:54  توسط هوشنگ شیشه لو | 
چطور می توان Hint  (ToolTip) ی با فونتی متفاوت از فونت استاندارد که ویندوز برای Hin داره ، داشت ؟

 قبل از Type  اصلی برنامه خطوط زیر رو وارد کنید                                                             

   TMyHint=Class (ThinTWindow(

   Constructor Create (Aowner:TComponent);override;

   End;

با این کار ما یک کلاس جدیدی از Hint رو برای دلفی تعریف کردیم .

 

و حالا خطوط زیر را در زیر  Implementation بنویسید :

 

Constructor TMyhint.Create(Aowner:TComponent);

Begin

  inherited Create (Aowner);

  Canvas.Font.Name:=’Arial’;

  Canvas.Brush.Color:=ClBlue;

End;

و با این کار ساختار TMyHint را بوجود آوردیم ، یعنی خواستیم که فونت آن Arial  و رنگ آن آبی باشد.

سپس در انتها برای اینکه این ساختار در برنامه اعمال شود خطوط زیر در قسمت OnCreate فرم

 

اصلی برنامه کپی کنید :

Application.ShowHint:=False;

 HintWindowClass:=TMyhint;

Application.ShowHint:=True;

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:53  توسط هوشنگ شیشه لو | 

   هیچ می دونستید در دلفی می توان بدون داشتن هیچ کامپوننت یا ocx خاصی فرم ها را با افکت های مختلف نشون داد؟

برای انجام این کار در رویداد OnCreate  فرمی که می خواهید با افکت باز بشه خط زیر را اضافه کنید :

  AnimateWindow(Form1.Handle, 300, AW_Center);

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

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:51  توسط هوشنگ شیشه لو | 
 تا الان شده که کسی پشت سیستم شما بشینه و برنامه هاتونو نگاه کنه و بعدانکار کنه بگه اون ساعت کار نکردم.
با این برنامه می تونید زمان و تاریخ دقیق آخرین دسترسی به یک فایل  روببینید.

خوب شروع می کنیم یک Button , یک Memo روی فرم بذارید وبرای Button دستورات زیر را بنویسید. 

 

procedure TForm1.Button1Click(Sender: TObject);
var
SearchRec : TSearchRec;
Success : integer;
DT : TFileTime;
ST : TSystemTime;
begin
Memo1.Font.Name:='Tahoma';
Success := SysUtils.FindFirst('c:\Yahoo!\YPager.exe'{ اسم و آدرس فایل با پسوند },faAnyFile,SearchRec);
if (Success = 0) and
((SearchRec.FindData.ftLastAccessTime.dwLowDateTime <> 0 ) or
(SearchRec.FindData.ftLastAccessTime.dwHighDateTime <> 0 )) then
begin
FileTimeToLocalFileTime(SearchRec.FindData.ftLastAccessTime,DT);
FileTimeToSystemTime(DT,ST);
Memo1.Lines.Clear;
Memo1.Lines.Add('آخرین زمان و تاریخ دسترسی به فایل ');
Memo1.Lines.Add('سال = ' + IntToStr(ST.wYear));
Memo1.Lines.Add('ماه = ' + IntToStr(ST.wMonth));
Memo1.Lines.Add('روز از هفته= ' + IntToStr(ST.wDayOfWeek));
Memo1.Lines.Add('روز = ' + IntToStr(ST.wDay));
Memo1.Lines.Add('ساعت = ' + IntToStr(ST.wHour));
Memo1.Lines.Add('دقیقه = ' + IntToStr(ST.wMinute));
Memo1.Lines.Add('ثانیه= ' + IntToStr(ST.wSecond));
Memo1.Lines.Add('میلی ثانیه = ' +IntToStr(ST.wMilliseconds));
end;
SysUtils.FindClose(SearchRec);

end;

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:47  توسط هوشنگ شیشه لو | 

محیط دلفی برای برنامه نویسی یکی از بهترین محیطهای برنامه نویسی است گذشته از کارکرد داخلی و کمژایلر آن که بسیار قوی و سریع است ُ محیط آن یعنی 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 را بزنید. در اینحالت اگر روی کد تابع باشید به قسمت تعریف آن خواهید رفت.

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:43  توسط هوشنگ شیشه لو | 
انجام این کار بسیار ساده است. برای این کار کافی است بر روی فرم خود یک 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 فرمتان دستور زیر را اضافه نمایید.

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:40  توسط هوشنگ شیشه لو | 

توسط این کد می توانید تشخیص دهید که ویندوز چه مدت است که در حال اجراست


function UpTime: string;
const
  ticksperday: Integer    = 1000 * 60 * 60 * 24;
  ticksperhour: Integer   = 1000 * 60 * 60;
  ticksperminute: Integer = 1000 * 60;
  tickspersecond: Integer = 1000;
var
  t:          Longword;
  d, h, m, s: Integer;
begin
  t := GetTickCount;

  d := t div ticksperday;
  Dec(t, d * ticksperday);

  h := t div ticksperhour;
  Dec(t, h * ticksperhour);

  m := t div ticksperminute;
  Dec(t, m * ticksperminute);

  s := t div tickspersecond;

  Result := 'Uptime: ' + IntToStr(d) + ' Days ' + IntToStr(h) +

 ' Hours ' + IntToStr(m) + ' Minutes ' + IntToStr(s) + ' Seconds'; 

end;
//Sample

procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.Caption := UpTime;
end;

+ نوشته شده در  یکشنبه 1386/05/07ساعت 0:38  توسط هوشنگ شیشه لو |