Programlama yapalım ve Öğrenelim. - Delphi Eğitim13
  Ana Sayfa
  .NET Eğitim Notları
  Visual C# .NET Örnek Kodları
  VisualBasic.NET Örnek Kodları
  J# Örnekleri
  ASP.NET Örnek Kodları
  Delphi Eğitim
  => Delphi Eğitim1
  => Delphi Eğitim2
  => Delphi Eğitim3
  => Delphi Eğitim4
  => Delphi Eğitim5
  => Delphi Eğitim6
  => Delphi Eğitim7
  => Delphi Eğitim8
  => Delphi Eğitim9
  => Delphi Eğitim10
  => Delphi Eğitim11
  => Delphi Eğitim13
  => Delphi Eğitim14
  => Delphi Eğitim15
  => Delphi Eğitim16
  => Delphi Eğitim17
  => Delphi Eğitim18
  => Delphi Eğitim19
  => Delphi Eğitim20
  => Delphi Eğitim21
  => Delphi Eğitim22
  => Delphi Eğitim23
  => Delphi Eğitim24
  => Delphi Eğitim25
  => Delphi Eğitim26
  => Delphi Eğitim27
  => Delphi Eğitim28
  => Delphi Eğitim29
  => Delphi Eğitim30
  => Delphi Eğtim31
  => Delphi Eğitim32
  => Delphi Eğitim33
  => Delphi Eğitim34
  => Delphi Eğitim35
  => Delphi Eğitim36
  => Delphi Eğitim37
  => Delphi Eğitim38
  => Delphi Eğitim39
  => Delphi Eğitim40
  => Delphi Eğitim41
  => Delphi Eğitim42
  => Delphi Eğitim43
  => Delphi Eğitim44
  => Delphi Eğitim45
  => Delphi Eğitim46
  => Delphi Eğitim47
  => Delphi Eğitim48
  => Delphi Eğitim49
  => Delphi Eğitim50
  => Delphi Eğitim51
  => Delphi Eğitim52
  => Delphi Eğitim53
  => Delphi Eğitim54
  => Delphi Eğitim55
  => Delphi Eğitim56
  => Delphi Eğitim57
  => Delphi Eğitim58
  => Delphi Eğitim59
  => Delphi Eğitim60
  => Delphi Eğitim61
  => Delphi Eğitim62
  => Delphi Eğitim63
  => Delphi Eğitim64
  => Delphi Eğitim65
  => Delphi Eğitim66
  => Delphi Eğitim67
  => Delphi Eğitim68
  => Delphi Eğitim69
  => Delphi Eğitim70
  => Delphi Eğitim71
  => Delphi Eğitim72
  => Delphi Eğitim73
  => Delphi Eğitim74
  => Delphi Eğitim75
  => Delphi Eğitim76
  => Delphi Eğitim77
  => Delphi Eğitim78
  => Delphi Eğitim79
  => Delphi Eğitim80
  => Delphi Eğitim81
  => Delphi Eğitim82
  => Delphi Eğitim83
  => Delphi Eğitim84
  => Delphi Eğitim85
  => Delphi Eğitim86
  => Delphi Eğitim87
  => Delphi Eğitim88
  => Delphi Eğitim89
  => Delphi Eğitim90
  => Delphi Eğitim91
  => Delphi Eğitim92
  => Delphi Eğitim93
  => Delphi Eğitim94
  => Delphi Eğitim95
  => Delphi Eğitim96
  => Delphi Eğitim97
  => Delphi Eğitim98
  => Delphi Eğitim99
  => Delphi Eğitim100
  => Delphi Eğitim101
  => Delphi Eğitim102
  => Delphi Eğitim103
  => Delphi Eğitim104
  => Delphi Eğitim105
  => Delphi Eğitim106
  => Delphi Eğitim107
  => Delphi Eğitim108
  => Delphi Eğitim109
  => Delphi Eğitim110
  => Delphi Eğitim111
  => Delphi Eğitim112
  => Delphi Eğitim113
  => Delphi Eğitim114
  => Delphi Eğitim115
  => Delphi Eğitim116
  => Delphi Eğitim117
  => Delphi Eğitim118
  => Delphi Eğitim119
  => Delphi Eğitim120
  => Delphi Eğitim121
  => Delphi Eğitim122
  => Delphi Eğitim123
  => Delphi Eğitim124
  => Delphi Eğitim125
  => Delphi Eğitim126
  => Delphi Eğitim127
  => Delphi Eğitim128
  => Delphi Eğitim129
  => Delphi Eğitim130
  => Delphi Eğitim131
  => Delphi Eğitim132
  => Delphi Eğitim133
  => Delphi Eğitim134
  => Delphi Eğitim135
  => Delphi Eğitim136
  => Delphi Eğitim137
  => Delphi Eğitim138
  => Delphi Eğitim139
  => Delphi Eğitim140
  => Delphi Eğitim141
  => Delphi Eğitim142
  => Delphi Eğitim143
  => Delphi Eğitim144
  => Delphi Eğitim145
  => Delphi Eğitim146
  => Delphi eğitim147
  => Delphi Eğitim148
  => Delphi Eğitim149
  => Delphi Eğitim150
  => Delphi Eğitim151
  => Delphi Eğitim152
  => Delphi Eğitim153
  => Delphi Eğitim154
  => Delphi Eğitim155
  => Delphi Eğitim156
  => Delphi Eğitim157
  => Delphi Eğitim158
  => Delphi Eğitim159
  => Delphi Eğitim160
  => Delphi Eğitim161
  => Delphi Eğitim162
  => Delphi Eğitim164
  => Delphi Eğitim165
  => Delphi Eğitim166
  => Delphi Eğitim167
  => Delphi Eğitim168
  => Delphi Eğitim169
  => Delphi Eğitim170
  => Delphi Eğitim171
  => Delphi Eğitim172
  => Delphi Eğitim173
  => Delphi Eğitim174
  => Delphi Eğitim175
  => Delphi Eğitim176
  => Delphi Eğitim177
  => Delphi Eğitim178
  => Delphi Eğitim179
  => Delphi Eğitim180
  => Delphi Eğitim181
  => Delphi Eğitim182
  => Delphi Eğitim183
  => Delphi Eğitim184
  => Delphi Eğitim185
  => Delphi Eğitim186
  => Delphi Eğitim187
  => Delphi Eğitim188
  => Delphi Eğitim189
  => Delphi Eğitim190
  => Delphi Eğitim191
  => Delphi Eğitim192
  => Delphi Eğitim193
  => Delphi Eğitim194
  => Delphi Eğitim195
  => Delphi Eğitim196
  => Delphi Eğitim197
  => Delphi Eğitim198
  => Delphi Eğitim199
  => Delphi Eğitim200
  => Delphi Eğitim201
  => Delphi Eğitim202
  => Delphi Eğitim203
  => Delphi Eğitim204
  => Delphi Eğitim205
  => Delphi Eğitim206
  => Delphi Eğitim207
  => Delphi Eğitim208
  => Delphi Eğitim209
  => Delphi Eğitim210
  => Delphi Eğitim211
  => Delphi Eğitim212
  => Delphi Eğitim213
  => Delphi Eğitim214
  => Delphi Eğitim215
  => Delphi Eğitim216
  => Delphi Eğitim217
  => Delphi Eğitim218
  => Delphi Eğitim219
  => Delphi Eğitim220
  => Delphi Eğitim221
  => Delphi Eğitim222
  => Delphi Eğitim223
  => Delphi Eğitim224
  => Delphi Eğitim225
  => Delphi Eğitim226
  => Delphi Eğitim227
  => Delphi Eğitim228
  => Delphi Eğitim229
  => Delphi Eğitim230
  => Delphi Eğitim231
  => Delphi Eğitim232
  => Delphi Eğitim233
  => Delphi Eğitim234
  => Delphi Eğitim235
  => Delphi Eğitim236
  => Delphi Eğitim237
  => Delphi Eğitim238
  => Delphi Eğitim239
  => Delphi Eğitim240
  => Delphi Eğitim241
  => Delphi Eğitim242
  İletişim

