delphi ileri seviye programlama bölmü 3
TRANSCRIPT
DELPHİ XE5 İLERİ SEVİYE PROGRAMLAMA
İÇ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
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.
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) ;
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.
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;
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.
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;
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);
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);
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);
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);
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.
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
// 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;
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;
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;
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;
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;
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;
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);
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
SON