delphi ileri seviye programlama bölmü 3

23
DELPHİ XE5 İLERİ SEVİYE PROGRAMLAMA

Upload: wqphnrdo

Post on 23-Jun-2015

392 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Delphi ileri seviye programlama bölmü 3

DELPHİ XE5 İLERİ SEVİYE PROGRAMLAMA

Page 2: Delphi ileri seviye programlama bölmü 3

İÇERİK

Dosya İndirme (Http, Ftp)  Klasör ve Dosya Arşivleme İşlemleri  Ses Dosyaları Oynatma  Kameradan Görüntü Alma İşlemleri  Veri Şifreleme Örnekleri (md5, sha1) Program Ayarlarını Şifreleme 

Page 3: Delphi ileri seviye programlama bölmü 3

DOSYA İNDİRME

Delphi 7 ve üzeri sürümlerinde geliştirdiği özellik sayesinde URL üzerinden indirme işlemi yapabiliyor ve bu işlemin ilerlemesi izletebiliyor.

Page 4: Delphi ileri seviye programlama bölmü 3

Dosya indirme durumunu bir progressbar ile görsel olarak izlemek yada indirme aşamalarını takip etmek için bu TDownloadURL nesnesinin bir olayı olan OnDownloadProgress metodu için sunulan hazır metoduda private olarak declare etmeliyiz.

Ve private bloğuna aşağıda ki kod satırını ekliyoruz;

procedure URL_OnDownloadProgress(Sender; TDownLoadURL;Progress, ProgressMax: Cardinal;StatusCode: TURLDownloadStatus;StatusText: String; var Cancel: Boolean) ;

Page 5: Delphi ileri seviye programlama bölmü 3

Ve implementation altına URL_OnDownloadProgress prosedürünü şu şekilde oluşturalım;

procedure URL_OnDownloadProgress;begin   ProgressBar1.Max:= ProgressMax;   ProgressBar1.Position:= Progress;end;

Formumuza eklediğimiz bir progressbar olduğunu ve adınında Progressbar1 olduğunu varsayararak, oluşan metodumuz hazır.

Page 6: Delphi ileri seviye programlama bölmü 3

Bir buton ekleyelim ve OnClick olayına şunu yazalım , 

 with TDownloadURL.Create(self) do   try     URL:='http://wwww.metincengel.com/dosya.zip'; //Indireceğimiz dosya URL si     FileName := 'c:\dosya.zip';//Nereye ve ne isimde indireceğimizi belirtiyoruz     OnDownloadProgress :=URL_OnDownloadProgress; // az önce oluşturduğumuz metodu , OnDownloadProgress olayı tetiklendiğinde çalışması için atamasını yaptık     ExecuteTarget(nil) ; //İndirme işlemini başlattık.       finally     Free;       end;  end;

Page 7: Delphi ileri seviye programlama bölmü 3

KLASÖR VE DOSYA ARŞİVLEME İŞLEMLERİ

Bu bölümde delphi programını kullanarak dosya açma ve dosyaya kaydetme işlemelerini gerçekleştireceğiz.

Page 8: Delphi ileri seviye programlama bölmü 3

Aktif dizini değiştirmek için ;

Chdir(Klasör_Yolu);

Aşağıdaki ki gibi bir kod sayesinde aktif dizin C:\WinNt\System32 olmaktadır. Bu aşamadan sonra dosyanızı sadece ismini belirterek çalıştırmanız (System32 içerisindeki) mümkün olacaktır. 

Procedure TForm1.Button1Click(Sender; Object); 

begin 

Chdir(‘C:\WinNt\System32’); // Aktif dizini değiştir 

end; 

Page 9: Delphi ileri seviye programlama bölmü 3

Dosyayı kapatmak için;

CloseFile(Dosya_Yolu); 

Klasör oluşturmak için kullanılan bir fonksiyondur. Şayet belirtilen yerde klasörü başarıyla oluşturulursa geriye true değerini, oluşturmazsa da false değerini döndürecektir. 

CreateDir(Klasör_Yolu); 

Parametre ile belirtilen yoldaki dosyayı silmek için kullanılan bir fonksiyondur. Şayet silme işlemi başarılı bir şekilde gerçekleştiyse true değerini, aksi takdirde de false değerini döndürecektir. 

DeleteFile(Dosya_Yolu); 

Page 10: Delphi ileri seviye programlama bölmü 3

Parametre ile belirtilen yolda klasörün var olup olmadığını kontrol eden fonksiyondur. Fonksiyondan true değerinin dönmesi, belirtilen yolda o klasörün var olduğu anlamını taşımaktadır.

