2. MATEMATİKSEL İŞLEMLER
Tam sayılarla işlem yapabilmemiz için “integer” değişkenini,
Reel sayılarla işlem yapabilmemiz için “real” değişkenini tanımlamamız
gerekiyor.
Delphi XE5 programında matematiksel işlemler yapmak için sayısal değişkenler
kullanacağız.
3. Tam Sayılarda Toplama İşlemi:
Toplama işlemi yapmadan önce formumuza iki adet edit ve bir adet buton
ekleriz.
StrToFloat(); => String tipi Float tipe dönüştürür (Reel sayılar için.)
FloatToStr(); => Float tipi String tipe dönüştürür (Reel sayılar için.)
StrToInt(); => String tipi Integer tipe dönüştürür (Tam sayılar için.)
IntToStr(); => Integer tipi String tipe dönüştürür (Tam sayılar için.)
Toplama işlemi “+” operatörü ile yapılır.
MATEMATİKSEL İŞLEMLER
4. KODLAR YAZILDIKTAN SONRA SHIFT+CTRL+F9 TUŞLARINA AYNI ANDA BASILARAK IŞLEM YAPTIRILIR.
MATEMATİKSEL İŞLEMLER
6. KODLAR YAZILDIKTAN SONRA SHIFT+CTRL+F9 TUŞLARINA AYNI ANDA BASILARAK
IŞLEM YAPTIRILIR.
MATEMATİKSEL İŞLEMLER
7. Reel sayılarda toplama yapalım ama sonucu yazdırırken yuvarlayıp tam sayı olarak
yazdıralım;
Round(); => Reel sayıyı (Real) Tam Sayı (Integer) yapar (yuvarlar.)
MATEMATİKSEL İŞLEMLER
8. Kodlar yazıldıktan sonra shift+ctrl+F9 tuşlarına aynı anda basılarak işlem yaptırılır.
MATEMATİKSEL İŞLEMLER
9. Tam Sayılarda Çıkarma İşlemi:
Çıkarma işlemi “-” operatörü ile yapılır.
MATEMATİKSEL İŞLEMLER
10. Kodlar yazıldıktan sonra shift + ctrl +F9 tuşlarına aynı anda basılarak işlem yaptırılır.
MATEMATİKSEL İŞLEMLER
11. Tam Sayılarda Çarpma İşlemi:
Çarpma işlemi “*” operatörü ile yapılır.
MATEMATİKSEL İŞLEMLER
12. Kodlar yazıldıktan sonra shift+ctrl+F9 tuşlarına aynı anda basılarak işlem yaptırılır.
MATEMATİKSEL İŞLEMLER
13. Tam Sayılarda Bölme İşlemi:
Bölme işlemi “/” operatörü ile yapılır.
Bölme işlemi yapılırken sonuç değişkeni reel olmak zorundadır.
Kalansız bölme için “div” komutunu kullanabiliriz.
Kalansız bölme yapılırken sonuç değişkeni Reel olmak zorunda değildir!
MATEMATİKSEL İŞLEMLER
14. Kodlar yazıldıktan sonra shift+ctrl+F9 tuşlarına aynı anda basılarak işlem yaptırılır.
MATEMATİKSEL İŞLEMLER
15. STRİNG METODLAR
CompareStr(metin1,metin2)
Tanımlama: function CompareStr(const S1, S2: string): Integer;
Birinci ve ikinci parametre ile girilen metinlerin eşit olup olmadıklarını
kontrol edebilen bir fonksiyondur. İkinci metnin içerisinde birinci metni
arar, şayet bulursa negatif, bulamazsa pozitif, ikisi aynı ise sıfır değerini
döndürür.
17. STRİNG METODLAR
Copy(metin,index,adet)
Tanımlama:function Copy(S; Index, Count: Integer): string;
function Copy(S; Index, Count: Integer): array;
Birinci parametreyle girilen metnin içeriğinden, ikinci parametrede belirtilen
karakterden sonra, üçüncü parametreyle belirtilen adet kadar karakteri söküp
alabilen bir fonksiyondur. Fonksiyondan geriye dönen değer yine bir AnsiString veri olacağı
için sonuç herhangi bir tip dönüştürme işlemine gerek kalmadan
direkt olarak yazdırılabilir. Aşağıda bu fonksiyona ait örneklendirme yapılmıştır.
Dikkatlice inceleyiniz.
18. STRİNG METODLAR
Delete (metin,index,adet)
Tanımlama: procedure Delete(var S: string; Index, Count:Integer);
Birinci parametre ile girilen metin değerinden, ikinci parametre ile girilen
karakterden sonra, üçüncü parametreyle girilen sayı kadar karakteri söküp atan
bir prosedürdür. Dikkat edeceğiniz husus, yapılan değişikliğin metin isimli
parametrenin değerine yansıyacağıdır.
19. STRİNG METODLAR
DupeString (metin,adet)
Tanımlama: function DupeString(const AText: string; ACount: Integer): string;
Birinci parametreyle girilen metni, ikinci parametreyle girilen adet kadar yan yana yazmak
için kullanılan bir fonksiyondur.
20. STRİNG METODLAR
Insert (eklenecek_metin,metin,başlangıç_karakteri)
Tanımlama: procedure Insert (Source: string; var S: string; Index: Integer);
Birinci parametreyle girilen metni, ikinci parametreyle girilen metne, üçüncü
parametrede belirtilen karakterden sonra eklemek için kullanılan bir
prosedürdür. Burada dikkat edeceğiniz husus, yapılan değişikliğin ikinci
parametre değerine yansıyacağıdır.
21. STRİNG METODLAR
LeftBStr(metin,adet)
Tanımlama:function LeftBStr(const AText: AnsiString; const AByteCount: Integer):
AnsiString;
Birinci parametreyle belirtilen metinden, ikinci parametreyle belirtilen adet
kadar karakteri söküp alabilen bir fonksiyondur.
Daha öncede aynı işlemi yapan fonksiyonu göstermiştik. Başında “Ansi” olan
fonksiyon ve prosedürlerin kullanabileceği karakterler daha fazladır. Ama tercih
tamamen sizlere kalmıştır. İstediğiniz fonksiyonu veya prosedürü
kullanabilirsiniz.
22. STRİNG METODLAR
Length(metin)
Tanımlama: function Length(S): Integer;
Parametre ile belirtilen metnin kaç karakterden oluştuğunu hesaplayabilmek için
kullanılan bir fonksiyondur.
Fonksiyondan geriye dönen değer tam sayı tipli olacağı için, başlıkta yazdırmak
tip dönüştürme fonksiyonu sayesinde yapılabilmektedir.
23. STRİNG METODLAR
LowerCase(metin)
Tanımlama: function LowerCase(const S: string): string;
AnsiLowerCase (daha önce izah edildi) fonksiyonunun yaptığı işi yapar (Ansi
kütüphanesinin daha zengin olduğunu hatırlatalım). Parametre olarak girilen
metni küçük harfe dönüştürmek için kullanılır.
24. STRİNG METODLAR
MidStr(metin,başlangıç,adet)
Tanımlama:function MidStr(const AText: AnsiString; const AStart, ACount: Integer):
AnsiString; overload;
function MidStr(const AText: WideString; const AStart, ACount: Integer):
WideString; overload;
Birinci parametre ile belirtilen metinden, ikinci parametre ile girilen başlangıç
karakterinden başlayarak, üçüncü parametre ile girilen adet kadar karakteri
parçalayıp almak için kullanılan bir fonksiyondur.
25. STRİNG METODLAR
Pos(metin1,metin2)
Tanımlama: function Pos(Substr: string; S: string): Integer;
Birinci parametre ile girilen değer ile ikinci parametre ile girilen değeri
karşılaştırmak için kullanılan bir fonksiyondur. Şayet iki parametre farklı
değerler içeriyorsa (içinde bulunmuyor ise) sonuç “0” olacaktır.
26. STRİNG METODLAR
RightStr(metin,sağdan_kaç_karakter)
Tanımlama:function RightStr(const AText: AnsiString; const ACount: Integer):
AnsiString; overload;
function RightStr(const AText: WideString; const ACount: Integer):
WideString; overload;
Birinci parametre ile belirtilen metnin sonundan, ikinci parametre ile belirtilen
adet kadar karakteri söküp almak için kullanılan fonksiyondur (AnsiRightStr
fonksiyonunun yaptığı işi yapar).
29. STRİNG METODLAR
Str(sayi,metin)
Tanımlama: procedure Str(X [: Width [: Decimals ]]; var S);
Birinci parametre ile girilen sayıyı (ondalıklı veya tam sayı), ikinci parametre ile
girilen metne aktarmak için kullanılan bir prosedürdür. İlk parametre parasal
tipte bir değişken de olabilir.
32. STRİNG METODLAR
StuffString(metin,başlangıç,uzunluk,yeni_metin)
Tanımlama: function StuffString(const AText: string; AStart, ALength:
Cardinal; const
ASubText: string): string;
StringReplace fonksiyonuna benzer iş görmektedir. Aralarındaki fark,
değiştirilecek olan kısmın burada karakter sayısı ile belirlenmesidir. Aşağıda bu
fonksiyon örneklendirilmiştir.
33. STRİNG METODLAR
Trim(metin)
Tanımlama: function Trim(const S: string): string; overload;
function Trim(const S: WideString): WideString; overload;
Parametre ile girilen metnin sol ve sağındaki tüm boşlukları atmak için
kullanılan bir fonksiyondur.
Bilhassa yanlışlıkla space tuşuna basılması durumunda oluşabilecek olan
hataları engellemek amacıyla kullanılan bir fonksiyondur. Bu fonksiyondan
dolayı kelimeler arasında bulunan boşluklar hiç bir değişikliğe uğramazlar
(aynen kalırlar).
34. STRİNG METODLAR
TrimLeft(metin)
Tanımlama: function TrimLeft(const S: string): string; overload;
function TrimLeft(const S: WideString): WideString; overload;
Parametre ile girilen metnin sol tarafında bulunan boşlukları atmak için kullanılan
fonksiyondur. Son kısımda bulunan boşluklara dokunmaz.
35. STRİNG METODLAR
TrimRight(metin)
Tanımlama:
function TrimRight(const S: string): string; overload;
function TrimRight(const S: WideString): WideString; overload;
Parametre ile girilen metnin sağ tarafında bulunan boşlukları atmak için
kullanılan fonksiyondur. Başlangıç kısımda bulunan boşluklara dokunmaz.
36. STRİNG METODLAR
UpperCase(metin)
Tanımlama: function UpperCase(const S: string): string;
Parametre ile girilen metindeki karakterlerin tamamını büyük harfe çevirmek
için kullanılan fonksiyondur. Şayet metin içerisinde büyük harfe rastlarsa onlara
dokunmayacaktır. Daha önce örneklendirildiği için tekrar değinilmeyecektir.
37. STRİNG METODLAR
WrapText(metin,işlenv,alta_indirecek_karakterler,maxkarakter)
Tanımlama:function WrapText(const Line, BreakStr: string; nBreakChars: TSysCharSet;
MaxCol: Integer):string; overload;
function WrapText(const Line, MaxCol: Integer = 45):string; overload;
Birinci parametrede belirleyeceğiniz metni, üçüncü parametrede belirleyeceğiniz
karakterlerden herhangi bir tanesine rastlaması durumunda alt satıra indirmek
için kullanılan bir fonksiyondur. Aşağıdaki örneği dikkatlice inceleyiniz.
39. STRİNG METODLAR
Ord(karakter)
Tanımlama: function Ord(X);
Parametre ile girilen karakterin ascii değerini hesaplayan bir fonksiyondur.
Fonksiyondan tam sayı tipli bir değer döneceği için yazdırmak için IntToStr tip
dönüştürme fonksiyonunu kullanmalısınız.
Fonksiyonu örneklendirecek olursak; Edit kutusuna girilecek olan karakterin
Ascii karşılığını başlıkta yazdırmak için aşağıdaki gibi “KeyPress” yordamına
kod yazmalısınız.
40. STRİNG METODLAR
Val(metin,değişken,hata)
Tanımlama: procedure Val(S; var V; var Code: Integer);
Birinci parametreyle girilen içeriğin soldan matematiksel anlamı olan kısmını
ikinci parametreye aktarır. Prosedür sayesinde ikinci parametrenin değeri
değişecektir.
41. STRİNG METODLAR
StrToInt(metin)
Tanımlama: function StrToInt(const S: string): Integer;
String içerikli değerleri tam sayıya çevirmek için kullanılan bir fonksiyondur.
Sayısal içeriğe çevrilemeyen bir karaktere rastlarsa hata üretecektir.
42. STRİNG METODLAR
StrToIntDef(metin,varsayılan_değer)
Tanımlama: function StrToIntDef(const S: string; const Default: Integer): Integer;
StrToInt fonksiyonu ile aynı işi yapar. Aralarındaki tek fark şayet sayıya
dönüştürülemeyecek bir değer gönderilirse, bu durumda fonksiyon hata
üretmemekte, ikinci parametre ile belirtilen değeri işleme sokmaktadır. Farkı
anlamanız için aşağıdaki iki örneği dikkatlice inceleyiniz.
Üstteki kodlamada metin değişkeninin içeriğinde “A” karakteri (sayıya
çevrilemez) bulunduğu için, değer isimli değişkenin içeriği ikinci parametre ile
girilen “0” değerine eşit olacaktır. Bu aktarmayı StrToInt fonksiyonu ile
yaparsanız uygulamanız size hata mesajı verecektir.
43. STRİNG METODLAR
StrToFloat(metin)
Tanımlama:function StrToFloat(const S: string): Extended; overload;
function StrToFloat(const S: string; const FormatSettings: TFormatSettings):
Extended; overload;
Parametre ile girilen metni ondalıklı sayıya çevirmek için kullanılan bir
fonksiyondur. Ondalıklı sayıya çevrilemeyecek bir karaktere rastlarsa
uygulamanız hata mesajı verecektir.
44. STRİNG METODLAR
IntToStr(sayi)-FloatToStr(ondalıklı_sayı)
Tanımlama:function IntToStr(Value: Integer): string; overload;
function IntToStr(Value: Int64): string; overload;
Parametre olarak girilen tam sayıyı stringe çevirmek için kullanılan
fonksiyondur. Bilhassa kullanıcının görmesini istediğiniz içerikleri stringe
çevirmek zorunda kalacaksınız.
IntToStr(sayi)-FloatToStr(ondalıklı_sayı)
Tanımlama:function IntToStr(Value: Integer): string; overload;
function IntToStr(Value: Int64): string; overload;
Parametre olarak girilen tam sayıyı stringe çevirmek için kullanılan
fonksiyondur. Bilhassa kullanıcının görmesini istediğiniz içerikleri stringe
çevirmek zorunda kalacaksınız.
Parametre olarak girilen ondalıklı sayıyı string içeriğe çevirmek için kullanılan
fonksiyondur.Diğer fonksiyonlarda yeterince uygulama yapıldığı için tekrar örnek
verilmeyecektir.
45. STRİNG METODLAR
FormatFloat(format_tipi,sayi)
Tanımlama: function FormatFloat(const Format: string; Value: Extended): string;
overload;
function FormatFloat(const Format: string; Value: Extended; const
FormatSettings: TFormatSettings): string; overload;
İkinci parametre ile girilen ondalıklı sayıya, birinci parametre ile belirlenen
formatı uygulayan fonksiyondur. Birinci parametre için belirleyebileceğiniz
format tipleri aşağıda tablo halinde verilmiştir.
Şimdi fonksiyona ait bir örnek yapalım. Aşağıdaki gibi bir form tasarımı
oluşturun.
46. HATA YAKALAMA
Delphi’de Oluşabilecek İllegal Durumları Çözmek:
Yazmış olduğunuz kodlar içerisinde tahmin edebildiğiniz veya
edemediğiniz,hata oluşturmaya müsait bir çok durum olabilir. Bu hatalardan
bir kısmını bildiğimiz kodlarla engellemek mümkün olmakla beraber, diğerleri
için bu mümkün olmayabilir (Mesela Edit kutusu içerisindeki verinin sayısal
olup olmadığını daha başka yollarla kontrol etmek mümkün olabilir). Bu
yüzden bu tip durumlarda, aşağıda göstereceğim lokal ve genel hata
yakalama yöntemlerinden bir tanesini (veya ikisini de) kullanmalısınız.
47. HATA YAKALAMA
Lokal Hata Yakalama:
Lokal hata yakalama tek bir prosedür içerisinde oluşabilecek hataları
programa bildirme amaçlı kullanılan bir yöntemdir. Aşağıda
seçenekleri incelenmektedir.
48. HATA YAKALAMA
Aşağıdaki gibi bir kodunuzun var olduğunu düşünün. Bu kodda Edit içerisine
girilen içerik tamsayıya çevrilerek, tamsayı tipli bir değişkene aktarılmaktadır.
Burada girilen değer içerisinde sayısal olmayan bir karakterin olması programın
kırılmasına (Bir programın kırılması çökmesi demek değildir. Çalışmaya aynen
devam edebilirsiniz. Ama hiç hoş olmayan bir durumun olduğu da
meydandadır.) sebep olacaktır.
50. HATA YAKALAMA
Aşağıdaki örnekte Edit kontrolünün içerisine sayısal içerik girilene kadar
kontrolü kaybetmemesi sağlanmaktadır.
51. HATA YAKALAMA
Try-Finally-End:
Hata olsa da olmasa da işletilecek olan kod satırlarınız varsa, bunları “Finally”
bloğuna yazmalısınız. Yani Finally bloğu hata olsa da olmasa d a program
tarafından işletilecektir. Yapı aşağıda verilmiştir.
Try
//Hataya müsait Kodlar Buraya Yazılacak
Finally
begin
//Hata olsada olmasada işleyecek olan kod bloğu
end;
end;
Genellikle yaratılmış olan objeleri bellekten atma işlemi bu blokta yapılır.
Çünkü hata olsa da olmasa da nesnelerin bellekte kalmaları istenmez.
52. HATA YAKALAMA
Genel Hata Yakalama:
Tüm uygulamanın kullanacağı genel hata yakalama işlemi uygulayacaksanız,
(Windows un yapmış olduğu “Program geçersiz bir işlem yürüttü kapatılacak”
gibi) aşağıdaki gibi hata olduğu zaman işleyecek olan bir prosedür
tanımlamalısınız. Ardından hata olduğu zaman işletilmesi gerektiğini programa
bildirmeniz gerekecektir. Aşağıda bu işlemi adım adım izah edeceğim, lütfen
dikkatlice uygulayınız.
Birinci adımda, programınızın Unit bölümüne geçerek “yakala” ismindeki
prosedürü tanımlayın.
53. HATA YAKALAMA
İkinci adımda imleç prosedürün tanımlandığı satırda iken “Ctrl+Shift+C”
tuşlarına basarak, aşağıdaki prosedürün Delphi tarafından otomatik olarak
oluşturulmasını sağlayın.
54. HATA YAKALAMA
Üçüncü adımda hata oluştuğu anda işleyecek olan kodu bu prosedür içerisine
yazmalısınız. Biz şimdilik aşağıdaki kod satırlarını ekliyoruz.
55. HATA YAKALAMA
Dördüncü adımda, hata oluştuğu zaman yukarıda oluşturulan prosedürün
işletilmesi gerektiğini belirtmeliyiz. Bu iş için en uygun yordamın “OnCreate”
olduğunu düşünüyorum.
56. HATA YAKALAMA
Artık programınızı çalıştırabilirsiniz. Programınızda oluşan tüm hatalar
“yakala” isimli prosedürde belirtilen kodları işletecektir. Tüm kod aşağıda
verilmiştir.
Önemli Uyarı: Bir uygulamada hem lokal hem de global hata yakalama kodları
kullanıldıysa, lokal hata yakalama komutlarının önceliğinin olduğunu
bilmelisiniz. Yani lokal hata yakalama komutlarıyla yakalanan bir hata mesajı,
global hata yakalama komutlarına yakalanmaz.