PROGRAM BİR KEZ ÇALIŞSIN (Hatta açıksa hiç açılmasın bile)

Arkadaşlar merhabalar bilmeyen arkadaşlar için yazayım dedim, Kodbankta Programın yalnızca bir kez çalışması

ile ilgili,

 

CreateMutex(nil,FALSE,'PROGRAMADI');

if GetLastError = ERROR ALREADY EXISTS then

  begin

   ShowMessage('Program şu an çalışmakta.');

   Halt(0);

  end;

 

 

şeklinde kodlar var ve çok güzelde çalışıyor ancak bazı arkadaşlarımız bunun projenin kaynak kodlarına

eklenmesini söylemişler, bir arkadaşımızda kaynak kod dan çalışmayacağını bu kodun OnCreate yordamına

eklenmesi gerektiğini söylemiş. Şimdi önemli olan Evet bu kod doğru ve çok güzel çalışıyor ancak bir eksik

var o da bu kodlar kaynak koda eklenip çalıştırılabilirler sadece kaynak kodunuzdaki uses alanına

"CreateMutex" fonksiyonunu barındıran "Windows" ve "Showmessage" fonksiyonunu eklemeniz

gerekiyor. Bu şekilde açılış engellemenin en güzel tarafı eğer program açıksa daha form hafızaya alınmadan

program kapatılıyor. Eğerki bu kodu onCreate yordamına eklerseniz, program çalışır, form(lar) yüklenir ve

eğer aynı isimli çalışan program varsa program kapatılır. Umarım bilmeyen arkadaşlara yazdımcı olur...

 

Programın Kaynak Kodunun Son Hali:

 

 

program ABC;

 

 uses

  Forms,Windows,

  Unit1 in 'Unit1.pas' {Form1};

 

{$R *.res}

 

begin

CreateMutex(nil,FALSE,'ABC v1.0'); if GetLastError = ERROR_ALREADY_EXISTS then Halt(0); //isterseniz uyarı felan da

  Application.Initialize;                                                               // gösterebilirsiniz..

  Application.MainFormOnTaskbar := True;

  Application.Title := 'ABC v1.0';

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.

 

Delphi - .....................................

 

ArSoft : Dosyayı kendi programınızla çalıştırabilirsiniz.

{

ArSoft Yazılım

Kendi dosya formatınızı yapmak istiyorsanız aşağıdaki fonksiyonu kullanabilirsiniz.

Bu fonksiyon parametre olarak gönderilen dosya adını verir. 1 olan değeri değiştirdiğinizde

dosya hakkındaki değişik bilgileri edinebilirsiniz.

 

Program çalışır çalışmaz çift tıklanan dosyayı açmak istiyor iseniz.

1. Dosya türlerine, istediğiniz dosya türünü yazıp birlikte açabileceğiniz yani kendi yazdığınız

programın adını ve adresini yazıp ekliyorsunuz.

2.aşağıdaki kodu programınıza ekleyin.

3. Programı çalıştırın.

4. Belirttiğiniz dosyaya çift tıklayınız.

Kolay gelsin.

}

procedure TAnaForm.FormActivate(Sender: TObject);

begin

  Memo1.Lines.LoadFromFile:=paramstr(1);

end;

 

 

{

Mustafa AKDEMİR

Yazılım Uzmanı

makdemir08@hotmail.com

www.arsoft.com.tr

 

}

 

Delphi - .....................................

 

Ağdaki bilgisayar adlarını listeleme

{Valla tertemiz kod çok aradım iyisini bulamamıştım belki sizinde işinize yarar}

 

procedure EnumNetResources(List: TStrings);

 

 procedure EnumFunc(NetResource: PNetResource);

 var

   Enum: THandle;

   Count, BufferSize: DWORD;

   Buffer: array[0..16384 div SizeOf(TNetResource)] of TNetResource;

   i: Integer;

   tstr: string;

 begin

   if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetResource,

Enum) = NO_ERROR then

   try

     Count := $FFFFFFFF;

     BufferSize := SizeOf(Buffer);

     while WNetEnumResource(Enum, Count, @Buffer, BufferSize) = NO_ERROR do

       for i := 0 to Count - 1 do

       begin

         if Buffer[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then

         begin

           tstr := Buffer[i].lpRemoteName;

           delete(tstr,1,2);

           List.Add(tstr);

         end;

         if (Buffer[i].dwUsage and RESOURCEUSAGE_CONTAINER) > 0 then

           EnumFunc(@Buffer[i])

       end;

   finally

     WNetCloseEnum(Enum);

   end;

 end;

 

begin

 List.Clear;

 EnumFunc(nil);

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  EnumNetResources(ListBox1.Items);

end;

 

Delphi - .....................................

 

RichEdit'de Font Ayarlamaları

Seçili Kısmın Kalın olup olamamsı: //Eğer Kalın ise Normal Normal ise Kalın'a çevirir..

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  if fsBold in RichEdit1.SelAttributes.Style then

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style-[fsBold]

  else

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style+[fsBold];

  RichEdit1.SetFocus;

end;

 

Seçili Kısmın Yatıktalik) olup Olmaması: //Eğer Yatık ise Normal Normal ise Yatık'a çevirir.

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  if fsItalic in RichEdit1.SelAttributes.Style then

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style-[fsItalic]

  else

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style+[fsItalic];

  RichEdit1.SetFocus;

end;

 

Seçili Kısmın AltıÇizili olup Olmaması: //Eğer AltıÇizili ise Normal Normal ise AltıÇizili'ye çevirir.

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  if fsUnderline in RichEdit1.SelAttributes.Style then

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style-[fsUnderline]

  else

    RichEdit1.SelAttributes.Style:=

      RichEdit1.SelAttributes.Style+[fsUnderline];

  RichEdit1.SetFocus;

end;

 

YazıTipi boyutunu Ayarlamak:

 

RichEdit1.SelAttributes.Size:=10; // Seçili Kısmın yazıtipi boyutunu 10 yapar

 

YazıTipi Rengini Ayarlamak:

 

RichEdit1.SelAttributes.Color:=clBlue; // Seçili Kısmın yazıtipi rengini Mavi Yapar

 

Delphi - .....................................

 

puf noktalar

//yunusnacar

       1.   Ek Bölüm : Delphi'de PÜF Noktaları

PÜF İNDEKSİ

2.    1.    VERI TABANI - BDE (7 - 105)

1)    TTABLE/TQUERY ÜZERINDE ARTTIRARAK ARAMA 7

