Ipuçları

  1. Herhangi bir bmp dosyasını ekranda cizdirme :
  2. Var resim : Tbitmap;
    Begin
     resim : = Tbitmap.Create;
     resim.LoadFromFile('deneme.bmp');
     canvas.Draw(100, 150, resim);
    ...
    
  3. Res dosyasından alınan bitmap’ın ekranda çizdirilmesi :
  4. Delphinin Image Editor’ünde bitmap hazırlanarak bitmap1 ismi ile bir res dosyasına kaydedilir

    implementation
    {$R *.dfm}
    {$R resimler.res}
    ...
    Var resim : Tbitmap;
    Begin
     resim : = Tbitmap.Create;
     resim.LoadFromResourceName(HInstance, bitmap1);
     canvas.Draw(100, 150, resim);
    
  5. Ses kartının olup olmadığını kontrol eden kod:
  6.  Uses ..., mmsystem;
    ...
    Function TForm1.SesKartiVar: boolean;
    Begin
     result : = ( WaveOutGetNumDevs > 0 );
    end;
    
  7. Wav dosyalarını çalmak için kod:
  8. uses ..., mmsystem;
    ...
    Function TForm1.WavCal(const DosyaAdi : String): Boolean;
    Begin
     result := PlaySound(PChar(DosyaAdi), 0, SND_ASYNC);
    End;
    
  9. Çalan Wav dosyasını durdurmak için kod:
  10. uses ..., mmsystem;
    ...
    Procedure TForm1.WavDur;
    Var buffer :  array[0..2] of char;
    Begin
     buffer[0] := #0;
     PlaySound(Buffer, 0, SND_PURGE);
    End;
    
  11. Programın çalıştığı dizini bulmak ve o dizindeki bir dosya ile çalışmak:
  12. ...
    Var dizin, yol : String;
    Begin
    dizin : = extractfilepath(application.ExeName); { Programın dizini bulundu }
    yol := dizin + 'dosya.txt';
    ...
    
  13. Windows dizinini bulmak ve o dizinde bir programı çalıştırmak:
  14. uses ..., ShellApi;
    ... 
    procedure TForm1.Button1Click(Sender: TObject);
    Var WinDir: array[0..144]of char;
    Begin
     GetWindowsDirectory(WinDir, 144); { Windows dizinini Windir değişkene atar }
     ShellExecute(0, 'open', PChar(Windir+ '\System32\notepad.exe'), nil, nil, SW_SHOW);
     { Windows\System32 dizininde NOTEPAD programı çalıştırılıyor }
    ...
  15. Delphinin To-Do List özelliği:
  16. Delphinin 5. sürümünde eklenen To-Do List diyalogu delphinin kullanışlı özelliklerinden biridir.
    Programcı, Delphi ile oluşturduğu projesinde yaptığı ve ileride yapacağı işlemlerin listesini tutmak isteyebilir. İşte To-Do List bu ihtiyaç için doğmuştur. To-Do List, projelerde yapılan ve yapılacak işlemlerin listesinin tutulmasını, düzenlenmesini ve .todo dosyasında saklanmasını sağlar.

  17. Delphide kodlar arasında not tutma:
  18. Delphinin kod sayfasında bazen kodlar arasında notlar düşmek gerekebilir. Not yazmak için üç yol vardır:

    { Bu iki satırdan oluşan
    bir nottur. }
    (* Bu iki satırdan oluşan
    başka bir nottur. *)
    // Bu ise bir satırlık bir nottur.
    // Bu başka bir satırlık not.
    

    NOT : Birden fazla satırdan oluşan notların başına $ işareti konulmamalıdır. Bu, delphinin notu derleyici direktifi zannetmesine ve hata vermesine sebep olur. Örneğin: {$R *.RES} direktifi gibi

  19. Projelerin .res dosyalarında değişiklik:
  20. Delphi projelerinde proje açık iken projenin .res uzantılı dosyalarında değişiklik yapıldığında veya bu dosyalara yeni bir kaynak eklendiğinde delphi değişiklikleri fark etmeyecektir. Değişikliklerin aktif olması için mevcut proje kapatılıp yeniden açılmalıdır. Ancak bu sayede değişiklikler aktif hale gelecektir.

  21. DelphiX’deki DXTimer yerine TTimer kullanımı:
  22. DelphiX ile gelen DXTimer bileşeni oyunlarda zamanlama amacıyla kullanılan gelişmiş bir bileşendir. Bu bileşen aynı zamanda yapılan oyunun saniyedeki çerçeve sayısını da (framerate) ölçmektedir. Bu bileşen gelişmiş özelliklere sahip olmasının yanında işlemciye çok yük bindirerek işlemciyi yormaktadır. Bu yüzden DelphiX kullanılan basit uygulamalarda DXTimer yerine Win32 sayfasındaki TTimer kullanılırsa işlemciye daha az yük binecektir.

  23. DelphiX’de Canvas kullanımı:
  24. DelphiX ile gelen DXDraw bileşeninin Surface özelliğinin de Canvas özelliği vardır.
    Delphinin Canvas özelliği ile Delphixde Surfacenin Canvas özelliği aynıdır. Delphide Canvas ile yapılabilen tüm işlemler Delphixde Surface.Canvas ile yapılabilir.

  25. DelphiX’de Canvas kullanırken dikkat edilmeli:
  26. Delphide Canvas ile yapılabilen tüm işlemler Delphixde Surface.Canvas ile yapılabilir. Delphixde canvas ile işlem yaptıktan sonra aşağıdaki komutlar unutulmamalıdır. Aksi taktirde çizim yapılmayacak, delphi hata verecektir:

    dxdraw1.Surface.Canvas.release;
    dxdraw1.Flip;
    
  27. Delphi IDE parametrelerinden bazıları
  28. Delphi IDE yi başlatırken çalıştırdığımız delphi32.exe dosyasının birçok komut satırı özelliği vardır. Bu komutlar genellikle ileri seviye kullanıcılara hitap ederler. Bu komutların işimize yarayabilecek olanlardan bazıları şunlardır :

    -ns : Bu parametre ile delphi nin splash screen(açılış resmi) ni göstermesini engeller.
    -np : Bu parametre delphi nin açılışta boş bir proje oluşturmasını önler.
    

    Bu parametreler Delphi7’de denenmiştir. Kullanımı, Delphinin kısayoluna sağ tıklanıp Özellikler açılarak Hedef: “C:\Program Files\Borland\Delphi7\Bin\delphi32.exe” -ns -np şeklinde olabilir.

  29. Delphi programlarında komut satırı parametrelerini kullanma:
  30. Delphi ile yapılan programlarda komut satırı parametrelerini okumak ve kullanmak gerekebilir. Program çalıştırılırken verilen komut satırı parametresi sayısını ParamCount komutu verir.
    Komut satırı parametrelerinin kendilerine ulaşmak için ise istenilen komut satırı parametresinin numarası ile birlikte Paramstr komut kullanılır. Örneğin ParamStr(1), ParamStr(2) gibi. Paramstr(0) ise çalıştırılan programın yolunu ve ismini verir.

    Procedure TForm1.FormCreate(Sender: TObject);
    var i : Integer;
    Begin
     for i := 1 to ParamCount do begin
      if LowerCase(ParamStr(i)) = '/bip' then Beep;
      if LowerCase(ParamStr(i)) = '/kapat' then Application.Terminate;
     End;
    End;
    
  31. Delphinin Timer bileşeninin Interval özelliği:Yeni
  32. Delphide Timer bileşeni belli sürelerle yapılması gereken işler için biçilmiş kaftandır. Timer’ın süresi Interval özelliği ile ayarlanır. Interval 1 ms ile 1000 ms (1 Sn) arasında değer alabilir.

    Timer bileşeni, SetTimer ve KillTimer Windows API timer fonksiyonlardan oluşturulmuştur. TTimer, OnTimer olaylarını oluşturmak için WM_TIMER mesajlarını kullanır. Bu mesajlaşma sebebiyle Interval 10 msn’den küçük seçilmemelidir. Eğer Interval 10 msn’den küçük seçilirse gecikme ve zamanlama hatası oluşacaktır.

    Interval’a 0 değeri verilirse -bu geçerli bir değerdir- bu Timer’ın hiç çalışmamasına sebep olur.

  33. Delphinin Timer bileşeninin Disable edilmesi: Yeni
  34. Eğer Delphide Timer bileşeninin Interval değeri büyük tutulur ve Interval tamamlanmadan Timer.Enabled := False; yapılırsa tekrar Timer.Enabled := True; yapılsa bile Timer kaldığı yerden devam etmeyecek ve sıfırlanacaktır. Buna dikkat edilmelidir.

  35. Delphi programları açılırken ekrana çizim yapmak:
  36. Delphi ile yapılan programlar açılırken ekrana çizim yapılması gerekiyorsa OnShow veya OnCreate gibi olaylar kullanılamaz. Çizim programın oluşturulması bittikten sonra yapılmalıdır. Aşağıdaki kod ile bir Timer nesnesi oluşturularak bu nesnenin programın girişinde bir kez çalıştırılması sağlanmaktadır. Ekranda yapılmak istenen çizim işlemleri bu Timer nesnesinin OnInterval olayının gösterdiği fonksiyonun içerisinde tanımlanmaktadır. Çizim bittikten sonra fonksiyonun son satırında Timer’ın Enabled özelliği false yapılmalı ve Timer.free ile nesne silinmelidir.

    Var
     Form1: TForm1;
     Tmr: TTimer;
    implementation
    
    {$R *.dfm}
    
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
     Tmr := TTimer.Create(Self);
     Tmr.Interval := 1;
     Tmr.OnTimer := Timer1Timer;
    End;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    Begin
     form1.Canvas.Rectangle(8, 5, 129, 46);
     form1.Canvas.MoveTo(20, 60);
     form1.Canvas.LineTo(120, 90);
     Tmr.Enabled:= false;
     Tmr.Free;
    End;
    
  37. Delphide resimlerin arka plan renklerini saydam yapmak:
  38. Delphide resimlerin (Image) üzerinde bulunan herhangi bir renk kolayca saydam yapılabilir. Böylece bir resim diğer resmin üzerine yerleştirildiğinde görülen dörtgen şekilden ve gereksiz renklerden kurtulunmuş olur. Bunu için aşağıdaki gibi basit bir kod yeterlidir. Bu kodda resim üzerindeki siyah renkler saydam olacaktır. Başka renk değerleri de kullanılabilir.

    resim := Tbitmap.Create;
    resim.Transparent := true;
    resim.TransparentColor := clblack;
    
  39. Windows 7 üzerinde Delphi 7
  40. Windows 7 üstüne Delphi 7 kurup çalıştırmak istediğinizde “Unable to rename ‘C:\Program Files\Borland\Delphi7\Bin\delphi32.$$$’ to ‘C:\Program Files\Borland\Delphi7\Bin\delphi32.dro'” hatası ile karşılaşabilirsiniz. Düzeltme ve problemsiz çalıştırma için ‘C:\Program Files\Borland\Delphi7\Bin’ klasörüne sağ tıklayarak Özellikler sonra Güvenlik sekmesi seçilir. Listeden ‘Administrators…’ seçilir ve ‘Düzenle’ tuşuna tıklayarak gelen diyalogdan Tam denetimin karşısında ‘İzin ver’ kutusu seçilerek ‘Uygula’ tuşuna tıklanır. Pencereler ‘Tamam’ tuşuna tıklayarak kapatılır. Delphi 7 problemsiz çalışacaktır.

    Özellikler ve İzinler

    Windows 7 üzerinde Delphi 7’de bileşen kurma veya diğer işlemleri yaparken yukarıdakine benzer bir hata ile karşılaşılırsa Delphi kapatıldıktan sonra kısayoluna sağ tıklayarak “Yönetici olarak çalıştır” seçeneği ile çalıştırılmalı ve işlem baştan yapılmalıdır.

  41. Delphi 7 programlarında Windows 7 ve Vista XPManifest hatası:
  42. Bilindiği gibi XPManifest bileşeni Delphinin Win32 sayfasında bulunan, yapılan programın bileşenlerinin Windows XP stilinde görüntülenmesini sağlayan bir bileşendir.Windows Xp altında hatasız çalışan bu bileşen Windows 7 ve Vista altında problem çıkarmaktadır. “Alt” tuşuna basıldığında yapılan program ekranında bileşenlerin bazıları
    ekrandan kaybolmaktadır. Bu problemin çözümü programdaki XPManifest bileşeninin silinmesidir. Aynı zamanda “uses” kısmındaki “XPMan” yazısıda silinmelidir. Bileşenlerdeki XP görünümü kaybolacak fakat bileşenlerin kaybolması sorunu ortadan kalkacaktır.

    Delphi 7’de problemsiz XPManifest kullanımı için diğer bir yöntem ise standart sayfasındaki bileşenler yerine aynı işi yapan ücretsiz bileşenler internetten indirilip, kurulup kullanılmasıdır.

    Bu sorun sadece Delphi 7’de vardır. Rad Studio 2010 ve üstü gibi Windows 7 altında çalışmak için tasarlanmış Delphi sürümlerinde bu sorun yoktur. Zaten bu sürümlerde XPManifest bileşenine de gerek yoktur. Bu bileşen yerine “Project Options” seçeneği ile açılan Proje seçenekleri diyalogunun “Application” sekmesindeki “Enable runtime themes” kutusunun işaretlenmesi yeterlidir.

    Project options

  43. Delphi sonsuz döngüler:
  44. While do ve Repeat Until gibi döngülerde sonsuz döngü için True ve False kelimeleri kullanılabilir. Sonsuz döngüde Application.ProcessMessages komutu ile windows mesajları kontrol edilmeli ve gerektiğinde döngüde çıkmak için Break komutu kullanılmalıdır.

    Procedure TForm1.Button1Click(Sender: TObject);
    Var i : Integer;
    Begin
     i := 0;
     While True Do begin // Sonsuz Döngü
      Inc(i);
      Label1.Caption := IntToStr(i);
      Application.ProcessMessages;
      if i = 10000 then Break; //Döngüden çıkabilmek için
     End;
    End;
    
    Procedure TForm1.Button1Click(Sender: TObject);
    Var i : Integer;
    Begin
     i := 0;
     Repeat
      Inc(i);
      Label1.Caption := IntToStr(i);
      Application.ProcessMessages;
      if i = 10000 then Break; //Döngüden çıkabilmek için
     Until False; // Sonsuz Döngü
    End;
    

    While döngüsünde her zaman doğru (True) döndürecek ifadeler (True, (1=1), not(1=2) vb) ile sonsuz döngü sağlanabilir. Repeat Until döngüsünde ise her zaman yanlış (False) döndürecek ifadeler (False, not(1=1), (1=2) vb) ile sonsuz döngü sağlanabilir.

  45. Delphide Boolean değişkenin kontrolunde kodu sadeleştirme
  46. Eğer bir boolean değişken kontrol edilip değerine göre program çalıştırılacaksa If b = True then yazmak yerine If b then kodu kısaltacaktır. Aynı şekilde If b = False then yazmak yerine If not b then yazılabilir.

  47. Delphide Boolean değişkenin değerini diğer değişkenlere göre belirlemenin kısa yolu
  48. Bir boolean değişkenin değerini diğer değişkenlere göre belirleyen programın uzun kodu üst kısımda aynı işi yapan kısa kodu ise alt kısımdadır :

    Var b : Boolean; s : String;
    Begin
    // Uzun kod
    If s = 'Delphi' then b := true else b := false;
    // Aynı işi yapan Kısa kod
    b := (s = 'Delphi');
    end;
    
  49. Delphide String değişkenlere karakter ataması yapmak
  50. Delphi’de bilgi atanmamış string değişken içerisine karakter ataması yapılırsa ya hata verecektir. Ya da bilgi atanmayacaktır. Buna dikkat edilmelidir. Bu hatadan kurtulmanın yolu Setlength komutu ile string değişkenin boyutunu ayarlamaktır. Aşağıdaki bu kullanıma örnek verilmektedir:

    Var
      Form1: TForm1;
      s : string[100];
    
    implementation
    
    {$R *.dfm}
    
    Procedure TForm1.Button1Click(Sender: TObject);
    Var i : Integer;
    Begin
     SetLength(s, 100);
     for i := 1 to 20 do s[i] := 'A';
     label1.Caption := s;
    End;
    
  51. Delphide tüm formları ve bileşenleri listeleme
  52. Form üzerine 1 adet TMemo ve 1 adet TButton konularak tüm formlar ve formlardaki tüm bileşenler aşağıdaki kod ile listelenebilir:

    Procedure TForm1.Button1Click(Sender: TObject);
    Var i, j : integer; s : Tcomponent;
    begin
     for i := 0 to application.ComponentCount - 1 do  begin
       s := application.Components[i];
       Memo1.Lines.Add(s.name);
       for j := 0 to application.Components[i].ComponentCount - 1 do begin
        s := application.Components[i].Components[j];
        Memo1.Lines.Add(s.name);
       end;
     end;
    end;
    
  53. Bir diziye sınırları dışında bilgi atama
  54. Delphide bir dizi (Array) tanımlandığında bu dizi sınırları dışına bilgi ataması mümkün değildir.

    Var
     dizi : Array [1..3] of integer;
    Begin
     dizi[0] := 150;
    

    Örneği yukarıdaki örnek kodda derleyici

    [Error] Unit1.pas(36): Constant expression violates subrange bounds

    hatası verecek ve programı derleyip çalıştırmayacaktır. Bu şekilde bir problem yoktur. Fakat global değişkenlere atama yapılırken sabit sayı yerine değişen kullanılırsa bu kontrol devredışı kalır. Bu kontrolün devredışı kalması diziye değer atanırken değişken tanımlama bloğundaki diğer değişkenlerinde etkileneceği anlamına gelir. Örneğin aşağıdaki kodda bu durum söz konusudur:

    Var
     Form1: TForm1;
     sayi : integer;
     dizi : Array [1..3] of integer;
     sayi2 : integer;
     a, b : integer;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    Begin
     sayi := 25; sayi2 := 50; 
     a := 0; b := 4;
     dizi[a] := 125; // Diziden önceki sayi değişkeni etkilenip 125 olmaktadır
     dizi[b] := 150; // Diziden sonraki sayi2 değişkeni etkilenip 150 olmaktadır
    

    Derleyici yukarıdaki koddaki hatayı yakalayamamaktadır. Bu program hata vermeden derlenip çalıştırılır. Bu sebeple dizilere değişken ile atama yapılırken sınırlara dikkat edilmelidir. Dikkat edilmezse diziden önceki ve sonraki değişkenler etkilenir. Var bloğundaki değişkenlerin cinsinin önemi yoktur.

  55. Eski VCL bileşenleri Yeni Delphi sürümlerinde tanıtıp kullanma
  56. Eski delphi sürümleri için tasarlanmış VCL bileşenlerin bazıları Yeni Delphi (Rad studio) sürümlerinde de tanıtılıp kullanılabilir. Bunun için “Component” menüsünde “Install component” seçilerek bileşenin olduğu .pas dosyası seçilir (Bileşenin paketi yoksa). Altta “Install into a new package” seçeneği seçilip “Next” butonuna tıklanır. Gelecek sayfada uygun bir paket ismi yazılıp “Finish” seçildiğinde paket oluşturulmuş olur.

    Derleme hatası oluştuğunda Uses kısmındaki “Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Buttons, IniFiles, ComCtrls, ShellAPI, Types, Grids, Clipbrd, Registry” vb kütüphane isimleri “Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.Buttons, System.IniFiles, Vcl.ComCtrls, Winapi.ShellAPI, System.Types, Vcl.Grids, Vcl.Clipbrd, System.Win.Registry” şeklinde değiştirilmelidir.

  57. Çalışma anında bileşen eklerken dikkat edilmesi gereken bir husus
  58. Formun OnCreate olayına aşağıdakine benzer bir kod eklenerek çalışma anında forma bileşen eklenebilir. Fakat bileşen eklerken dikkat edilmesi gereken noktalardan birisi bileşen ayarlarını yapan kodları yazarken sıralamaya dikkat edilmesidir.

    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
     tbYeni := TTrackbar.Create(self);
     tbYeni.Parent := Self;
     tbYeni.SetBounds(205, 7, 255, 45); 
     tbYeni.onMouseUp := tbUp;
     tbYeni.onChange := tbYeniChange;
     tbYeni.Position := 127;
    

    Yukarıdaki kod hata verebilir. Çünkü tbYeni.Position komutu sebebiyle tbYeniChange olayı tetiklenecek ve eğer bu fonksiyon formun diğer bileşenlerini etkiliyorsa hata verecektir. Çünkü Ana formun OnCreate olayı tamamlanmamıştır. Bütün bileşenler hazır değildir. Kod aşağıdaki şekilde değiştirilirse hata ihtimali ortadan kalkar.

    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
     tbYeni := TTrackbar.Create(self);
     tbYeni.Parent := Self;
     tbYeni.SetBounds(205, 7, 255, 45); 
     tbYeni.Position := 127;
     tbYeni.onMouseUp := tbUp;
     tbYeni.onChange := tbYeniChange;
    
  59. Bileşen ekli paket kurulurken DesignEditors bulunamadı hatası
  60. İçerisinde bileşen bulunan bir paket kurulurken “F1026 File not found: ‘DesignEditors.dcu’” vb. bir hata ile karşılaştırılırsa paketin Requires kısmına tıklanarak Add Reference seçeneği ile designide.dcp pakete eklenmelidir. Bu dosya Delphi’nin kurulu olduğu yerde Lib dizininde bulunmaktadır.

    Delphi Paket (Bpl) requires

  61. Formların başlık çubuğu yüksekliğinin farklı olması
  62. Değişik Windows sürümlerinde ve temalarında form başlık çubuğu (title bar) yüksekliği farklı olabiliyor. Bu sebepten eğer formun yüksekliğinin duruma göre değiştirmesi gerekiyorsa başlık çubuğunun yüksekliğinin de dikkate alınması gerekir. Aşağıdaki fonksiyonda başlık çubuksuz form yüksekliği girilerek asıl form yüksekliğinin bulunması sağlanmaktadır.

    Function TForm1.GetFullFormHeight(h: Integer):Integer;
    Begin 
     result:= h + (Form1.Height - Form1.ClientHeight); 
    End;
    
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
     Form1.Height := GetFullFormHeight(100); // Kullanımı
    End;
    
  63. Herhangi Text dosyasını Utf-8 kaydetme
  64. Aşağıdaki kod ile herhangi bir formattaki yazı (text) dosyası Utf-8 formatında kaydedilebilir. Utf-8 formatından başka formatta kaydetmek için TEncoding.UTF8 kodunda değişiklik yapmak yeterlidir.

    Procedure TForm1.txtToUtf8(f: string);
    Var st: TStringlist;
    Begin
      If FileExists(f) then begin
        st:=TStringList.Create;
        st.LoadFromFile(f);
        st.SaveToFile(f, TEncoding.UTF8);
        st.Free;
      End;
    End;
    
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
     txtToUtf8('Yazi.txt');  // Kullanımı
    End;
    
  65. Unicode uygulamada karakterlerin bozuk çıkması
  66. Eski Delphi sürümleri ile yapılmış uygulamalar yeni Delphi sürümleri ile Unicode’a çevirilse bile karakterlerin görünmesinde sorun çıkabilmektedir. Özellikle karakterler Windows’un kod sayfası ile uyumlu değilse (Örneğin İngilizce Windows üzerinde çalışan Türkçe uygulama gibi) bozuk görünebilmektedir. Bunun sebebi eski Delphi sürümlerinde formun ve form üzerindeki bileşenlerin yazıtipinin MS Sans Serif olmasıdır. Bu yazıtipi karakter yönünden fakir bir yazıtipidir ve birçok karaktere sahip değildir. Bu yazıtipi Tahoma veya Arial gibi zengin yazıtiplerinden biri ile değiştirilirse sorun ortadan kalkacaktır.

  67. Bir Panelin içerisindeki Labeli ortalamak
  68. Herhangi bir Labeli Paneli içerisinde ortalamak için aşağıdaki kod yeterdir.

    Label1.Left := (Panel1.Width div 2) - (Label1.Width div 2);
    
  69. Sistem ayarlarından bağımsız Türkçe tarih-saat formatlama
  70. Değişik dillere sahip Windows’larda tarih ve saat formatları farklıdır. Türkçe sistemlerde genellikle Gün.Ay.Yıl şeklinde olurken ingilizce bir sistemde Ay/Gün/Yıl şeklinde olabiliyor. Aşağıdaki kodlar ile Tarih ve saat İngilizce ve Türkçe sistemlerde Gün.Ay.Yıl Saat:Dakika şeklinde standart olarak gösterilmektedir. İlk koda gönderilen ta ve sa parametreleri değiştirilerek aradaki tarih-saat ayraçları değiştirilebilir. Uses kısmına DateUtils uniti eklenmelidir.

    Function TarihSaatTR(t: TDateTime; ta, sa: Char):string;
    Var  myYear, myMonth, myDay : Word;
     myHour, myMin, mySec, myMilli : Word;
    Begin
     DecodeDate(t, myYear, myMonth, myDay);
     Result := inttostr(myDay) + ta + inttostr(myMonth) + ta + inttostr(myYear);
     DecodeTime(t, myHour, myMin, mySec, myMilli);
     Result := Result + ' ' + inttostr(myHour) + sa + inttostr(myMin) + sa + inttostr(mySec);
    End;
    
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
     label1.Caption := TarihSaatTR(Now, '.', ':'); 
     // Çıktı 28.2.2016 0:37:25
    End;
    

    veya

    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
     label1.Caption := FormatDateTime('dd.mm.yyyy hh:nn:ss',Now);
     // Çıktı 28.02.2016 00:37:25
    End;
    
  71. TMemo veya TStringlist’e bir seferde birden fazla satır ekleme
  72. #13 ve #10 karakterlerini kullanarak TMemo’ya veya TStringList’e bir seferde birden fazla satır eklemek mümkündür.

    procedure TForm1.Button1Click(Sender: TObject);
    var ms : string;
    begin
     ms := 'Bir satır'+ #13#10 + 'Başka bir satır'+ #13#10 +'Daha başka bir satır';
     Memo1.Lines.Add(ms);
    end;
    
    procedure TForm2.Button1Click(Sender: TObject);
    var ms : string; sl : TStringlist;
    begin
     ms := 'Bir satır'+ #13#10 + 'Başka bir satır'+ #13#10 +'Daha Başka bir satır';
     sl := TStringList.Create;
     sl.Add(ms);
    end;
    
  73. IP Adresini bulma
  74. Bilgisayarın bağlandığı Local Ip adresini bulmak için aşağıdaki kod kullanılabilir :

    Uses ..., Winsock; // Uses kısmına Winsock eklenmelidir!
    ...
    ...
    Function GetIPAddress:String;
    type
      pu_long = ^u_long;
    var
      varTWSAData : TWSAData;
      varPHostEnt : PHostEnt;
      varTInAddr : TInAddr;
      namebuf : Array[0..255] of char;
    begin
      If WSAStartup($101,varTWSAData)  0 Then
      Result := 'IP Address Yok'
      Else Begin
        gethostname(namebuf,sizeof(namebuf));
        varPHostEnt := gethostbyname(namebuf);
        varTInAddr.S_addr := u_long(pu_long(varPHostEnt^.h_addr_list^)^);
        Result := 'IP Adresi: '+inet_ntoa(varTInAddr);
      End;
      WSACleanup;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Label1.Caption := GetIPAddress;
    end;
    
  75. Butona tıklandığında TMemo bileşenine belirli tuşlara basılmış gibi klavye simüle etmek
  76. Butona tıklandığında Form üzerindeki herhangi TMemo bileşenine belirli tuşlara basılmış gibi klavye simüle etmek için aşağıdaki kod kullanılabilir :

    Procedure TForm1.Button1Click(Sender: TObject);
    begin
       Memo1.Clear;
       Memo1.SetFocus; // Memo aktif ediliyor
       // Klavye simüle ediliyor Ctrl+V (Paste-Yapıştır)
       keybd_event(VK_CONTROL,0,0,0); // Ctrl
       keybd_event(Ord('V'),0,0,0);   // V
       keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
    end;
    
  77. Delphide sayıları doğru yuvarlama
  78. Delphide Round, RoundTo komutları sayıları yuvarlarken bankers rounding algoritması denilen algoritmayı kullanırlar. Bu algoritmada:

    1. Tam sayı kısmı tek sayı ise ve ondalıklı kısım 0.5 ise bir üst tam sayıya yuvarlanır. (13.5 yuvarlandığında 14)
    2. Tam sayı kısmı çift ve ondalıklı kısım 0.5 ise aşağıya yuvarlanır. (12.5 yuvarlandığında 12) (İstenmeyen durum)

    Bu bir hata değildir. Algoritmanın çalışması böyledir. Alıştığımız normal yuvarlama algoritması için aşağıdaki kod kullanılabilir :

    Function RoundCorrect(R: Real): LongInt;
    begin
      Result:= Trunc(R);       // Tam kısım ayrılıyor
      if Frac(R) >= 0.5 then   // ondalık kısım >= 0.5 ise...
        Result:= Result + 1;   // ...tam kısma 1 ekleniyor
    end;
    

    Bu kod sadece tam kısma yuvarlamak içindir. Eğer virgülden sonra bir yada iki basamak için yuvarlama isteniyorsa (örneğin para işlemlerinde kuruş hesabı, not hesabı vb) bu kod aşağıdaki şekilde kullanılabilir.

    Function RoundCorrect(R: Real): LongInt;
    begin
      Result:= Trunc(R);       // Tam kısım ayrılıyor
      if Frac(R) >= 0.5 then   // ondalık kısım >= 0.5 ise...
        Result:= Result + 1;   // ...tam kısma 1 ekleniyor
    end;
    
    // Virgülden sonra tek basamak yuvarlamak için
    
     ...
     s := 12.11;
     t := RoundCorrect(s * 10) / 10; // 12.11 yuvarlanır 12,1
    
     s := 12.15;
     t := RoundCorrect(s * 10) / 10; // 12.15 yuvarlanır 12,2
     ...
    
    // Virgülden sonra iki basamak yuvarlamak için
    
     ... 
     s := 12.151;
     t := RoundCorrect(s * 100) / 100; // 12.151 yuvarlanır 12,15
    
     s := 12.155;
     t := RoundCorrect(s * 100) / 100; // 12.155 yuvarlanır 12,16
     ...
    
  79. Delphide Log dosyası tutma
  80. Program çalışırken o anki durum yada işlem ile ilgili bilgi veya notları (Log) bir dosyada tutmak gerekebilir. Aşağıdaki fonksiyon parametre olarak ismi verilen yazı dosyasına yine parametre olarak verilen yazıyı eklemek için kullanılmaktadır. Fonksiyonun üçüncü parametresi yazı dosyasındaki kayıt sayısını sınırlandırmak (maksimum kayıt sayısı) içindir.

    Procedure TForm1.Logyaz(fn, tx: string; lc: integer);
     var strList: TStringList; i:Integer;
    begin
      strList := TStringList.Create;
      try
        if FileExists(fn) then begin
         strList.LoadFromFile(fn);
         if strList.Count>lc then 
          for i := strList.Count-lc downto 0 do strList.Delete(i);
        end;
        strList.Add(tx);
        strList.SaveToFile(fn);
      finally
        strList.Free;
      end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Logyaz('dosyam.log', 'Kayıt Başarılı!', 20);  // Kullanımı
     // Dosyada maksimum 20 kayıt vardır
     // Yeni kayıt eklendiğinde en baştaki kayıt silinir
    end;
    
  81. Delphide FastMM kütüphanesi Yeni
  82. FastMM yani Fast Memory Manager, Delphi’nin kendi hafıza yönetim kütüphanesi olan BorlandMM’nin yerine geçmek üzere tasarlanmış bir hafıza yönetim kütüphanesidir. FastMM’de BorlandMM’deki hatalar giderilmiş, hafıza işlemleri büyük ölçüde hızlandırılmıştır. FastMM’de BorlandMM tarafından farkedilmeyen ya da iyi yönetilmeyen hafıza kaçakları bulunmamaktadır.

    Delphi 2006 ile birlikte Delphi’nin standart hafıza yöneticisi haline gelmiştir. Daha önceki sürümler için Sourceforge.net adresinden FastMM dosyası indirilip projelerde Uses kısmına kütüphane adı eklenerek kullanılabilir.

    FastMM projelerde kullanabileceği gibi, Delphinin orjinal BorlandMM.DLL dosyası FastMM ile gelen BorlandMM.DLL ile değiştirilerek Delphi 2006’den eski Delphi’lerin de FastMM’den yararlanmasını sağlanabilir.

    İndirilen FastMM dosyasında tüm açıklamalar vardır.

  83. Android Studio’da cihazın görünmemesi Yeni
  84. Android studio’da yazılan android programı Run denilerek gerçek bir cihaza veya sanal cihazlara yüklenebilir. Fakat Run denildiğinde gelen Select Deployment Target Diyalogunda bağlı gerçek cihaz bazen görünmeyebilir. Bunu birçok sebebi olabilir. Sebeplerden bir tanesi de cihaz Usb sürücüsünün kurulmamış olmasıdır. Windows Denetim masasında Aygıt yöneticisine bakıldığında aygıt simgesinde ünlem vb bir simge olması bunun göstergesidir. Bunu düzeltmek önce Android studio’da Sdk Manager açılarak Sdk Tools kısmında Google Usb Driver indirilir. Sonra Windows Denetim masasında Aygıt yöneticisinde aygıta sağ tıklanarak Özellikler ve Sürücü Güncelleştir seçeneğiyle SDK klasörü gösterilip alt klasörlerle taranması sağlanır. Windows Usb sürücüyü bulup kuracaktır. Sürücü kurulduktan sonra cihaz Android Studio’da görünecektir.

Devam edecek…

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.