Bu makalemizde delphide bir sayısal loto uygulaması yapacağız. 

Bu programda amaç, 1-49 arasında 6 farklı rakamlar belirtilen çekiliş dizisinde tutulmaktadır. Girilen kolon sayısına göre bilgisayar rasgele 1 -49 arasında 6 farklı rakamlar oynamaktadır. Bu oynanan kolonları çeklişle karşılaştırmaktır.

 

Unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Buttons, ExtCtrls;typeTForm1 = class(TForm)Edit1: TEdit;Label1: TLabel;ListBox1: TListBox;Edit2: TEdit;Label2: TLabel;Label3: TLabel;Label4: TLabel;Label5: TLabel;Label6: TLabel;Label7: TLabel;Label8: TLabel;Label9: TLabel;Label10: TLabel;Label11: TLabel;Label12: TLabel;Label13: TLabel;Label14: TLabel;Timer1: TTimer;SpeedButton1: TSpeedButton;SpeedButton2: TSpeedButton;Timer2: TTimer;Label15: TLabel;Label16: TLabel;procedure FormCreate(Sender: TObject);procedure Timer1Timer(Sender: TObject);procedure SpeedButton1Click(Sender: TObject);procedure SpeedButton2Click(Sender: TObject);procedure Timer2Timer(Sender: TObject);procedure Label15Click(Sender: TObject);procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);procedure Label15MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);procedure Label15MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;a:array[1..6] of integer;//Çekiliş dizisib:array[1..6] of integer;//Kolonlar dizisisayac,seffaf:integer;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginAlphaBlend:=true;end;procedure TForm1.Timer1Timer(Sender: TObject);beginseffaf:=seffaf+5;AlphaBlendValue:=seffaf;if seffaf=255 thentimer1.Enabled:=false;end;procedure TForm1.SpeedButton1Click(Sender: TObject);vari,j,deger:integer;beginrandomize;//Bilgisayar, program açıldığında aynı rakamları ele almasın diye.a[1]:=random(49)+1;//Çekiliş dizisine 1-49 arasında 6 farklı rakam atanıyor.a[2]:=random(49)+1;a[3]:=random(49)+1;a[4]:=random(49)+1;a[5]:=random(49)+1;a[6]:=random(49)+1;for i:=1 to 6 dofor j:=i+1 to 6 doif a[i]=a[j] then a[i]:=a[i]+1;//Eğer bilgisayar rasgele aynı rakamlar tutar ise o rakamı bir arttır.for i:=1 to 6 dofor j:=i+1 to 6 doif a[i]>a[j] then//Sıralama algoritması.begindeger:=a[i];a[i]:=a[j];a[j]:=deger;end;edit1.Text:=inttostr(a[1])+? ?+inttostr(a[2])+? ?+inttostr(a[3])+? ?+inttostr(a[4])+? ?+inttostr(a[5])+? ?+inttostr(a[6]);//Çekiliş rakamları edit bileşenine yazdırılıyor.end;procedure TForm1.SpeedButton2Click(Sender: TObject);vari,j,deger,k:integer;beginlistbox1.Clear;//Önceden yazdırılan kolonlar bir daha listbox?da görünmesin.label9.Caption:=?0?;label10.Caption:=?0?;label11.Caption:=?0?;label12.Caption:=?0?;label13.Caption:=?0?;label14.Caption:=?0?;for k:=1 to strtoint(edit2.text) do//Belirtilen kolon sayısına göre dön.beginListBox1.Refresh;//Listbox?ı yenile, gözle görmemizi sağlar.label9.Refresh;label10.Refresh;label11.Refresh;label12.Refresh;label13.Refresh;label14.Refresh;randomize;b[1]:=random(49)+1;//Kolonlar dizisine 1-49 arasında 6 farklı rakamlar atanıyor.b[2]:=random(49)+1;b[3]:=random(49)+1;b[4]:=random(49)+1;b[5]:=random(49)+1;b[6]:=random(49)+1;for i:=1 to 6 dofor j:=i+1 to 6 doif b[i]=b[j] then b[i]:=b[i]+1;//Kolondaki sayılardan biri eşit ise bir arttır.for i:=1 to 6 dofor j:=i+1 to 6 doif b[i]>b[j] then//Sıralama algoritması.begindeger:=b[i];b[i]:=b[j];b[j]:=deger;end;for i:=1 to 6 dofor j:=1 to 6 doif a[i]=b[j] then sayac:=sayac+1;//Çekiliş rakamları Kolonlar rakamlarından birine eşit ise sayacımızı bir arttır.if sayac=1 then begin label9.Caption:=inttostr(strtoint(label9.Caption)+1); sayac:=0; end;//Eğer sayaç bir ise o kolonda bir tutturmuştur.if sayac=2 then begin label10.Caption:=inttostr(strtoint(label10.Caption)+1); sayac:=0; end;if sayac=3 then begin label11.Caption:=inttostr(strtoint(label11.Caption)+1); sayac:=0; end;if sayac=4 then begin label12.Caption:=inttostr(strtoint(label12.Caption)+1); sayac:=0; end;if sayac=5 then begin label13.Caption:=inttostr(strtoint(label13.Caption)+1); sayac:=0; end;if sayac=6 then begin label14.Caption:=inttostr(strtoint(label14.Caption)+1); sayac:=0; end;ListBox1.Items.Add(inttostr(k)+? ? ?+inttostr(b[1])+? ?+inttostr(b[2])+? ?+inttostr(b[3])+? ?+inttostr(b[4])+? ?+inttostr(b[5])+? ?+inttostr(b[6]));//Kolonlarımız listbox bileşinine yazdırılıyor.end;end;//Alt satırda bulunan kod kısımları tamamen görselliğe dayalıdır.procedure TForm1.Timer2Timer(Sender: TObject);beginseffaf:=seffaf-5;AlphaBlendValue:=seffaf;if seffaf=0 thenbegintimer1.Enabled:=false;halt;end;end;procedure TForm1.Label15Click(Sender: TObject);begintimer2.Enabled:=true;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);beginlabel15.Font.Color:=clred;end;procedure TForm1.Label15MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);beginlabel15.Font.Color:=$006C6CFF;end;procedure TForm1.Label15MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginlabel15.Font.Color:=$000000B0;end;end.Unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
ListBox1: TListBox;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Timer1: TTimer;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Timer2: TTimer;
Label15: TLabel;
Label16: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Label15Click(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label15MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label15MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var

Form1: TForm1;
a:array[1..6] of integer;//Çekiliş dizisi
b:array[1..6] of integer;//Kolonlar dizisi
sayac,seffaf:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
AlphaBlend:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
seffaf:=seffaf+5;
AlphaBlendValue:=seffaf;
if seffaf=255 then
timer1.Enabled:=false;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i,j,deger:integer;
begin
randomize;//Bilgisayar, program açıldığında aynı rakamları ele almasın diye.
a[1]:=random(49)+1;//Çekiliş dizisine 1-49 arasında 6 farklı rakam atanıyor.
a[2]:=random(49)+1;
a[3]:=random(49)+1;
a[4]:=random(49)+1;
a[5]:=random(49)+1;
a[6]:=random(49)+1;
for i:=1 to 6 do
for j:=i+1 to 6 do
if a[i]=a[j] then a[i]:=a[i]+1;//Eğer bilgisayar rasgele aynı rakamlar tutar ise o rakamı bir arttır.
for i:=1 to 6 do
for j:=i+1 to 6 do
if a[i]>a[j] then//Sıralama algoritması.
begin
deger:=a[i];
a[i]:=a[j];
a[j]:=deger;
end;
edit1.Text:=inttostr(a[1])+? ?+inttostr(a[2])+? ?+inttostr(a[3])+? ?+inttostr(a[4])+? ?+inttostr(a[5])+? ?+inttostr(a[6]);//Çekiliş rakamları edit bileşenine yazdırılıyor.
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
var
i,j,deger,k:integer;
begin
listbox1.Clear;//Önceden yazdırılan kolonlar bir daha listbox?da görünmesin.
label9.Caption:=?0?;
label10.Caption:=?0?;
label11.Caption:=?0?;
label12.Caption:=?0?;
label13.Caption:=?0?;
label14.Caption:=?0?;
for k:=1 to strtoint(edit2.text) do//Belirtilen kolon sayısına göre dön.
 Devamını Oku

Asagida Delphi de F1,F2 tuslarina fonsiyon atama  ve CD Rom açma kapa gibi fonksiyonlarin kodlari bulunmaktadir.

F1,F2 gibi Fonksiyon Tuslarini Kullanmak :

Formun KeyPreview özelligini True yapin ve OnKeyDown olayina asagidaki kodu yazin .

     if Key = VK_F2 then begin {F2'ye basilirsa burdaki kod çalisir} end;

CD-Rom sürücüyü açmak ve kapamak :

uses kismina MMSystem unitini ekleyi unutmayiniz.

mciSendString('Set cdaudio door open wait', nil, 0, handle); //açma
mciSendString('Set cdaudio door closed wait', nil, 0, handle); //kapama



Harddiskin seri numarasinin bulunmasi :

Asagida delphi programlama dilinde Harddiskin seri numarasinin bulunmasi için gereken delphi kodlari bulunmaktadir.

procedure TForm1.Button1Click(Sender: TObject); 
  var
       VolumeSerialNumber : DWORD;
       MaximumComponentLength : DWORD;
       FileSystemFlags : DWORD;
       SerialNumber : string;
  begin 
        GetVolumeInformation('C:\',
                                     nil,
                                     0,
                                     @VolumeSerialNumber,
                                     MaximumComponentLength,
                                     FileSystemFlags,
                                     nil,
                                     0);
        SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' +
                           IntToHex(LoWord(VolumeSerialNumber), 4);
        Memo1.Lines.Add(SerialNumber);
   end;



Escape tusuna basildiginda  formun kapanmasi :

Formun KeyPreview özelligini True yapiniz. Daha sonra OnKeyPress olayina asagidaki kodu yazin.

    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
      begin
          if key = #27 then Close;
      end;

Alt+F4 tus kombinasyonuyla programin kapanmamasi :

Formun KeyPreview özelligini True yapiniz, daha sonra formun OnKeyDown olayina asagidaki kodu yazin.
 
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 
      begin
          if ((ssAlt in Shift) and (Key = VK_F4)) then Key := 0;
      end;



Delphide Veri tabanina Kayit Ekleme

Bir önceki makalemizde Delphide Access veritabanina baglanmayi anlatmistik. Bu örnegimizde 1 tane Adoconnection,Adotable,DataSoruce ve Dgrid ekleyin. Veri tabanizdaki alanlar kadar Dbedit kullanin Dbeditlerin Properties'ten Datasoruce özeliklerini DataSoruce1 yapiniz ve  DataField özeligini ise veri tabanindaki alanlarla iliskilendirmesini yapiniz.Veri kaydetmek içinde 1 tane buton form ekleyiniz.

procedure TForm1.Button1Click(Sender: TObject);
begin
     ADOTable1.Edit ;
     ADOTable1.Post ;
end;

Seçilen Veriyi Silme :

Örnegimizde 1 tane Adoconnection,Adotable,DataSoruce ve Dgrid ekleyiniz. Veri silmek  içinde 1 tane buton forma ekleyiniz.

procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
begin
     a:=Application.MessageBox('Seçilen veriyi silmek istediginizden Emin misiniz ?','Uyari',MB_YesNo);
     if a=idyes then Adotable1.Delete;
end;

  Yukaridaki örnek seçili veri üzerindeyken button tikladiginiz zaman karsimiza mesaj gelecek Evet tusuna basilirsa veri silicektir.



Delphi de Access Veri Tabanina Baglanma

Formunuza  AdoConnection,Adotable,DataSource ve DBGrid ekleyin.AdoConnection Obeject inspector kismindan ConnectionString gelerek yaninda bulunan noktalara tiklayiniz. 



Karsiniza gelen yukarida resimde bulunan Build butonuna tiklayiniz.



Microsolf Jet 4.0 ole db Provider seçtikten sonra ileri butonuna tiklayiniz. Sonraki Asamada veri tabanini seçin. Adotable connection özeligini AdoConnection1 yapin ve TableName kisminda tablonuzu seçin.Active kisminida true yapmayi unutmayin.DataSoruce properties özeliklerinden dataset Adotable1 yapin ve Dbgrid DataSource özeligini DataSoruce1 yapin. Böylce Access veri tabanini baglamis olursunuz



Delphi de Repeat Until Komutunun Kullanimi

Delphide kullanilan döngülerden biride Repeat until döngüsüdür. Bu döngüde Repeat ile until arasindaki blok Until kelimesinden sonraki kontrol sarti yanlis oldukça çalisacaktir. Yani Untildeki karsilastirma dogru çikana kadar döngüden çikilmaz. Bu döngüde kontrol sonda yapildigi için döngüden hemen çikilsa bile döngü içerisindeki kod en az bir defa çalistirilacaktir. Buna dikkat edilmelidir. Eger ters karsilastirma yapilmasi isteniyorsa yani sart olustugunda döngüden çikilmasi isteniyorsa döngü Not operatörü ile kullanilabilir.

Asagida DBGrid içinde bulunan “Toplam” sütunu içerisindeki rakamlari (Real veya Currency) tüm satirlarini toplatip Label1 içerisine yazan program .

procedure TForm1.Button2Click(Sender: TObject);
var toplam:real;
begin
      toplam:=0;
      Adotable1.First;
      Repeat
           Toplam:=Toplam+Adotable1Toplam.AsCurrency;
           Adotable1.Next;
       Until(Adotable1.Eof) 
       Label1.Caption:=FloatToStr(toplam);
end;



Delphi de for döngüsünün kullanimi

For döngüsüyle baslagiç ve bitis degerine kadar olan program bloglarinin çalismasini saglar. Baslangiç Degeri, bitis Degeri den küçükse döngüye hiç girilmez. Sayaç’in artarak degil azalarak çalismasi için downto deyimi kullanilir. Baslangiç degeri, bitis degerinden büyükse döngüye hiç girilmez.Kullanimi:

For sayaç:=baslangiç degeri to bitis degeri do
    Begin
      Komutlar;
   End;

Edit1 içine yazilan bir sayinin asal olup olmadigini buton1.onclick gerçeklesince bulan ve bunu label1 içine yazan program:

procedure TForm1.Button1Click(Sender: TObject);
var sayi,a,x:integer;
begin
    sayi :=StrToInt(edit1.Text );
    a:=-1;
    for x:=2 to sayi-1 do
       begin
             if sayi mod x=0 then a:=+1 ;
       end;
    if a=1 then label1.Caption :='ASALDIR DEGILDIR'
    else label1.Caption:= 'ASALDIR';
end;

Degiskenlerimizi tanimladik. Baslangiç degerimizi x:=1 baslatik bitis degerimizi sayi-1 edit1 yazdigimiz degeri 1 azaltarak bitis degerimizi belirtik ve if ile x degiskenimiz sifir ise a degikenimizi 1 artirmasini saglanmis oldu. Diger if döngüsüylede a degikenimiz bir ise label1 "Asal degildir" degilse "asal" yazdirmasi saglamis olduk.



« 1 2 »