2)    PARADOX-TABLO YARATILMASI 8

3)    DBMEMO IÇERIĞININ BAŞKA BIR DBMEMO BILEŞENINE AKTARILMASI 8

4)    TDBNAVIGATOR BILEŞENIN, KOD IÇERISINDEN KONTROL EDILMESI 8

5)    DBMEMO IÇERISINDE BIR METNIN ARANMASI 9

6)    BIR TABLONUN ALAN BILGILERININ ELDE EDILMESI 14

7)    TDBGRID BILEŞENI ÜZERINDE, KAYIT SIRALAMA 20

8)    MEVCUT TABLODAKI KOLONLARIN ELENMESI 20

9)    BIR TABLODAKI TMEMOFIELD TIPLI BIR ALAN IÇERIĞININ, TMEMO BILEŞENINE AKTARILMASI 20

10)   BIR PARADOX TABLOSUNA IKINCI İNDEKS EKLENMESI 21

11)   DBGRID KOLONLARI ÜZERINDE DOLAŞMA 21

12)   DETAYI OLAN BIR TABLODAN KAYIT SILME 21

13)   DBGRID VE MEMO ALANLAR 22

14)   TABLO IÇERIĞININ TSTRINGRID BILEŞENINE DOLDURULMASI 23

15)   TTABLE VEYA TQUERY ÜZERINDEN KAYIT NUMARASININ BULUNMASI 23

16)   DBASE TABLOLARINDAN SILINMIŞ KAYITLARIN ATILMASI 29

17)   UYGULAMA IÇERISINDEN BDE KOD ADI (ALIAS) YARATILMASI 30

18)   BDE KOD ADI (ALIAS) PARAMETRELERININ ELDE EDILMESI 31

19)   BIR DBASE (.DBF) TABLOSUNDAKI SILINMIŞ KAYITLARIN GÖRÜNTÜLENMESI 31

20)   BIR TABLODAKI ALAN SAYISININ BULUNMASI 37

21)   BIR TABLODAKI VERININ, BAŞKA BIR TABLOYA EKLENMESI 39

22)   SORGUDAN TABLO YARATILMASI 40

23)   SORGUDAN TABLOYA VERI AKTARIMI 41

24)   TABLODAKI BIR ALANA AIT VERILERIN, BAŞKA BIR ALANA KOPYALANMASI 42

25)   TABLO KOPYALAMA 44

26)   TABLO SILME 49

27)   ALAN ADININ BULUNMASI 50

28)   ORTAK ALAN ISIMLERI 51

29)   TABLODAKI ALAN ISIMLERI 53

 

30)   ALAN NUMARASI 54

31)   ALAN UZUNLUĞU 55

32)   ALAN TIPLERI 56

33)   TABLONUN ANAHTAR ALANLARI 59

34)   LOOKUP YÖNTEMIYLE DEĞER SEÇME DIYALOĞU 60

35)   BIR PARADOX TABLOSUNUN YENIDEN ANAHTARLANMASI 68

36)   TABLO ADININ DEĞIŞTIRILMESI 71

37)   TABLO YAPILARI AYNI MI? 74

38)   BIR TABLO ALANINDAKI DEĞERLERIN SAĞ TARAFINDAKI BOŞLUKLARIN TEMIZLENMESI 75

39)   ARANAN ALAN, TABLODA VAR MI? 76

40)   ALAN ANAHTAR MI? 78

41)   TABLO MEVCUT MU? 81

42)   TABLO MEVCUT VE  ESAS ANAHTARI VAR MI 82

43)   MEVCUT BIR TABLO ILE AYNI YAPIDA BAŞKA BIR TABLO YARATMAK 84

44)   TABLO FILTRELEME 86

45)   ŞIFRELI PARADOX TABLOSUNA OTOMATIK BAĞLANTI 88

46)   SUBSTRING FONKSIYONUNUN SQL CÜMLESINDE KULLANILMASI 88

47)   DBCONTROLGRID KAYDIRMA ÇUBUKLARI 89

48)   TABLODAN DOSYAYA AKTARMA 91

49)   SORGUDAN DOSYAYA AKTARMA 94

50)   ÖZEL BIR DBGRID 98

51)   DBNAVIGATOR BUTONLARINA ERIŞIM 104

3.    2.    AĞ IŞLEMLERI (106 - 115)

52)   AĞ SÜRÜCÜLERI 106

53)   AĞ DA TANIMLI KULLANICILAR KIMLER? 108

54)   TANIMLI AĞ SÜRÜCÜLERI 112

4.    3.    SES VE GRAFIK IŞLEMLERI (114 - 159)

55)   FARKLI ÇIZGILER 115

56)   STRINGGRID IÇERISINDE BMP 116

57)   TONLAMALI(GRADIENT) FORM 119

58)   EKRAN YAKALAMA 120

59)   BIR RESMI, BMP FORMATINDAN JPEG FORMATINA ÇEVIRME 121

60)   DUVAR KAĞIDI DEĞIŞTIRME 121

61)   SISTEMIN KULLANABILECEĞI RENK SAYISININ BULUNMASI 122

 

62)   DBGRID ALANLARININ RENKLENDIRILMESI 122

63)   LISTBOX BILEŞENLERINDE RENKLI SATIRLAR 123

64)   RENK PALETLERININ YARATILMASI VE KULLANIMI 124

65)   MÜZIK CD SI ÇALINIRKEN, TRACK SAYISININ OKUNMASI 128

66)   EKRAN ÇÖZÜNÜRLÜĞÜ DEĞIŞTIRME 130

67)   BMP RESMININ PANOYA YAPIŞTIRILMASI VE PANODAN KOPYALAMASI 135

68)   BIR EXE DEN IKONUN ALINIP BAŞKA BIR YERE ÇIZILMESI 138

69)   İKON RESMININ, BUTON ÜZERINDE KULLANILMASI 139

70)   GRAFIK ÇIZME IŞLEMI 142

71)   HAREKETLI GRAFIK ÇIZIMI 143

72)   PANOYA RESIM KOPYALAMA 146

73)   BIR REMIN ŞEFFAF OLARAK BAŞKA BIR RESIM ÜZERINE YAPIŞTIRILMASI 147

74)   PALET DEĞIŞTIRME 153

75)   PANODAKI METNIN DISKTEKI BIR DOSYAYA KAYDEDILMESI 158

5.    4.    FORM VE PENCERE IŞLEMLERI  (160 - 186)

76)   MASA ÜSTÜNDEKI IKONLARIN SAKLANMASI 161

77)   BÜTÜN AÇIK PENCERELERIN LISTELENMESI 165

78)   FARKLI BIR PENCERE 166

79)   ÜZERINE BIRAKILAN DOSYALARA DUYARLI FORM 167

80)   FORM BAŞLIĞININ SAKLANMASI 169

81)   STANDART DIŞI FORMLAR 169

82)   FORM POZÜSYONU 173

83)   EKRAN ÇÖZÜNÜRLÜĞÜ 174

84)   FORM BAŞLIK ALANI ÜZERINDE SAAT GÖSTERILMESI 176

85)   FORM BAŞLIĞININ GIZLENMESI 177

86)   FORMUN BAŞLIK ALANINA BUTON YERLEŞTIRME 180

