PDA

View Full Version : نمونه کدی بسیار ساده از برخی امکانات دلفی 2010



vcldeveloper
پنج شنبه 12 شهریور 1388, 06:35 صبح
امروز بعد از سحر خوابم نگرفت، یک نگاهی به فایل های جدیدی که به دلفی 2010 اضافه شدند انداختم، و محض تفریح این کد ساده را نوشتم. این کد مثال ساده ایی هست از:

1- کلاس TDirectory کار با پوشه ها، در یونیت جدید IOUtils.
2- کلاس جدید TStopWatch برای اندازه گیری دقیق زمان سپری شده، و دریافت خروجی در مقیاس های مختلف، در یونیت جدید Diagnostics.
3- کامپوننت TTouchKeyboard برای نمایش یک صفحه کلید مجازی بر روی صفحه نمایش، با قابلیت پشتیبانی از نمایشگرهای لمسی و قلم دیجیتال.
4- چگونگی کارکرد Gesture در دلفی 2010.

کاری که این کد انجام میده خیلی ساده هست:


فایل های موجود در پوشه مورد نظر کاربر را در Memo مورد نظر لیست میکنه.
مدت زمان دریافت لیست فایل ها، و نمایش آنها در Memo در مقیاس ثانیه به کاربر نمایش داده میشه.
در صورت کلیک بر روی آیکن صفحه کلید در گوشه سمت راست Edit، صفحه نمایش مجازی نمایش داده میشه، و کاربر میتونه از آن برای ورود متن در کادر آدرس استفاده کنه. اگر زبان صفحه کلید را در ویندوز فارسی کنید (مثلا با استفاده از Alt+Shift)، کلیدهای صفحه نمایش مجازی هم فارسی میشند. با کلیک مجدد بر روی آیکن صفحه کلید، صفحه کلید مجازی ناپدید میشه.
در صورتی که با موس یا قلم دیجیتال، یک نیم دایره بر روی Memo بکشید، عمل جستجو تکرار میشه. اگر صفحه نمایش لمسی داشته باشید، می تونید نیم دایره را با انگشت بر روی صفحه نمایش بکشید. این برای نمایش قابلیت Gesture در دلفی 2010 هست؛ یعنی کنترل ها می توانند به اشاره هایی که شما با موس، یا قلم، یا انگشت بر روی صفحه انجام می دهید، واکنش نشان دهند. در صورت استفاده از موس، دقت کنید که برای رسم نیم دایره باید کلید چپ موس را پایین نگهدارید (مثل عمل Drag کردن).


از آنجایی که خیلی ها هنوز دلفی 2010 ندارند که کد را کامپایل کنند، فایل EXE را هم به همراه سورس پیوست کردم.




unit Unit1;

interface

uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, ImgList,
ExtCtrls, Keyboard, GestureMgr;

type
TForm1 = class(TForm)
btnSearch: TButton;
mmoResult: TMemo;
lblResultCount: TLabel;
ImageList1: TImageList;
lblElapsedTime: TLabel;
edtPath: TButtonedEdit;
lblPath: TLabel;
TouchKeyboard1: TTouchKeyboard;
GestureManager1: TGestureManager;
procedure btnSearchClick(Sender: TObject);
procedure edtPathRightButtonClick(Sender: TObject);
procedure mmoResultGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses IOUtils, Types, Diagnostics;

{$R *.dfm}

procedure TForm1.btnSearchClick(Sender: TObject);
var
ResultArray: TStringDynArray;
S: string;
Stopwatch: TStopwatch;
begin
Stopwatch.Start;
ResultArray := TDirectory.GetFiles(edtPath.Text);
mmoResult.Lines.BeginUpdate;
try
mmoResult.Clear;
for S in ResultArray do
mmoResult.Lines.Add(S);
finally
mmoResult.Lines.EndUpdate;
end;
Stopwatch.Stop;

lblElapsedTime.Caption := 'Elapsed time (s): ' + IntToStr(Stopwatch.Elapsed.Seconds);
lblResultCount.Caption := 'Number of files found: ' + IntToStr(Length(ResultArray));
end;

procedure TForm1.edtPathRightButtonClick(Sender: TObject);
begin
TouchKeyboard1.Visible := not TouchKeyboard1.Visible;
if TouchKeyboard1.Visible then
edtPath.SetFocus;
end;

procedure TForm1.mmoResultGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
case EventInfo.GestureID of
sgiSemiCircleLeft,
sgiSemiCircleRight : btnSearch.Click;
end;
end;

end.