معلم دلفی

چهارشنبه، آذر ۰۹، ۱۳۸۴

انتقال یک فایل بزرگ از طریق تقسیم به قطعات کوچک در دلفی

گاهی برای انتقال یک فایل بزرگ محدودیت پهنای باند داریم و نمی توانیم آنرا یکجا منتقل کنیم. در این زمیان با تقسیم فایل به قسمتهای کوچک و انتقال هر قسمت به مقصد و در نهایت ساختن فایل اصلی راه حل خوبی است.
در حال حاضر برنامه های زیادی هستند که انتقال فایل از اینترنت را با این روش انجام می دهند و کاربران ایرانی هم بدلیل سرعت اینترنت در ایران از متقاضیان اینگونه برنامه ها هستند.
نمونه این برنامه ها FlashGet یا ReGet هستند.
حال اگر می خواهید اینکار را در دلفی انجام دهید می توانید با استفاده از TStream و سورس کد نمونه زیر اینکار را انجام دهید.



procedure SplitFile(FileName : TFileName; FilesByteSize : Integer) ;
// FileName == file to split into several smaller files
// FilesByteSize == the size of files in bytes
var
fs, ss: TFileStream;
cnt : integer;
SplitName: String;
begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
try
for cnt := 1 to Trunc(fs.Size / FilesByteSize) + 1 do
begin
SplitName := ChangeFileExt(FileName, Format('%s%d', ['._',cnt])) ;
ss := TFileStream.Create(SplitName, fmCreate or fmShareExclusive) ;
try
if fs.Size - fs.Position < FilesByteSize then
FilesByteSize := fs.Size - fs.Position;
ss.CopyFrom(fs, FilesByteSize) ;
finally
ss.Free;
end;
end;
finally
fs.Free;
end;
end;






procedure MergeFiles(FirstSplitFileName, OutFileName : TFileName) ;
// FirstSplitFileName == the name of the first piece of the split file
// OutFileName == the name of the resulting merged file
var
fs, ss: TFileStream;
cnt: integer;
begin
cnt := 1;
fs := TFileStream.Create(OutFileName, fmCreate or fmShareExclusive) ;
try
while FileExists(FirstSplitFileName) do
begin
ss := TFileStream.Create(FirstSplitFileName, fmOpenRead or fmShareDenyWrite) ;
try
fs.CopyFrom(ss, 0) ;
finally
ss.Free;
end;
Inc(cnt) ;
FirstSplitFileName := ChangeFileExt(FirstSplitFileName, Format('%s%d', ['._',cnt])) ;
end;
finally
fs.Free;
end;
end;





بصورت زیر می توان این توابع را صدا زد و مورد استفاده قرار داد.




SplitFile('c:\mypicture.bmp', 1024) ; //into 1 KB files
...
MergeFiles('c:\mypicture._1','c:\mymergedpicture.bmp') ;






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

سه‌شنبه، آذر ۰۸، ۱۳۸۴

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

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

راهنمای وارد کردن اکتیو ایکس در دلفی :

1- دلفی را اجرا کرده و از منوی Component گزینه Import Activex Control را انتخاب نمائید.
2- از لیست نمایش داده شده اکتیو ایکس مورد نظر خود را پیدا کرده و انتخاب نمائید.
3- محل قرار دادن این اکتیو ایکس را در دلفی انتخاب کنید. این کامچوننت بصورت پیش فرض در ActiveX گذاشته می شود.
4- روی Install کلیک کنید.
5- بسته ای که می خواهید این کامپوننت در آن نصب شود را انتخاب نمائید. پیشنهاد می کنم از گزنه های پیش فرض خود دلف یدر این مورد استفاده کنید و چیزی را تغییر ندهید . فقط تائید کنید.
6- بعد از نصب و بستن پنجره های پیام سیستم می توانید در پلت ActiveX کامپوننت را پیدا پیدا کرده و از آن براحتی مانند بقیه کامپوننتهای دلفی استفاده نمائید.

چهارشنبه، آبان ۲۵، ۱۳۸۴

استفاده از توابع تلفن ویندوز

در API ویندوز مجموعه ای از توابع وجود دارند که با استفاده از آنها می توان تمام کارهای مربطو به تلفن و ارتباط برنامه از طریق تلفن را انجام داد.
این مجموعه با نام TAPI شناخته شده است.
برای استفاده از این مجموعه در دلفی در پروژه JEDI مجموعه ای قرار داده شده که افراد علاقه مند می توانند آنرا دانلود کرده و استفاده نمایند.
برای دانلود می توانید به صفحه سایت JEDI در این زمینه مراجعه نمائید.
ftp://delphi-jedi.org/api/TAPI.zip (162k)
در آینده سعی خواهم کرد نمونه سورس کدهای این برنامه را هم در اینجا ارائه نمایم.

برای اطلاعات بیشتر در زمینه این API می توانید به سایت زیر مراجعه نمائید.
http://www.microsoft.com/windows2000/techinfo/howitworks/communications/telephony/iptelephony.asp

در ضمن تعریف دیگری هم در سایت ویکی پدیا در این زمینه وجود دارد
http://en.wikipedia.org/wiki/Telephony_Application_Programming_Interface

اطلاعات بیشتر در مورد تمامی توابع API که در پروژه JEDI تعریف شده اند را می توانید در این سایت ببینید
http://www.delphi-jedi.org/APILIBRARY:226293