87)   AÇILIR-KAPANIR FORM 184

88)   PENCERENIN TAŞINMASI 186

6.    5.    DISK VE DOSYA IŞLEMLERI  (186 - 212)

89)   SÜRÜCÜ LISTESI 186

90)   DISKET SÜRÜCÜSÜNDE DISKET TAKILI MI ? 188

91)   ÇALIŞAN UYGULAMANIN BULUNDUĞU DIZIN 188

92)   WINDOWS'UN STANDART "BROWSEFOLDER" DIYALOG PENCERESININ KULLANILMASI 189

93)   BIR DIZINDEKI DOSYALARIN VE ALT DIZINLERIN TÜMÜNÜN SILINMESI 191

 

94)   DOSYA KOPYALAMA 192

95)   İKILI DOSYADAN OKUMA 194

96)   BIR DOSYANIN SALT OKUNUR OLARAK AÇILMASI 194

97)   SATIR SONU KARAKTERININ ASCII KODU NEDIR? 194

98)   DISK SERI NUMARASI VE ETIKETININ OKUNMASI 194

99)   DOSYANIN SÜRÜKLENIP BIRAKILMASI 203

100)  WINDOWS GEÇICI KLASÖRÜNÜN BULUNMASI 205

101)  WINDOWS SISTEM DIZINININ BULUNMASI 206

102)  DOSYA YARATILMA TARIHI 206

103)  DOSYANIN SON KULLANILDIĞI TARIH 207

104)  DOSYANIN SON DEĞIŞTIRILDIĞI TARIH 208

105)  DIZIN BOŞ MU? 208

106)  DOSYA UZANTISI HANGI PROGRAMLA BAĞLANTILI? 209

107)  GERI DÖNÜŞÜM KUTUSUNA GÖNDER  211

7.    6.    GENEL  (213 - 323)

108)  KARAKTER DIZISI KARŞILAŞTIRMA 213

109)  YÜKLENMIŞ DLL DOSYALARININ HAFIZADAN ATILMASI 215

110)  BIR DOS KOMUTUNUN KULLANILMASI 216

111)  TEDIT METNININ, ONCHANGE OLAYINDA DEĞIŞTIRILMESI 218

112)  TMEMO BILEŞENINDE, IMLEÇ HANGI SATIRDA? 218

113)  ULUSAL AYARLAR 218

114)  TEDITBOX BILEŞENINDEKI METNIN ILK KARAKTERININ, BÜYÜK HARFE ÇEVIRILMESI 219

115)  WINDOWS'UN KAPANMA ANININ TESPITI 219

116)  BIR MEMO VEYA RICHEDIT BILEŞENINDE, IMLECIN ISTENEN YERE GÖNDERILMESI 223

117)  WINDOWS ÇEVIRMELI AĞ BAĞLANTI PENCERESININ ÇAĞIRILMASI 223

118)  OTOMATIK E-MAIL 223

119)  MONITÖRÜN KAPATILMASI/AÇILMASI 223

120)  WINDOWS'UN KAPATILMASI/YENIDEN BAŞLATILMASI 224

121)  SISTEMDE SES KARTI VAR MI? 224

122)  PROGRAMIN ARKA PLANDA ÇALIŞTIRILMASI 225

123)  WINDOWS GÖREV ÇUBUĞUNUN GIZLENMESI/GÖSTERILMESI 228

124)  ÇALIŞAN PROGRAMIN, GÖREV ÇUBUĞU ÜZERINDEN KALDIRILMASI 228

125)  OCX'KULLANIMI 229

126)  EKRAN ÇÖZÜNÜRLÜĞÜNDEKI DEĞIŞIKLIKLERIN TESPITI 231

127)  PANO GÖRÜNTÜLEME 232

128)  CPU BILGILERI 234

129)  ENTER TUŞUNUN TAB YERINE KULLANILABILECEĞI BIR TEDIT BILEŞENI 251

 

130)  TARIH DOĞRU MU 254

131)  AYDA KAÇ GÜN VAR? 254

132)  GEÇEN HAFTANIN ILK GÜNÜ 255

133)  SONRAKI AYIN ILK GÜNÜ 255

134)  SONRAKI HAFTANIN ILK GÜNÜ 255

135)  HAFTANIN ILK GÜNÜ 256

136)  AYIN SON GÜNÜ 256

137)  AY 256

138)  GELECEK AY 257

139)  GEÇEN AY 257

140)  GÜN SONRA 258

141)  GELECEK AY 258

142)  ÖNCEKI GÜN 258

143)  GEÇEN HAFTA 259

144)  METIN IÇERISINDEN BIR KARAKTER SILME 259

145)  METIN IÇERISINDEN, BIR KARAKTERI DEĞIŞTIRME 259

146)  BIR METNI BELLI BIR UZUNLUĞA TAMAMLAMA 260

147)  METIN DEĞIŞTIRME 262

148)  PROGRAM IÇERISINDEN, BAŞKA BIR UYGULAMAYA TUŞ GÖNDERME 263

149)  PROGRAMI DENEME SÜRÜMÜ HALINE GETIRME 263

150)  LISTBOX BILEŞENINE YATAY KAYDIRMA ÇUBUĞU EKLENMESI 264

151)  KONTROL PANEL APPLETLERININ DELPHI IÇERISINDEN KULLANILMASI 265

152)  SISTEM TARIH/SAAT AYARININ DEĞIŞTIRILMESI 266

153)  EKRAN KORUYUCUNUN DEVREDEN ÇIKARILMASI 268

154)  PROGRAMIN, WINDOWSUN BAŞLANGICINDA ÇALIŞTIRILMASI 269

155)  HATA MESAJI KONTROLÜ 270

156)  EKRAN KORUYUCU KURULMASI 271

157)  LISTBOX YAZI TIPININ DEĞIŞTIRILMESI 271

158)  TAŞINABILIR PANEL 271

159)  CD-ROM KAPAĞININ KAPATILMASI 272

160)  ÇALIŞMA ESNASINDA, BILEŞEN SAYISININ KONTROLÜ 273

161)  FARE IMLECININ, ISTENEN KONTROL ÜZERINE GETIRILMESI 274

162)  ALT-? TUŞ KOMBINASYONU 274

163)  PROGRAMIN DURAKLATILMASI 276

164)  YAZI KARAKTERI STILININ DEĞIŞTIRILMESI 277

165)  MEVCUT BIR DAVRANIŞIN DEĞIŞTIRILMESI 277

166)  KES, KOPYALA, YAPŞTIR 278

167)  FARE IMLECININ, PENCERE ÜZERINDE OLUP OLMADIĞININ KONTROLÜ 278

168)  GETKEYBOARDSTATE 279

169)  OLAY YAKALAMA YORDAMLARININ DINAMIK OLARAK ATANMASI 280

 

170)  SENDER PARAMETRESININ KULLANILMASI 281

171)  BÜYÜK METINLERIN PANODAN ALINMASI 281

172)  WINDOWS SÜRÜM NUMARASININ OKUNMASI 282

173)  PROGRAM GURUPLARININ LISTBOX BILEŞENINE DOLDURULMASI 282

174)  TLISTBOX VE TCOMBOBOX BILEŞENLERI IÇERISINE RESIM YERLEŞTIRILMESI 286