DirectoryExists(Klasör_Yolu): 

 Parametre ile belirtilen sürücü içerisindeki boş alanı öğrenmek için kullanabileceğiniz bir fonksiyondur. Sürücü numaraları ve değerleri aşağıda verilmiştir.

DiskFree(Sürücü_Numarası);

Dosyanın oluşturma tarihini hesaplayabilen bir fonksiyondur.

FileAge(Dosya_Yolu);

Page 11: Delphi ileri seviye programlama bölmü 3

Tek dosya değilde ( tüm txt uzantılı dosyalar veya vs. vs. ) tüm dosyalar listelenecek ise yani aynı isme ve özelliğe sahip diğer dosyaların da bulunması gerekiyorsa bu durumlarda kullanacağınız fonksiyondur.

findNext(Dosya); 

Parametresiz kullanılan bu fonksiyon sayesinde aktif çalışılan klasörün yolu öğrenebilir. 

GetCurrentDir; 

Parametre ile belirtilen yoldaki klasörü silme için kullanılan bir fonksiyondur. Dikkat edeceğiniz husus silinecek olan klasörün içinin boş olması gerektiğidir.

RemoveDir(Klasör_Yolu);

Page 12: Delphi ileri seviye programlama bölmü 3

SES DOSYALARINI OYNATMA

Delphi xe5 programını kullanarak bilgisayarınız üzerindeki bir ses dosyasını dinleyebilirsiniz bunun için aşağıdaki kod satırını yazmanız yeterlidir.

PlaySound('C:\WINDOWS\Media\chimes.wav', 0, SND_ASYNC or SND_FILENAME or SND_NODEFAULT);

Page 13: Delphi ileri seviye programlama bölmü 3

KAMERADAN GÖRÜNTÜ ALMA İŞLEMLERİ

Bu işlem sayesinde delphi xe5 programı kullanılarak bilgisayarınız üzerinde takılı olan web kameradan görüntü alabileceksiniz.

Page 14: Delphi ileri seviye programlama bölmü 3

function CapOpenDriver : Boolean;

var

Retc : LongInt;

DriverIndex : Integer;

DriverStarted : boolean;

achDeviceName : array [0..80] of Char;

achDeviceVersion : array [0..100] of Char;

achFileName : array [0..255] of Char;

begin

Result := FALSE;

if gCapVideoArea = nil then exit;

Result := TRUE;

// Create the Video Capture Window

ghCapWnd := capCreateCaptureWindow( PChar('KruwoSoft'),

WS_CHILD or WS_VISIBLE, 0, 0,

gCapVideoArea.Width, gCapVideoArea.Height,

gCapVideoArea.Handle, 0);

if ghCapWnd <> 0 then

begin

Page 15: Delphi ileri seviye programlama bölmü 3

// Install Status-Callback-Function

retc := capSetCallbackOnStatus(ghCapWnd, LongInt(0));

if retc <> 0 then

begin

retc := capSetCallbackOnStatus(ghCapWnd, LongInt(@StatusCallbackProc));

if retc <> 0 then

begin

// Open Installed Video Driver

DriverIndex := 0;

repeat

DriverStarted := CapInitDriver( DriverIndex );

if NOT DriverStarted then DriverIndex := DriverIndex + 1;

until (DriverStarted = TRUE) OR (DriverIndex >= MAXVIDDRIVERS);

// Keep Name of Video Driver

if capGetDriverDescription( DriverIndex,

achDeviceName, 80,

achDeviceVersion, 100 ) then

begin

gCapVideoDriverName := string(achDeviceName);

end;

// Set Capture FileName

StrPCopy(achFileName, gCapVideoFileName);

retc := capFileSetCaptureFile(ghCapWnd, LongInt(@achFileName));

if retc = 0 then

begin

showmessage(gCapVideoDriverName+': Error in capFileSetCaptureFile');

end;

exit;

end;

Page 16: Delphi ileri seviye programlama bölmü 3

VERİ ŞİFRELEME İŞLEMLERİ

Kullanıcı giriş paneli yada benzeri güvenlik gerektiren işlemler yapılırken, kullanıcı isimlerinin ve şifrelerinin bulunduğu kısım farklı bir yöntemle kendi içinde şifrelenir bu şekilde dış tehditlere karşı korunmuş olur. Bunun için kullanılan en sık yöntem ise MD5 kodlamadır.

Şimdi size örnek bir md5 kodlama göstereceğim;

