https://www.youtube.com/watch?v=jEtDyg4ywdE
Örnek Uygulama
- 1.Adım
- Function ve Procedure
File > New > Multi Device Application > Blank Application açarak çalışmaya başlıyoruz.
→ Delphi tamamen nesneye yönelimlidir.
→ Siz nesneye yönelik çalışmasanız bile Delphi arka planda bütün nesneleri oluşturur.
Palette> TEdit ekliyoruz > Listbox ekliyoruz. Tekrar forma tıklıyoruz çünkü Listbox içine nesne alabiliyor. 4 Tane TMemo ekliyoruz.
Listbox > Object inspector > Properties > Align→Left.
Edit > Object inspector > Properties > Align → Top.
Edit’ e sağ tuş > Items Editor > add item > clear button ve edit button ekledik.
Listbox’ a sağ tıklıyoruz > Items Editor > ListboxGroupHeader > Add Item.
Listbox’ a sağ tıklıyoruz> Items Editor > Listbox Item (5 adet) ekliyoruz.
Listbox’ a eklediklerimizi seçiyoruz(Ctrl ile) > Object inspector > Properties > Text kısmını siliyoruz > Height kısmınıda 40 vererek boyutunu ayarlıyoruz. ListboxGroupHeader1’in Text kısmına Temel Komutlar yazıyoruz. Listbox Itemlara tıklayarak içlerine buton ekliyoruz. Buttonların içinin Align’ ını > client seçerek içinde bulunduğu nesnenin tamamını kaplıyor. Listboxların hepsine aynı işlemi uyguluyoruz. Memodan Ctrl + C ile 4 tane kopyalıyoruz. Derleyerek Windows görünüşüne bakıyoruz. Button1’e çift tıkladığımızda buttonun OnClick eventında kendisi otomatik bir procedure açıyor ve bunun tanımlamasınıda yapıyor. Bize sadece begin-end arasına komut yazmak kalıyor. Button1 > Object inspector > Properties > Name → BtnTersCevir. Name ile birlikte Text de değişiyor. İstersek Textini değiştirebiliriz. Biz Ters Çevir yaptık(textde Türkçe karakter kullanabiliyoruz). Ters Çevir fonksiyonumuzu yazmak için Ters Çevir butonuna tıklıyoruz.
→Private kısmına yazdığımız functionları sadece bu formda kullanabiliriz.
→Public kısmına yazdığımız procedur ve functionları hem bu formda hemde bu formu çağıran diğer formlarda kullanabiliriz.
Fonksiyonumuzu tanımlamak için biz public’e yazıyoruz.
→Procedure ve Functioun farkı = procedure değer döndürüyor, function değer döndürmüyor.
public
{Public declarations}
procedure TersCevir(s: String);
Ctrl + Shift + C ile otomatik olarak headerlar yazılıyor.
procedure TForm1.TersCevir(s: String);
begin
//buraya komutumuzu yazıyoruz.
end;
end.
Komutumuz: ShowMessage (System.Strutils.ReverseString(s));
→ Tanımlanmamış kütüphane varsa uses kısmında tanımlıyoruz.
Buttonun clickine gidip komutumuzu yazıyoruz .
procedure TForm1.BtnTersCevirClick(Sender: TObject);
begin
TersCevir(Edit1.Text);
end;
Çalıştırıyoruz ve açılan pencerede 123 yazıp Ters Çevir butonuna tıklıyoruz 321 olarak değeri görüyoruz.
- 2. ADIM
Button2’ye tıklıyoruz. Object inspector > Properties > Name → BtnKarakterSayısı. Text→ Karaktersayısı Bul. Önceki adımda procedure kullanmıştık burada ise function tanımlayalım. Public kısmına geliyoruz. Bir önceki adımda procedurenin altına function tanımlıyoruz
Public
{Public declarations}
procedure TersCevir (s: string);
function KarakterSayisiBul (s: string): Integer//(function olduğu için değişken tipini belirlememiz gerekiyor. Sayıyı döndüreceği için ‘integer’ yaptık);
end;
Shift + Ctrl + C → bir fonksiyon tanımladığını görüyoruz.
function TForm1.KarakterSayisiBul(s: string): Integer
begin
end;
Function ve Procedure farkı
→ Functionda bir result(sonuç) var. Functionda geriye dönen result oluyor.
→Prodecurede geri döndürme işlemi için başka yöntemler kullanılması gerekiyor.
→Functionda standartta bir tane değişken(değer)döner ama biz bunu farklı nesneler döndürerek nesnelerin içerisinde birden fazla değer alacak şekilde de ayarlayabiliriz.
Result’ ı yazmaya başlıyoruz.
function TForm1.KarakterSayisiBul(s:string): Integer;
begin
Result : = Length(s); //(Girilen string değerin karakter sayısını döndüren bir function)
end;
Design kısmından Karakter sayısı bul’a tıklayarak kod satırına gidiyoruz. Procuderenin altına var yazarak değişken tanımlıyoruz.Değişkeni sadece bu kısımda kullanabildiğimizi unutmayalım. Eğer üst kısımda var’ ın altında tanımlasaydık bütün function ve prodecurelerde kullanabilirdik
procedure TForm1.BtnKarakterSayisiClick(Sender: TObject);
var
sayi: integer
begin
if KarakterSayisiBul(Edit1.Text) > 3 then
ShowMessage (‘üçten büyük’);
else
ShowMessage (‘üçten küçük’);
end;
Yazdığımız kod satırlarında; if satırında Edit1 deki karakter sayısı 3’ten büyükse ekrana üçten büyük yazdıracak. Eğer koşulu sağlamıyorsa else satırının altındaki üçten küçük satırını yazdıracaktır.
→ Eğer birden fazla satır yazmak istersek if –else kısmına; bloklama işlemi kullanmamız gerekecektir. Bunuda begin-end kullanarak sağlarız.
Bloklama işlemine örnek;
if KarakterSayısıBul (Edit1.Text) > 3 then
begin
ShowMessage (‘üçten büyük’);
Memo1.Lines.Add(Edit1.Text);
end
else
begin
ShowMessage(‘üçten küçük’);// (Bloklama işleminde illaki birden fazla satır yazmak zorunda değiliz tek satırda yazabiliriz.)
end;
Bloklamayı tek tek elle yazmak yerine kısayolu; if yazıyoruz ve ardından açılan pencerede code templatelerini görüyoruz ve ihtiyacımıza göre seçerek sadece kod kısımlarını dolduracak şekilde kısa yoldan halletmiş oluruz.
- 3. Adım
İlk 2 adımda girdiğimiz değerler kaydedilmiyor bunu sağlamak için 3.adımımızda girdiğimiz değerlerin memolara aktarılmasını sağlayacağız. EditButton1 'e tıklıyoruz ve açılan kod satırına gidip kodlarımızı yazıyoruz
procedure TForm1.EditButtonClick(Sender:TObject);
begin
Memo1.Lines.Add(Edit1.Text);
Memo2.Lines.Add(IntToStr(KarakterSayisiBul(Edit1.Text))); // (Memo sadece str değer kabul ettiği için IntToStr yaptık.)
end;
Çalıştırdığımızda 1.Memoda Edit1e yazılanların ters halini, 2.Memoda karakter sayılarını görüyoruz.
- 4. Adım
- Diziler- Döngüler
Button3 ile Memo1’in içindeki değerleri ters çevirip Memo3’ün içerisine yazdıracağız. Button3’e çift tık ile kod satırına gidiyoruz
procedure TForm1.Button3Click(Sender:TObject);
begin
While True do // (while yazıp Ctrl + Space basarak kodun devamını seçeneklerden bize uygun olanıyla tamamlıyoruz.)
begin
end;
end;
While döngüsündeki şart sağlanıyorsa begin-end komutlarımız çalışacaktır. Bunun için local bir değişken tanımlayarak komutlarımızı yazmaya başlıyoruz.
procedure TForm1.Button3Click(Sender:TObject);
var
i: integer
begin
whie i < memo1.Lines.Count do //(Memo1’in kayıt sayısından küçükse döngü devam etsin diyoruz.)
begin
memo3.Lines.Add(System.Strutils.ReverseString(memo1.Lines[i]))
end;
end;
→ Memodaki değer nasıl çağırılır?
Köşeli parantez [ ] içine satır numarası yazılarak Lines’in içindeki değeri alabiliriz.
Desig kısmından butonun name ve textine giderek karışıklık olmaması için değiştiriyoruz. Text→ Tümünü Ters Çevir. Name→ BtnTumunuTersCevir. Code kısmına gidip döngüye değerleri veriyoruz.
var
i : integer;
begin
i : 0 ;
while i < memo1.LinesCount do
begin
Memo3.Lines.Add(System.Strutils.ReverseString(Memo1.Lines[i]));
i : = i + 1; //(İ’yi artırmak gerekiyor for döngüsü kullansaydık ‘i’ otomatik artacaktı.)
end;
end;
→ While veri tabanlarında çok kullanılıyor.
Performans kullanımı olarak en hızlı çalışan diziler;
-pointer
-sabitdizi *
-dinamik dizi
Listler diziye göre çok yavaş kalıyor. Standart uygulamalarda bu yavaşlık hissedilmiyor
- 5. Adım
Bir dizi tanımlayalım dizinin içindeki değerleride for döngüsüyle içeriye alalım. Button4 > Name→ BtnSabitDizi.
Sabit dizi ve Değişken dizi farkı = Sabit dizide dizi tanımlandığında kaç tane elemanı olacağı bellidir. Değişken dizide kaç tane elemanı olacağı dizi tanımlandıktan sonra belli olur.
Biz değişken dizi kullanacağız genelde çünkü memoya kaç tane eleman girileceğini biz bilemeyiz. Örnek amacıyla sabit dizi yapacağız. Text→ Sabit Dizi. Yine butonumuza çift tıklayarak kod satırımıza gidiyoruz.
procedure TForm1.BtnSabitDiziClick(Sender:TObject);
var
Dizi: array[1..3] of string // kaç eleman olacağını belirledik, dizinin tipini tanımladık.
I:integer
begin
if Memo1.Lines.Count > 3 then // memo1deki satır sayısı > 3 ten ise dizi çalışsın.
for I : low to high do // for yazıp tab yaptık ve gördük ki yukarıda I: integer bizim için tanımlandı.
procedure TForm1.BtnSabitDiziClick(Sender:TObject);
var
Dizi: array[1..3] of string
I:integer
begin
if Memo1.Lines.Count > 3 then
for I : 0 to Length (Dizi) do
Dizi[i] : = Memo1.Lines[i] // dizinin i’inci elemanını memo1in satırının i’inci elemanına ata.
else
ShowMessage (‘Yeterli kayıt yok’);
end;
Çalıştırıyoruz ekrana yazdırmadığımız için butona basakta bir şey olmadığını görüyoruz yazdırmadan çalıştığını görmek için F9 ile çalıştırıyoruz. F8’ e basarak for döngüsüne girip satırların üzerinde fare ile gezdiğimizde değerleri görüyoruz.
- 6. Adım
DEĞİŞKEN DİZİ
Button5’e tıklayarak kod satırına gidiyoruz.
procedure TForm1.ButtonClick (Sender: TObject);
var
DegiskenDizi : array of string ;
I : integer;
begin
if Memo1.Lines.Count > 0 then
begin
SetLength(DegiskenDizi,memo1.Lines.Count);// dizinin uzunluğunu ayarlama komutu
for I : = 0 to Memo1.Lines.Count-1 do
begin
DegiskenDizi[i];
end;
end
else
begin
end;
end;
F9 ile satır satır kontrol edebiliriz.
- 7. Adım
- Bir button ekliyoruz. Button6 > Name → BtnDiziToMemo. Buttona tıklayarak kod satırına gidiyoruz.
procedure TForm1.BtnDiziToMemoClick (Sender: TObject);
var
I: integer
begin
for I : = 0 to High (DegiskenDizi) -1 do
begin
Memo4.Lines.Add(DegiskenDizi[i])
end;
DegiskenDizi : array of string ; satırını kopyalayıp yukarıya yapıştırıyoruz global olarak kullanmak için.
Bizi çalıştırıyoruz ve değer giriyoruz. Değişken diziye basıyoruz şu anda diziyi hafızaya aldı, diziyi aktarıldığını görüyoruz. -1 Dediğimiz için 1 eksiğiyle birlikte ekranımızda görüyoruz. Şimdide yaptığımız çalışmayı android cihazda göstereceğiz. Mobil tarafa almak için Targets Platform'un android kısmına tıklıyoruz. Buraya bir android cihaz bağlamamız gerekiyor.Biz cihazımızı seçiyoruz ve yapıyoruz kısa süre içinde uygulama mobil cihazımıza geliyor.Değer girip ekranda görebiliyoruz.