175)  BASIT BIR DLL ŞABLONU 291

176)  İPUCU PENCEREININ ÖZELLEŞTIRILMESI 292

177)  DIZI SABITI TANIMI 293

178)  STRINGRID BILEŞENI IÇERISINDEKI METNIN HIZALAMASI 293

179)  TSTRINGGRID BILEŞENINDEN BIR SATIRIN SILINMESI 294

180)  TSTRINGGRID SATIRININ EN ALTA GÖNDERILMESI 295

181)  SISTEMDE TANIMLI YAZICILARIN LISTELENMESI 295

182)  YAZDIRMA 296

183)  ISTENEN YAZICININ SEÇIMI 296

184)  YAZICI YAZI TIPLERI 297

185)  HEX->DEC 297

186)  HAFIZA MIKTARI 298

187)  FARE HAREKET ALANININ KISITLANMASI 299

188)  PGUP VE PGDOWN TUŞLARI ILE FORMU AŞAĞI YUKARI KAYDIRMA 301

189)  ÖZEL YAZI KARAKTERI 302

190)  EKRAN KORUYUCU 304

191)  BIR NESNEDEKI ÖZELLIKLERIN LISTESI 310

192)  HABERLEŞME PORTLARINA ERIŞIM 310

193)  BILEŞEN ÖZELLIKLERININ KAYIT DEFTERINDE SAKLANMASI 311

194)  LISTBOX IÇERISINDE ARTAN ARAMA 317

195)  SISTEM MENÜSÜNÜN GELIŞTIRILMESI 318

196)  BIR TEDIT.TEXT BILGISINDEKI DEĞIŞIKLIĞIN FARKEDILMESI 320

197)  COMBOBOX BILEŞENININ, IÇINE GIRILDIĞINDE AÇILMASI VE KAPANMASI 321

198)  YAZICIYA DOĞRUDAN BASKI GÖNDERME IŞLEMI 321

199)  BILGISAYARI KAPATIP YENIDEN BAŞLATMA 323

 

 

 

 

 

 

1.    Veri Tabanı/BDE

Bu başlık altında, Delphi programlarında veri tabanı ve veri erişiminde kullanılan bileşenler ile ilgili püf noktaları ve gerekli kod örnekleri yer almaktadır.

Ttable/TQuery üzerinde arttırarak arama

Tedit kullanarak, Ttable üzerinde arttırmalı arama yapmak için, Tedid bileşeninin OnChange olay yordamına, aşğıdaki kod yazılır.

 

procedure TForm1.Edit1Change(Sender: TObject);

begin

With Edit1 do

if Text <> '' then

Table1.FindNearest([Text]);

end;

 Bu türlü bir arama Tquerry üzerinde yapılacaksa,

procedure TForm1.Edit1Change(Sender: TObject);

begin

With Edit1 do

if Text <> '' then begin