Page 17: Delphi ileri seviye programlama bölmü 3

unit MD5;

interface

typeDizi= Array of integer;

function MD_5(str: string): string;

implementation

function rhex(num: integer): string;varstr,hex_chr: string;j: integer;beginhex_chr:='0123456789abcdef';str:=";for j:=0 to 3 dostr:=str+hex_chr[((num shr (j*8+4)) and $F)+1]+hex_chr[((num shr (j*8)) and $F)+1];Result:=str;end;

Page 18: Delphi ileri seviye programlama bölmü 3

function str2blks_MD5(str: string): Dizi;varnblk: integer;blks: Dizi;i: integer;beginnblk:=((length(str)+8) shr 6)+1;SetLength(blks,nblk*16);for i:=0 to nblk*16-1 do blks[i]:=0;for i:=0 to length(str)-1 doblks[i shr 2]:=blks[i shr 2] or ((ord(str[i+1]) shl ((i mod 4)*8)));blks[i shr 2]:=blks[i shr 2] or ($80 shl ((i mod 4)*8));blks[nblk*16-2]:=length(str)*8;Result:=blks;end;function add(x,y: integer): integer;varlsw,msw: integer;beginlsw:=(x and $FFFF)+(y and $FFFF);msw:=(x shr 16)+(y shr 16)+(lsw shr 16);Result:=(msw shl 16) or (lsw and $FFFF);end;

Page 19: Delphi ileri seviye programlama bölmü 3

function rol(num,cnt: integer): integer;

beginResult:=(num shl cnt) or (num shr (32 - cnt));end;

function cmn(q, a, b, x, s, t: integer): integer;beginResult:= add(rol(add(add(a, q), add(x, t)), s), b);end;

function ff(a, b, c, d, x, s, t: integer): integer;BeginResult:= cmn((b and c) or ((not b) and d), a, b, x, s, t);end;

function gg(a, b, c, d, x, s, t: integer): integer;BeginResult:= cmn((b and d) or (c and (not d)), a, b, x, s, t);end;

Page 20: Delphi ileri seviye programlama bölmü 3

function hh(a, b, c, d, x, s, t: integer): integer;BeginResult:= cmn(b xor c xor d, a, b, x, s, t);end;

function ii(a, b, c, d, x, s, t: integer): integer;BeginResult:= cmn(c xor (b or (not d)), a, b, x, s, t);end;

function MD_5(str: string): string;varx: dizi;a,b,c,d,olda,oldb,oldc,oldd: integer;i: integer;beginx:= str2blks_MD5(str);a:= 1732584193;b:= -271733879;c:= -1732584194;d:= 271733878;

Page 21: Delphi ileri seviye programlama bölmü 3

a := hh(a, b, c, d, x[i+ 5], 4 , -378558);d := hh(d, a, b, c, x[i+ 8], 11, -2022574463);c := hh(c, d, a, b, x[i+11], 16, 1839030562);b := hh(b, c, d, a, x[i+14], 23, -35309556);a := hh(a, b, c, d, x[i+ 1], 4 , -1530992060);d := hh(d, a, b, c, x[i+ 4], 11, 1272893353);c := hh(c, d, a, b, x[i+ 7], 16, -155497632);b := hh(b, c, d, a, x[i+10], 23, -1094730640);a := hh(a, b, c, d, x[i+13], 4 , 681279174);d := hh(d, a, b, c, x[i+ 0], 11, -358537222);c := hh(c, d, a, b, x[i+ 3], 16, -722521979);b := hh(b, c, d, a, x[i+ 6], 23, 76029189);a := hh(a, b, c, d, x[i+ 9], 4 , -640364487);d := hh(d, a, b, c, x[i+12], 11, -421815835);c := hh(c, d, a, b, x[i+15], 16, 530742520);b := hh(b, c, d, a, x[i+ 2], 23, -995338651);

Page 22: Delphi ileri seviye programlama bölmü 3

a := ii(a, b, c, d, x[i+ 4], 6 , -145523070);d := ii(d, a, b, c, x[i+11], 10, -1120210379);c := ii(c, d, a, b, x[i+ 2], 15, 718787259);b := ii(b, c, d, a, x[i+ 9], 21, -343485551);

a := add(a, olda);b := add(b, oldb);c := add(c, oldc);d := add(d, oldd);

inc(i,16);end;Result:= rhex(a) + rhex(b) + rhex(c) + rhex(d);end;

end

Page 23: Delphi ileri seviye programlama bölmü 3

SON