Delphi Demo Kontrol Kodları

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
aXéNT

Delphi Demo Kontrol Kodları

Mesaj gönderen aXéNT »

Merhaba arkadaşlar. Geçenlerde bi arkadaşımın akrabası satış ve stok takibi için basit bir program istedi. Programı yapıcaktım ama bir koruma sistemi koymayı düşündüm. Onuda şu sebepten dolayı düşündüm. Sonuçta esnaf bu adam ve bu programı elbetki tanıdık diğer esnaflar görücek ve isticekler bedavaya gitmesindende dedim 3-5 bişiler kazanim bari dedim . Neyse düşündüm ve kafamda bişiler tasarladım. Kısaca anlatmak gerekirse program ilk açıldığında databaseden demomu yoksa kayıtlımı olduğunu kontrol ediyor. Eğer kayıtlıysa program normal olarak çalışmaya devam ediyor. Yok eğer kayıtlı değilse yine databasedeki hdd seri noyu bilgisayarın hdd seri no ile eşleştiriyor. Eğer eşitse programın yüklenme tarihiyle bugünün tarihini kontrol ediyor bu sefer. Geçtiyse programı çalıştırmadan kayıt ekranını gösteriyor. Geçmediyse demo olarak kullanıyorsunuz diye uyarı verip devam ediyor. Eğerli eşit değilse hdd seri nolar database yeni hdd seri noyu alyor ve yüklenme tarihini bugün olarak atıp yine uyarı verip programı çalıştırıyor İyi bir anlatıcı olmadığım kesin o yüzden kusura bakmayın artık. Ben yapılışa geçim belki ozaman anlarsınız. Şimdi ilk olarak programa eklememiz gereken nesnelerden başlayalım:

2 tane form açıyoruz. Birinin adına AcilisFormu, diğerinin adınada AnaMenu yazıyoruz.
AcilisFormu’nun üstüne bitane timer koyuyoruz ve intervalini 6000 yapıyoruz.
Ve tabi birda acces database oluşturucaz ve içine Kontrol Adında tablo oluşturuyoruz.
Bu tablonun içine AktivasyonKodu, HDDNo ve YuklenmeTarihi olarak 3 tane alan açıyoruz
1 tane DataModule açıp adını DM yapıp AdoConnection nesnesiyle gerekli bağlantıyı yapıyoruz
DataModule AdoTable ekleyip AdoConnectionla ilişkilendirip Kontrol tablosuna bağlıyoruz
Bundan sonra o forumu süslemek size kalmış program ilk çalıştığı zaman bu ekran gözükücek
Eğer hazırlıklarımızı yaptıysak gelelim kod kısmına. AcilisFormu önümüzdeyken F12 tuşuna basıp kod ekranın geçiyoruz ve aşağıda verdiğim kodları Uses kısmının altına ekliyoruz.

Kod: Tümünü seç

Function HDDVolumeSeri(Surucu:char):  string;
var
  NotUsed           :  dWord;
  VolumeFlags       :  dWord;
  VolumeInfo        :  array[0..MAX_PATH] of char;
  VolumeSerialNumber:  dWord;
begin
  GetVolumeInformation(PChar(Surucu + ':\'),
                       VolumeInfo, SizeOf(VolumeInfo),
                       @VolumeSerialNumber, NotUsed,
                       VolumeFlags, nil, 0);
  Result := Format('%x', [VolumeSerialNumber]);
end;

Function ASCIIbirUstHex( HDDVol:String ):String;
Var
  Sayac : Integer;
begin
  Result := '';
  For Sayac := 1 to Length(HddVol) do begin
    Result := Result + Format('%d', [ Ord(HddVol[Sayac])+1 ]);
  end;
end;

Function SifiraTamamlayan( Anahtar: String ):String;
Var
  Sayac : Integer;
begin
  Result := '';
  For Sayac := 1 to Length(Anahtar) do begin
    Result := Result + Format('%d', [ 9 - StrToInt(Anahtar[Sayac]) ]);
  end;
end;
Bu kodlar bizim aktivasyon kodumuzu oluşturacak fonkisyonlar. Bu arada bu kodları burdan bi arkadaş paylaşmış ordan aldım kendime ait değil yani onu belirtim. Fakat geri kalan kodları kendim yazdım ;) İlk baştaki HDDVolumeSeri yazan Harddisk Seri Numarasını alıyor. Sonraki fonksiyon onu bi üst değerini alıyor. Ve son olarak SifiraTamamlayan fonksiyonuda çıkan değeri üste doğru yuvarlayıp tam bir değer elde ediyor. Aktivasyon kodumuzu oluşturduk şimdi gelelim bunu programın açılışında kontrol ettirmeye. Timer bir nesnesine çift tıklayıp kod ekranına geldik. begin ve end’i silip aşağıda verdiğim kodu yapıştırıyoruz.

Kod: Tümünü seç

Var HDD,BirUst,AktivasyonKodu:String
begin
HDD:=HHDDVolumeSeri('C');
BirUst:=ASCIIbirUstHex(HDD);
AktivasyonKodu:=SifiraTamamlayan(BirUst);

If DM.KontrolAktivasyonKodu.AsString = AktivasyonKodu Then
begin
 Anamenu.Show; ;
 AcilisEkrani.Hide;
end
Else
begin
 If DM.KontrolHDDNo.AsString = HDDVolumeSeri('C') Then
 begin
  If DM.KontrolYuklenmeTarihi.AsDateTime > Date Then
  begin
   MessageDLG('Deneme sürümünüz dolmuştur. Lütfen programı kaydettiriniz.',mtWarning, [mbYes],0);
  end
  Else
  begin
   MessageDLG('Programınız Demo sürümdedir. En kısa sürede kaydettiriniz.',mtWarning, [mbYes],0);
   AnaMenu.Show;
   AcilisEkrani.Hide;
  end
 end
 Else
 begin
  DM.Kontrol.Edit;
  DM.KontrolTuru.AsString:='Demo';
  DM.KontrolHDDNo.AsString:=HDDVolumeSeri ('C');
  DM.KontrolYuklenmeTarihi.AsDateTime:=Date;
  DM.Kontrol.Post
  MessageDLG('Programınız Demo sürümdedir. En kısa sürede kaydettiriniz.',mtWarning, [mbYes],0);
  SifreEkrani.Show;
  AcilisEkrani.Hide;
 end;
end;
end;
Neden timer derseniz formun activine yazdığım zaman hata veriyor. Ondan dolayı buraya yazdım. Siz onun yerine button click olayına yazıp formun activinde formu click ettirebilirsiniz. Aslına bakarsanız aktivasyon kodu biraz daha geliştirilebilir.Ben hazır buldum. Ve sonradan farkettim her sayının karşılığı oluyor çok kolay kıralabilir. O yüzden en kısa zamanda geliştirip paylşırım. Ayrıca şu an yazarken yeni farkettim. Kodda eğer aktivasyon kodu veritabanından yoksa hdd seri no kontrol ediyor. Eğer eşitse yükleme tarihinin 1 ay sonrasıyla bugünü eşitliyor burda sorun olabilir tarihi geri alarak program kullanımı devam edebilir. Ama onuda düşüdüm. Süre dolduysa bir alana bir değer atıp tarihi geri aldılarsa bile yedirmeme gibi bi olay yapılabilir. Herneyse kafam bulanmaya başladı. Yeni bir versiyon çıkınca konuyu düzenler yeniden paylaşırım. Şimdilik bununla idare edin artık :D.Takıldığınız biyer olursa yardımcı olmaya çalışırım arkadaşlar
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Delphi Demo Kontrol Kodları

Mesaj gönderen Battosai »

HDD volume numarası tercih edilmesi gerekn bir kod değildir...format atınca değişir bu numara...İşlminizi HDD fabrika koduna göre düzenleyin. Bu kod her hdd için tekdir ve değişmez.
Cevapla