Query1.Filter := 'code = '''+Edit1.Text+'''';

Query1.FindFirst;

end;

end;

veya

procedure TForm1.Edit1Change(Sender: TObject);

begin

With Edit1 do

if Text <> '' then

Query1.Locate('code',Edit1.Text,[loPartialKey]);

end;

Paradox-Tablo yaratılması

Kod içerisinden bir Paradox tablosu şu şekilde yaratılır.

with TTable.create(self) do begin

     DatabaseName := 'C:temp';

     TableName := 'FOO';

     TableType := ttParadox;

     with FieldDefs do Begin

        Add('Age', ftInteger, 0, True);

        Add('Name', ftString, 25, False);

        Add('Weight', ftFloat, 0, False);

     End;

     IndexDefs.Add('MainIndex','IntField', [ixPrimary, ixUnique]);

     CreateTable;

End;

DBMemo içeriğinin başka bir DBMemo bileşenine aktarılması

DBMemo6.Lines:=DBMemo5.Lines.Assign;

TDBNavigator bileşenin, kod içerisinden kontrol edilmesi

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);

var

  BtnName: string;

begin

  case Button of

    nbFirst  : BtnName := 'nbFirst';

    nbPrior  : BtnName := 'nbPrior';

    nbNext   : BtnName := 'nbNext';

    nbLast   : BtnName := 'nbLast';

    nbInsert : BtnName := 'nbInsert';

    nbDelete : BtnName := 'nbDelete';

    nbEdit   : BtnName := 'nbEdit';

    nbPost   : BtnName := 'nbPost';

    nbCancel : BtnName := 'nbCancel';

    nbRefresh: BtnName := 'nbRefresh';

  end;

  MessageDlg(BtnName + ' button clicked.', mtInformation, [mbOK], 0);

end;

DBMemo içerisinde bir metnin aranması

procedure Tform1.FindDialog1Find(Sender: TObject);

var Buff, P, FT : PChar;

    BuffLen     : Word;

begin

   With Sender as TFindDialog do

   begin

      GetMem(FT, Length(FindText) + 1);

      StrPCopy(FT, FindText);

      BuffLen:= DBMemo1.GetTextLen + 1;

      GetMem(Buff,BuffLen);

      DBMemo1.GetTextBuf(Buff,BuffLen);

      P:= Buff + DBMemo1.SelStart + DBMemo1.SelLength;

      P:= StrPos(P, FT);

      if P = NIL then MessageBeep(0)

      else

      begin

                DBMemo1.SelStart:= P - Buff;

           DBMemo1.SelLength:= Length(FindText);

      end;

   FreeMem(FT, Length(FindText) + 1);

   FreeMem(Buff,BuffLen);

   DBMemo1.SetFocus;

   end;

end;

 

Şekil 1 : Form1

 

kod örneği  1 : form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 696

  Height = 445

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object DBMemo1: TDBMemo

    Left = 16

    Top = 152

    Width = 657

    Height = 193

    DataField = 'Notes'

    DataSource = DataSource1

    TabOrder = 0

    OnDblClick = DBMemo1DblClick

  end

  object DBGrid1: TDBGrid

    Left = 16

    Top = 16

    Width = 657

    Height = 120

    DataSource = DataSource1

    TabOrder = 1

    TitleFont.Charset = DEFAULT_CHARSET

    TitleFont.Color = clWindowText

    TitleFont.Height = -11

    TitleFont.Name = 'MS Sans Serif'

    TitleFont.Style = []

  end

  object DBNavigator1: TDBNavigator

    Left = 432

    Top = 352

    Width = 240

    Height = 25

    TabOrder = 2

  end

  object DataSource1: TDataSource

    DataSet = Table1

    Left = 138

    Top = 364

  end

  object Table1: TTable

    Active = True

    DatabaseName = 'dbdemos'

    TableName = 'BIOLIFE.DB'

    Left = 220

    Top = 366

  end

  object FindDialog1: TFindDialog

    OnFind = FindDialog1Find

    Left = 40

    Top = 360

  end

end

kod örneği  2 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Grids, DBGrids, Db, DBTables, DBCtrls, ExtCtrls;

 

type

  TForm1 = class(TForm)

    DBMemo1: TDBMemo;

    DataSource1: TDataSource;

    Table1: TTable;

    DBGrid1: TDBGrid;

    FindDialog1: TFindDialog;

    DBNavigator1: TDBNavigator;

    procedure FindDialog1Find(Sender: TObject);

    procedure DBMemo1DblClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure Tform1.FindDialog1Find(Sender: TObject);

var Buff, P, FT : PChar;

    BuffLen     : Word;

begin

   With Sender as TFindDialog do

   begin

      GetMem(FT, Length(FindText) + 1);

      StrPCopy(FT, FindText);

      BuffLen:= DBMemo1.GetTextLen + 1;

      GetMem(Buff,BuffLen);

      DBMemo1.GetTextBuf(Buff,BuffLen);

      P:= Buff + DBMemo1.SelStart + DBMemo1.SelLength;

      P:= StrPos(P, FT);

      if P = NIL then MessageBeep(0)

      else

      begin

                DBMemo1.SelStart:= P - Buff;

           DBMemo1.SelLength:= Length(FindText);

      end;

   FreeMem(FT, Length(FindText) + 1);

   FreeMem(Buff,BuffLen);

   DBMemo1.SetFocus;

   end;

end;

 

procedure TForm1.DBMemo1DblClick(Sender: TObject);

begin

finddialog1.execute;

end;

 

end.

Bir tablonun alan bilgilerinin elde edilmesi

Ttable bileşeninden yola çıkarak, bağlı olduğu tablonun alan bilgileri "FieldDefs" özelliği sayesinde elde edilebilir. GetFieldNames davranışı alan isimlerini, GetIndexNames davranışı ise tabloda mevcut olan indeks isimlerini döndürür.

Şekil 2 : form1

 

kod örneği  3 : form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 425

  Height = 340

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object Label1: TLabel

    Left = 16

    Top = 136

    Width = 43

    Height = 13

    Caption = 'İndeksler'

  end

  object Label2: TLabel

    Left = 16

    Top = 0

    Width = 32

    Height = 13

    Caption = 'Alanlar'

  end

  object Label3: TLabel

    Left = 232

    Top = 0

    Width = 122

    Height = 13

    Caption = 'Alan isimleri ve uzunlukları'

  end

  object Memo1: TMemo

    Left = 232

    Top = 16

    Width = 169

    Height = 249

    Lines.Strings = (

      'Memo1')

    TabOrder = 0

  end

  object Button1: TButton

    Left = 240

    Top = 272

    Width = 153

    Height = 25

    Caption = 'Alan isimleri ve uzunlukları'

    TabOrder = 1

    OnClick = Button1Click

  end

  object Button2: TButton

    Left = 16

    Top = 272

    Width = 201

    Height = 25

    Caption = 'Alan ve İndeks isimleri '

    TabOrder = 2

    OnClick = Button2Click

  end

  object ListBox1: TListBox

    Left = 16

    Top = 16

    Width = 201

    Height = 113

    ItemHeight = 13

    TabOrder = 3

  end

  object ListBox2: TListBox

    Left = 16

    Top = 152

    Width = 201

    Height = 113

    ItemHeight = 13

    TabOrder = 4

  end

  object Table1: TTable

    DatabaseName = 'dbdemos'

    TableName = 'ANIMALS.DBF'

    Left = 104

    Top = 72

  end

kod örneği  4 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Db, DBTables;

 

type

  TForm1 = class(TForm)

    Memo1: TMemo;

    Table1: TTable;

    Button1: TButton;

    Button2: TButton;

    ListBox1: TListBox;

    ListBox2: TListBox;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

    procedure ShowFields;

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.ShowFields;

var

   i : Word;

begin

   Memo1.Lines.Clear;

   Table1.FieldDefs.Update;

   for i := 0 to Table1.FieldDefs.Count - 1 do

      With Table1.FieldDefs.Items[i] do

       Memo1.Lines.Add(Name + ' - ' + IntToStr(Size));

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

showfields;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  If Table1.State = dsInactive then Table1.Open;

  Table1.GetFieldNames(listbox1.items);

  Table1.GetIndexNames(listbox2.items);

end;

 

 

end.

TDBGrid bileşeni üzerinde, kayıt sıralama

Eğer bir Interbase tablosu ile çalışılıyor ise, Dbgrid üzerinde seçilen kolon başlığına göre verilerin sıralanması mümkündür.

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

  if checkbox1.checked then

  with dbgrid1.datasource.dataset as ttable do

  indexfieldnames:=column.field.fieldname;

end;

Mevcut tablodaki kolonların elenmesi

Bir tablodaki alanların "Visible" özelliğine "False" değeri verilerek, istenmeyen alanların görüntülenmesi engellenir.

Table1.FieldByName(<saklanacak alanb adı>).Visible :=  False;

veya

Table1.Field[<saklanacak alan no>].Visible := false;

Bir tablodaki TMemoField tipli bir alan içeriğinin, TMemo bileşenine aktarılması

Procedure TMemoToTMemoField;

begin

   TMemoField.Assign( TMemo.Lines );

end;

 

Procedure TMemoFieldToTMemo;

VAR aBlobStream : TBlobStream;

Begin

aBlobStream := TBlobStream.Create(tblobfield(table1.fieldbyname('Notes')), bmRead);

   Memo1.Lines.LoadFromStream( aBlobStream );

   aBlobStream.Free;

end;

Bir Paradox tablosuna ikinci İndeks eklenmesi

Table1.AddIndex('<indeks adı>', 'CustNo;CustName', [ixDescending]);

DBGrid kolonları üzerinde dolaşma

dbgrid1.selectedindex:=dbgrid1.selectedindex+1;

dbgrid1.setfocus;

Detayı olan bir tablodan kayıt silme

Master-Detay ilişki içerisindeki tablolarda, detayı olan bir ana kayıt silindiğinde, detaylar ortada kalır. Ana kayıt olmadığına göre detaylara da ihtiyaç yoktur. Bu nedenle ana kayıt silinmeden önce detayları silmek gerekir. Table1 ana tabloya, Table2 de Detay tabloya bağlı kabul edilirse, Table1' den bir kayıt silinmek istendiğinde önce Table2' deki detaylar temizlenecektir aşağıdaki örnek bunu göstermektedir.

procedure TForm1.Table1BeforeDelete(DataSet: TDataset)

begin

   with Table2 do begin

     DisableControls;

     First;

     While not EOF do

        Delete;

     EnableControls;

   end;

end;

DBGrid ve Memo alanlar

DBGrid bileşeninde Memo/Blob alanlar  <memo> olarak gösterilir.

Aşağıdaki örnekte bu tür alanların da metin olarak görüntülenmesi sağlanmaktadır. Table bileşeni üzerine yüklenen kolonlardan NOTES alanı MEMO tipindedir. Bu alanın GetText yordamında Blob2Str fonksiyonu kullanılarak, alandaki veri görünür hale getirilmektedir.

procedure TForm1.Table1NotesGetText(Sender: TField; var Text: String;

  DisplayText: Boolean);

begin

Text := Blob2Str(TMemoField(Sender));

end;

Blob2Str fonksiyonu:

function Blob2Str(TheField : TMemoField): String;

var

  Buffer: PChar;

  MemSize: Integer;

  tmp:string;

begin

if TheField.IsNull then

  Result := '' else

  with TBlobStream.Create(TheField, bmRead) do

  begin

      MemSize := Size;

      Inc(MemSize); Buffer := AllocMem(MemSize);

      Read(Buffer^, memsize);

      Free;

   end;

    result:=strpas(buffer);

end;

Tablo içeriğinin TstrinGrid bileşenine doldurulması

Tablo içeriğinin TstrinGrid bileşenine doldurulması şu şekilde olur.

   table.first;

   row := 0;

   grid.rowcount := table.recordCount;

   while not table.eof do begin

      for i := 0 to table.fieldCount-1 do

         grid.cells[i,row] := table.fields[i].asString;

      inc (row);

      table.next;

   end;

TTable veya TQuery üzerinden kayıt numarasının bulunması

Dataset Paradox veya dBASE tablosuna bağlı ise kayıt numarasını bulmak, birkaç BDE fonksiyon kullanmak suretiyle mümkündür. Ancak SQL tabanlı veri tabanı sunumcularında, sunumcunun kendisi buna imkan vermiyorsa, bu bilgi elde edilemez.

Aşağıdaki fonksiyon parametre olarak bir Ttable bileşeni almakta ve gösterdiği Paradox/dBase tablosunudan kayıt numarasını, başarısız olduğunda ise 0 değerini döndürmektedir.

Bu fonksiyonun döndürdüğü kayıt numarası, kaydın tablodaki fiziksel yeri ile ilgilidir. Indeks tanımlanmış bir TTable veya "Order by" ile sıraya sokulmuş bir sorgu kümesi döndüren Tquery bileşeninde, hatalı değer döndüğü sanısına kapılınmamalıdır.

uses

DbiProcs, DbiTypes, DBConsts;

 

function Form1.Recno( oTable: TTable ): Longint;

var

  rError: DBIResult;

  rRecProp: RECprops;

  szErrMsg: DBIMSG;

begin

  Result := 0;

  try

    oTable.UpdateCursorPos;

    rError := DbiGetRecord( oTable.Handle, dbiNOLOCK, nil, @rRecProp );

    if rError = DBIERR_NONE then

      Result := rRecProp.iPhyRecNum

    else

      case rError of

      DBIERR_BOF: Result := 1;

      DBIERR_EOF: Result := oTable.RecordCount + 1;

      else

      begin

        DbiGetErrorString( rError, szErrMsg );

        ShowMessage( StrPas( szErrMsg ));

        end;

      end;

  except

    on E: EDBEngineError do ShowMessage( E.Message );

  end;

end;

Şekil 3 : Form1

 

kod örneği  5 : form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 451

  Height = 250

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object Label1: TLabel

    Left = 112

    Top = 16

    Width = 32

    Height = 13

    Caption = 'Label1'

  end

  object Label2: TLabel

    Left = 32

    Top = 16

    Width = 49

    Height = 13

    Caption = 'Kayıt No : '

  end

  object DBGrid1: TDBGrid

    Left = 16

    Top = 32

    Width = 417

    Height = 120

    DataSource = DataSource1

    TabOrder = 0

    TitleFont.Charset = DEFAULT_CHARSET

    TitleFont.Color = clWindowText

    TitleFont.Height = -11

    TitleFont.Name = 'MS Sans Serif'

    TitleFont.Style = []

  end

  object DBNavigator1: TDBNavigator

    Left = 192

    Top = 168

    Width = 240

    Height = 25

    DataSource = DataSource1

    TabOrder = 1

  end

  object DataSource1: TDataSource

    DataSet = Table1

    Left = 88

    Top = 168

  end

  object Table1: TTable

    Active = True

    AfterScroll = Table1AfterScroll

    DatabaseName = 'dbdemos'

    TableName = 'ANIMALS.DBF'

    Left = 16

    Top = 168

  end

end

kod örneği  6 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;

 

type

  TForm1 = class(TForm)

    DataSource1: TDataSource;

    DBGrid1: TDBGrid;

    DBNavigator1: TDBNavigator;

    Label1: TLabel;

    Label2: TLabel;

    Table1: TTable;

    function  Recno( oTable: Ttable): Longint;

    procedure Table1AfterScroll(DataSet: TDataSet);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

uses

DbiProcs, DbiTypes, DBConsts;

{$R *.DFM}

 

function TForm1.Recno( oTable: Ttable): Longint;

var

  rError: DBIResult;

  rRecProp: RECprops;

  szErrMsg: DBIMSG;

begin

  Result := 0;

  try

     oTable.UpdateCursorPos;

     rError := DbiGetRecord( oTable.Handle, dbiNOLOCK, nil, @rRecProp );

     if rError = DBIERR_NONE then

     Result := rRecProp.iPhyRecNum

    else

     case rError of

          DBIERR_BOF: Result := 1;

          DBIERR_EOF: Result := oTable.RecordCount + 1;

      else

      begin

        DbiGetErrorString( rError, szErrMsg );

        ShowMessage( StrPas( szErrMsg ));

        end;

      end;

  except

    on E: EDBEngineError do ShowMessage( E.Message );

  end;

end;

 

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);

begin

   label1.caption:=inttostr(recno(table1));

end;

 

end.

dBase tablolarından silinmiş kayıtların atılması

Bu işlem için DbiPackTable. İsimli BDE fonksiyonu kullanılır.

Örnek kod şu şekildedir.

uses

DbiProcs, DbiTypes, DBConsts;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Error: DbiResult;

  ErrorMsg: String;

  Special: DBIMSG;

begin

  table1.Active := False;

  try

    Table1.Exclusive := True;

    Table1.Active := True;

    Error := DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdBASE, True);

    Table1.Active := False;

    Table1.Exclusive := False;

  finally

    Table1.Active := True;

  end;

  case Error of

    DBIERR_NONE:

      ErrorMsg := 'Tamam';

    DBIERR_INVALIDPARAM:

      ErrorMsg := 'Tablo belirsiz' +

        'name is NULL';

    DBIERR_INVALIDHNDL:

      ErrorMsg := 'Veri tabanı belirsiz';

    DBIERR_NOSUCHTABLE:

      ErrorMsg := 'Tablo adı belirsiz';

    DBIERR_UNKNOWNTBLTYPE:

      ErrorMsg := 'Tablo tipi belirsiz';

    DBIERR_NEEDEXCLACCESS:

      ErrorMsg := 'Tablo exclusive modda değil';

  else

    DbiGetErrorString(Error, Special);

    ErrorMsg := '[' + IntToStr(Error) + ']: ' + Special;

  end;

  MessageDlg(ErrorMsg, mtWarning, [mbOk], 0);

end;

Uygulama içerisinden BDE Kod Adı (Alias) yaratılması

procedure createalias(aliasname, servername, servertype, filename:string);

var

 List: TStringList;

 lang,

 user,

 pdox : string;

begin

  lang:='ANTURK';

  user:='SYSDBA';

  pdox:='PARADOX';

  List := TStringList.Create;

  with List do

  begin

    Clear;

    if servertype='INTRBASE' then

    begin

      Add(Format('SERVER NAME=%s',[filename]));

      Add(Format('LANGDRIVER=%s',[lang]));

      Add(Format('USER NAME=%s',[user]));

    end;

    if servertype='STANDART' then

    begin

      Add(Format('DEFAULT DRIVER=%s',[pdox]));

      Add(Format('PATH=%s',[filename]));

    end;

  end;

  if session.isalias(aliasname) then

    Session.ModifyAlias(aliasname, List)

  else

    Session.addAlias(aliasname,servertype, List);

  Session.SaveConfigFile;

  List.Free;

end;

BDE Koad adı (alias) parametrelerinin elde edilmesi

Session.GetAliasParams('DBDEMOS',listbox1.items);

Bir dBase (.DBF) tablosundaki silinmiş kayıtların görüntülenmesi

dBase tablolarındaki silinmiş kayıtların görünür hale getirilmesi için DbiSetProp fonksiyonu kullanılır.

procedure SetDelete(oTable:TTable; Value: Boolean);

     var

       rslt: DBIResult;

       szErrMsg: DBIMSG;

     begin

       try

          oTable.DisableControls;

           try

             rslt := DbiSetProp(hDBIObj(oTable.Handle), curSOFTDELETEON,

             LongInt(Value));

             if rslt <> DBIERR_NONE then

               begin

                 DbiGetErrorString(rslt, szErrMsg);

                 raise Exception.Create(StrPas(szErrMsg));

               end;

           except

             on E: EDBEngineError do ShowMessage(E.Message);

             on E: Exception do ShowMessage(E.Message);

           end;

       finally

          oTable.Refresh;

          oTable.EnableControls;

       end;

     end;

 

Şekil 4 : Örnek uygulama form yapısı

 

kod örneği  7: Form1.dfm

object Form1: TForm1

  Left = 200

  Top = 108

  Width = 559

  Height = 293

  Caption = 'Form1'

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  PixelsPerInch = 96

  TextHeight = 13

  object DBGrid1: TDBGrid

    Left = 8

    Top = 8

    Width = 409

    Height = 177

    DataSource = DataSource1

    TabOrder = 0

    TitleFont.Charset = DEFAULT_CHARSET

    TitleFont.Color = clWindowText

    TitleFont.Height = -11

    TitleFont.Name = 'MS Sans Serif'

    TitleFont.Style = []

  end

  object DBNavigator1: TDBNavigator

    Left = 8

    Top = 200

    Width = 240

    Height = 25

    DataSource = DataSource1

    TabOrder = 1

  end

  object Button1: TButton

    Left = 432

    Top = 8

    Width = 113

    Height = 25

    Caption = 'Silinenleri göster'

    TabOrder = 2

    OnClick = Button1Click

  end

  object Button2: TButton

    Left = 432

    Top = 40

    Width = 113

    Height = 25

    Caption = 'Silinenleri sakla'

    TabOrder = 3

    OnClick = Button2Click

  end

  object Table1: TTable

    Active = True

    DatabaseName = 'dbdemos'

    TableName = 'ANIMALS.DBF'

    Left = 440

    Top = 80

  end

  object DataSource1: TDataSource

    DataSet = Table1

    Left = 488

    Top = 80

  end

end

 

kod örneği  8 : unit1.pas

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;

 

type

  TForm1 = class(TForm)

    Table1: TTable;

    DataSource1: TDataSource;

    DBGrid1: TDBGrid;

    DBNavigator1: TDBNavigator;

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

uses

DbiProcs, DbiTypes, DBConsts;

 

{$R *.DFM}

 

     procedure SetDelete(oTable:TTable; Value: Boolean);

     var

       rslt: DBIResult;

       szErrMsg: DBIMSG;

     begin

       try

          oTable.DisableControls;

           try

             rslt := DbiSetProp(hDBIObj(oTable.Handle), curSOFTDELETEON,

             LongInt(Value));

             if rslt <> DBIERR_NONE then

               begin

                 DbiGetErrorString(rslt, szErrMsg);

                 raise Exception.Create(StrPas(szErrMsg));

               end;

           except

             on E: EDBEngineError do ShowMessage(E.Message);

             on E: Exception do ShowMessage(E.Message);

           end;

       finally

          oTable.Refresh;

          oTable.EnableControls;

       end;

     end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

      SetDelete(Table1, TRUE);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

   SetDelete(Table1, False);

end;

 

end.

Bir tablodaki alan sayısının bulunması

Ttable bileşenini kullanarak, bir tablodaki alan sayısının bulunması için

TableX.fieldcount

Özelliğinden faydalanılabilir. Ancak tablo alanlarının bir kısmı, ttable bileşeni üzerine yüklenmişse fieldcount özelliği sadece yüklenen alan sayısını getirir. Alanları ttable üzerine kısmen yüklenmiş olan bir tablonun, gerçek alan sayısının bulunabilmesi için, aşağıdaki fonksiyon kullanılabilir.

Bu kodun kullanılabilmesi için, form üzerine yerleştirileni ttable bileşenine, bağlandığı tablo alanlarının bir kısmı yüklenmelidir.

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Db, DBTables,

  DbiErrs, DbiTypes, DbiProcs ,bde;

 

type

  TForm1 = class(TForm)

{

Alanlar yüklendiğinde, tanımları buraya yerleşecektir.

}

  Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

function GetFieldCount(T: TTable): Integer;

var

  curProp: CURProps;

  bWasOpen: Boolean;

begin

  Result := 0; {Just in case something goes wrong.}

  bWasOpen := T.Active;

  try

    if not bWasOpen then

      T.Open;

    Check(DbiGetCursorProps(T.Handle, curProp));

    Result := curProp.iFields;

  finally

    if not bWasOpen then

      T.Close;

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

      showmessage(inttostr(table1.fieldcount));

      showmessage(inttostr(GetFieldCount(table1)));

end;

 

end.

Bir tablodaki verinin, başka bir tabloya eklenmesi

Aynı yapıdaki iki ayrı toblo muhteviyatının, birleştirilmesi için kullanılabilecek olan bu fonksiyon, <SourceTable> isimli tablodaki verileri, <DestinationTable>  isimli tabloya kopyalamaktadır. Bu yöntemle veriler, farklı veri tabanları arasında da taşınabilir.

Function AddTables(

           const

           SourceDatabaseName,

           SourceTable,

           DestDatabaseName,

           DestinationTable: string): Boolean;

Var

  BMode : TBatchMode;

Begin

  If IsTableKeyed(DestDatabaseName,DestinationTable) Then

  Begin

    If IsTableKeyed(SourceDatabaseName,SourceTable) Then

    Begin

      BMode := BatAppendUpdate;

    End

    Else

    Begin

      BMode := BatAppend;

    End;

  End

  Else

  Begin

    BMode := BatAppend;

  End;

 

  Result := DBRecordMove(SourceDatabaseName,SourceTable,

DestDatabaseName,DestinationTable,BMode);

End;

Sorgudan tablo yaratılması

Karmaşık sorgular sonucunda toplanan veriler, bu fonksiyon yardımıyla yaratılan bir tablo içerisine doldurulabilir.

Function DBCreateTableFromQuery(

            Query: TQuery;

            NewTableName,

            TableDatabaseName: String): Boolean;

var

  D         : TTable;

  ActiveWas : Boolean;

begin

  D := nil;

  try

    {The Source Table}

    ActiveWas      := Query.Active;

    Query.Active   := true;

D              := TTable.Create(nil);

    D.Active       := False;

    D.DatabaseName := TableDatabaseName;

    D.TableName    := NewTableName;

    D.ReadOnly     := False;

D.BatchMove(Query,batCopy);

    Query.Active := ActiveWas;

    Result := True;

  finally

    D.Free;

  end;

End;

Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol