Programlama yapalım ve Öğrenelim. - Delphi Eğitim93
  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

algoritma  sureci__yararli ornekler

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

ALGORITMA

 

 

PROGRAM YAZMAK SÜRECI

 

1. Problemin farkına varmak,

2. Problemi analiz etmek,

3. Çözüm yolları düşünmek,

4. Iyi çözüm yolları seçip algoritma oluşturmak,

5. Akış diyagramı çizmek,

6. Uygun bir dilde kodlamak,

7. Programı test etmek,

8. Programı dağıtmak.

 

ALGORITMA NEDIR?

 

(Adım adım işlem basamaklarının yazılmasıdır.)

 

Programlamaya Giriş

 

Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar:

i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle.

ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar).

iii) Problemin çözümünü veren algoritmayı yaz.

iv) Algoritmayı bir programla dili ile yaz.

v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.

 

Problem Çözme ve Algoritmalar

 

1.1 Problem Çözme

 

Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayırılmaladır.

Descartes tarafından "Discourse on Method" isimli kitabında anlatılan problem çözme teknikleri;[2]

 

1. Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının.

 

2. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.

 

3. Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.

 

4. Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.

 

1.2 Algoritmalar

 

Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.

I.S. 9.yy da Iranlı Musaoğlu Horzumlu Mehmet

(Alharezmi adını araplar takmıştır) problemlerin çözümü için genel kurallar oluşturdu. Algoritma Alharezmi'nin Latince okunuşu.

Her algoritma aşağıdaki kriterleri sağlamalıdır.

 

1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.

 

2. Çıktı: En azından bir değer üretilmeli.

 

3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.

 

4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.

 

5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.

 

Not: Bir program için 4. özellik geçerli değil. işletim sistemleri gibi program sonsuza dek çalışırlar .

 

Örnek: Iki sayının toplamını yazan algoritmayı yazınız.

 

Çözüm: Adım 1 --> Ilk sayıyı oku, Sembolik olarak A1 S1=?

Adım 2 --> Ikinci sayıyı oku A2 S2=?

Adım 3 --> Sayıları topla A3 T S1+S2

Adım 4 --> Sonucu görüntüle. A4 T'yi göster.

 

1.Soru : Kullanıcının girdiği iki sayının karelerinin toplamını görüntüleyen algoritmayı yazınız.

 

Çözüm

A0 --> Başla

A1 --> Sayaç=0 (Sayaç'ın ilk sayısı 0 olarak başlar.)

A2 --> Sayı=? : TßT+Sayı (Sayıyı giriniz. T'ye sayıyı ekle veT'yi göster.)

A3 --> Sayaç=Sayaç+1 (Sayaç'a bir ekle ve sayacı göster.)

A4 --> Sayaç<4 ise A2'ye git. (Eğer sayaç 4'ten küçükse Adım 2'ye git.)

A5 --> O=T/4 (Ortalama için T değerini 4'e böl)

A6 --> O'yu göster. (Ortalamayı göster.)

A7 --> Dur

 

2.Soru : 20'den 50'ye kadar olan sayıların toplamını bulan algoritma yazınız.

 

BAŞLA

 

Çözüm A0 --> Başla

A1 --> S=20 : T=0 (Sayı 20 T değeri 0 ile başla)

A2 --> TßT+S (T'ye sayıyı ekle T'yi göster.)

A3 --> S=S+1 (Sayıyı bir artır.)

A4 --> S<50 ise A2'ye git. (Eğer sayı 50'den küçük ise Adım 2'ye git)

A5 --> T'yi göster. (T'nin değerini göster.)

A6 --> Dur Akış Şeması à

 

3.Soru : 30 ile 90 arasındaki çift sayıların toplamını bulan algoritma yazınız.

 

Çözüm:

 

A0 --> Başla

A1 --> S=0 : T=0 (Sayı 0, Toplam değeri 0 olsun)

A2 --> S=S+1 (Sayıyı bir artır, sayıyı göster.)

A3 --> T=T+2S+28 (28 sayısına çift sayı olması için sayıyı 2 ile çarp ve toplama ekle, toplamı göster)

A4 --> 2S+28<90 ise git A2 (Eğer Çift sayı 90 değerinden küçük ise Adım 2'ye git)

A5 --> O=T/S (Toplam değeri sayıya böl ve ortalamayı bul)

A6 --> O'yu yaz. (Ortalamayı göster)

A7 --> Dur

 

4.Soru : Klavyeden girilen 10 adet sayıdan çift sayıların toplamının tek sayıların toplamına oranını bulan algoritma yazınız.

 

Çözüm:

 

A0 --> Başla

A1 --> S=0 : T=0 : Ç=0 (Sayı, tek ve çift sayılar 0 değerini alsın)

A2 --> Sayı? (Sayıyı giriniz)

A3 --> (-1)sayı=1 ise Ç=Ç+Sayı (Eğer -1'in sayı üssü 1 sayısına eşitse sayıyı çift sayıya ekle ve çift sayıyı bul.)

A4 --> (-1)sayı=+1 ise T=T+Sayı (Eğer -1'in sayı üssü +1 sayısına eşitse sayıyı tek sayıya ekle ve tek sayıyı bul.)

A5 --> S=S+1 (Sayaça 1 ekle ve sayacı göster)

A6 --> S<10 ise A2'ye git. (Eğer Sayaç 10'dan küçük ise Adım 2'ye git.)

A7 --> V ß Ç/T ift sayıların toplamını tek sayıların toplamına böl.)

A8 --> V'yi göster. (Bölme sonucunu göster.)

A9 --> Dur

 

5.Soru : Klavyeden girilen iki sayıdan en büyüğünü bulup gösteren algoritmayı yazınız.

 

Çözüm :

 

A0 --> Başla

A1 --> S1=? : S2=? (Ilk sayıyı gir ; ;Ikinci sayıyı gir.)

A2 --> S1>S2 ise git A4 (Sayı 1 sayı 2'den küçükse Adım 4'e git.)

A3 --> S2>S1 ise git A5 (Sayı 2 sayı 1'den küçükse Adım 5'e git.)

A4 --> S1'i göster git A6 (sayı 1 değerini göster ve işlemi durdur)

A5 --> S2'yi göster. (Sayı 2 değerini göster)

A6 --> Dur

 

6.Soru : Klavyeden girilen üç sayıdan en büyüğünü bulup gösteren algoritmayı yazınız.

 

Çözüm :

 

A0 --> Başla : EB=-¥ : S=0 (Başla olabilecek EB:en küçük sayı olsun, Sayı 0 olsun)

A1 --> Sayı? (Sayıyı giriniz.)

A2 --> Sayı>EB ise EB=Sayı (Eğer Sayı EB'den küçükse EB sayıyla aynı değeri alsın.)

A3 --> S=S+1 (Sayaca 1 ekle ve sayacı göster)

A4 --> S<3 ise git A1 (Eğer sayac 3'ten küçükse adım 1'e git.)

A5 --> EB'yi göster (En büyük sayıyı göster.)

A6 --> Dur

 

Örnek 1.2.1 : 1'den 100'e kadar olan sayıların toplamını veren algoritma.

 

1. Toplam T, sayılar da i diye çağırılsın.

2. Başlangıçta T'nin değeri 0 ve i'nin değeri 1 olsun.

3. i'nin değerini T'ye ekle.

4. i'nin değerini 1 arttır.

5. Eğer i'nin değeri 100'den büyük değil ise 3. adıma git.

6. T'nin değerini yaz.

 

Algoritmaların yazım dili değişik olabilir. Günlük konuşma diline yakın bir dil olabileceği gibi simgelere dayalı da olabilir. Akış şeması eskiden beri kullanıla gelen bir yapıdır. Algoritmayı yazarken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. Yine aynı amaç için kullanılan programlama diline yakın bir (sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanılabilir.

 

Aynı algoritmayı aşağıdaki gibi yazabiliriz.

 

1. T=0 ve i=0

2. i'nin değerini T'ye ekle.

3. i'yi 1 arttır.

4. i<101 ise 2.adıma git.

5. T'nin değerini yaz.

 

Algoritmayı bir de akış şeması ile gerçekleyelim.

 

T=0

I=0

I'nin Değrini T'ye ekle

I'yi bir arttır

 

I<101

 

T'yi yaz

 

Örnek 1.2.2 : ax2+bx+c=0 tipi bir denklemin köklerini veren algoritma.

 

Girdi : a, b ve c katsayıları Çıktı : denklemin kökleri

1. a, b ve c katsayılarını al.

2. D = b2-4ac değerini hesapla.

3. D<0 ise gerçel kök yok. 7. adıma git.

4. -----------

5 . -----------

6. değerlerini yaz.

7. Dur.

Döngü Gösterimi

Tekrarlanan adımlar

n. Koşul sağlandığı sürece

n.1 ...

n.2 ... tekrarlanan adımlar

n.3 ...

 

Örnek 1.2.3 : Iki tamsayının çarpma işlemini sadece toplama işlemi kullanarak gerçekleyin.

 

Girdi : iki tamsayı

Çıktı : sayıların çarpımı

1. a ve b sayılarını oku

2. c =0

3. b>0 olduğu sürece tekrarla

.3.1. c=c + a

3.2. b = b-1

4. c değerini yaz ve dur

 

Örnek 1.2.4 : Bir tamsayının faktoriyelini hesaplayınız.

 

Girdi : Bir tamsayı

Çıktı : sayının faktoriyel

Ilgili formul: Faktoriyel(n)=1*2*...*n

1. n değerini oku

2. F=1

3. n >1 olduğu sürece tekrarla

.3.1. F=F*n

3.2. n= n-1

4. F değerini yaz

 

Örnek 1.2.5 : Iki tamsayının bölme işlemini sadece çıkarma işlemi kullanarak gerçekleyin. Bölüm ve kalanın ne olduğu bulunacak.

 

1. a ve b değerlerini oku

2. m=0

3. a>=b olduğu sürece tekrarla

3.1 a=a-b

3.2 m = m + 1

4. kalan a ve bölüm m 'yi yaz

 

Örnek 1.2.6 : 100 tane sayıyı okuyup, ortalamasını bul

 

1. T=0, i=0

2. i<101 olduğu sürece tekrarla

2.1 m değerini oku

2.2 T = T + m

2.3 i = i + 1

3. T = T / 100

4. Ortalama T 'yi yaz

5. Dur

 

Örnek 1.2.7 : Bir sınava giren öğrencilerin not ortalamasının hesaplanması

 

1. Tüm sınav kağıtlarını inceleyip notların toplamını hesapla

2. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla

3. Ortalamayı yaz.

1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et

2. Sıradaki sınav kağıdının notunu notların toplamına ekle

3. Incelenen sınav kağıdı sayısını Bir arttır

4. Incelenecek sınav kağıdı var ise 2. Adıma git

5. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hasapla

6. Ortalamayı yaz

1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et

2. Her bir sınav kağıdı için

3. 1. Sıradaki sınav kağıdının notunu notların toplamına ekle

4. 2. Incelenen sınav kağıdı sayısını bir arttır

5. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla

6. Ortalamayı yaz

Koşul Gösterimi

n. Koşul doğru ise

n.D.1

n.D.2 doğru olduğunda işlenen adımlar

n.D.3

aksi halde

n.Y.1

n.Y.2 yanlış olduğunda işlenen adımlar

n.Y.3

Kök bulma örneğinde 3. Adımı tekrar yazarsak

3. D>=0 ise

3.D.1

3.D.2

aksi halde

3.Y.1 Reel kök yoktur

 

Sorular:

 

* Girilen üç sayıdan en büyüğünü bulan algoritmayı yazınız.

* Tamsayılarda üs alma işlemini gerçekleştiren algoritmayı yazınız ( ab ).

* 1-100 arasında tutulan bir sayıyı tahmin eden algoritmayı yazınız.

 

Örnek 1.2.8 : Aracın otopark ücretinin hesaplanması. Araçların en fazla 24 saat kaldığını varsayın.

 

0 - 2 saat 150 bin

2 - 8 saat 300 bin

8-24 saat 500 bin

1. Aracın kaç saat kaldığını öğren ( t olsun ).

2. t <= 2 ise

2.D.1. ücret = 150 bin

Aksi halde

2.Y.1. t<=8 ise

2.Y.1.D.1. ücret = 300 bin

Aksi halde

2.Y.1.Y.1. ücret = 500 bin

3. ücreti yaz

4. Dur

 

Örnek 1.2.9: Sınavdaki en büyük notun bulan algoritma.

 

1. En büyük = ilk sınav kağıdındaki not (ya da olabilecek en düşük değer kabul edilebilir).

2. Incelenecek sınav kağıdı var ise

3. 1 Sınav kağıdındaki not > En büyük ise En büyük = Sınav kağıdındaki not

4. En büyük değerini yaz.

5. Dur

Algoritmanın yazımı daha simgesel olabilir. Ni i. Öğrencinin notu olsun.

1. EB = N1

2. i = 2

3. Incelenecek sınav kağıdı var ise

4. 1 Ni>EB => EB = Ni

5. 2 i = i + 1

6. EB' yi yaz.

7. Dur

 

 

Örnek 1.2.10 : Programın C dili ile yazılıp çalışır hale getirilmesi.

 

1. Programı bilgisayara gir

2. Kaynak dosya olarak kaydet

3. Kaynak dosyayı derle ( compile)

4. Derleme sonucunda hata var ise

5. 1 Hataları düzelt

6. 2 3. Adıma git

7. Oluşan amaç dosyasına diğer dosyaları bağla (link)

8. Bağlama sonucunda hata var ise

9. 1. Hataları düzelt

10. 2. Hatalar kaynak dosya ile ilgili ise 2. adıma aksi halde 5. adıma git

11. Program çalıştırılmaya hazır

 

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

 

algoritma  sureci__yararli ornekler

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

ALGORITMA

 

 

PROGRAM YAZMAK SÜRECI

 

1. Problemin farkına varmak,

2. Problemi analiz etmek,

3. Çözüm yolları düşünmek,

4. Iyi çözüm yolları seçip algoritma oluşturmak,

5. Akış diyagramı çizmek,

6. Uygun bir dilde kodlamak,

7. Programı test etmek,

8. Programı dağıtmak.

 

ALGORITMA NEDIR?

 

(Adım adım işlem basamaklarının yazılmasıdır.)

 

Programlamaya Giriş

 

Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar:

i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle.

ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle ( bilgilerin giriş ve çıkış biçimlerinin nasıl olacağına kadar).

iii) Problemin çözümünü veren algoritmayı yaz.

iv) Algoritmayı bir programla dili ile yaz.

v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler (girdiler) için tekrarla.

 

Problem Çözme ve Algoritmalar

 

1.1 Problem Çözme

 

Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayırılmaladır.

Descartes tarafından "Discourse on Method" isimli kitabında anlatılan problem çözme teknikleri;[2]

 

1. Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının.

 

2. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.

 

3. Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.

 

4. Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.

 

1.2 Algoritmalar

 

Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.

I.S. 9.yy da Iranlı Musaoğlu Horzumlu Mehmet

(Alharezmi adını araplar takmıştır) problemlerin çözümü için genel kurallar oluşturdu. Algoritma Alharezmi'nin Latince okunuşu.

Her algoritma aşağıdaki kriterleri sağlamalıdır.

 

1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.

 

2. Çıktı: En azından bir değer üretilmeli.

 

3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.

 

4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.

 

5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.

 

Not: Bir program için 4. özellik geçerli değil. işletim sistemleri gibi program sonsuza dek çalışırlar .

 

Örnek: Iki sayının toplamını yazan algoritmayı yazınız.

 

Çözüm: Adım 1 --> Ilk sayıyı oku, Sembolik olarak A1 S1=?

Adım 2 --> Ikinci sayıyı oku A2 S2=?

Adım 3 --> Sayıları topla A3 T S1+S2

Adım 4 --> Sonucu görüntüle. A4 T'yi göster.

 

1.Soru : Kullanıcının girdiği iki sayının karelerinin toplamını görüntüleyen algoritmayı yazınız.

 

Çözüm

A0 --> Başla

A1 --> Sayaç=0 (Sayaç'ın ilk sayısı 0 olarak başlar.)

A2 --> Sayı=? : TßT+Sayı (Sayıyı giriniz. T'ye sayıyı ekle veT'yi göster.)

A3 --> Sayaç=Sayaç+1 (Sayaç'a bir ekle ve sayacı göster.)

A4 --> Sayaç<4 ise A2'ye git. (Eğer sayaç 4'ten küçükse Adım 2'ye git.)

A5 --> O=T/4 (Ortalama için T değerini 4'e böl)

A6 --> O'yu göster. (Ortalamayı göster.)

A7 --> Dur

 

2.Soru : 20'den 50'ye kadar olan sayıların toplamını bulan algoritma yazınız.

 

BAŞLA

 

Çözüm A0 --> Başla

A1 --> S=20 : T=0 (Sayı 20 T değeri 0 ile başla)

A2 --> TßT+S (T'ye sayıyı ekle T'yi göster.)

A3 --> S=S+1 (Sayıyı bir artır.)

A4 --> S<50 ise A2'ye git. (Eğer sayı 50'den küçük ise Adım 2'ye git)

A5 --> T'yi göster. (T'nin değerini göster.)

A6 --> Dur Akış Şeması à

 

3.Soru : 30 ile 90 arasındaki çift sayıların toplamını bulan algoritma yazınız.

 

Çözüm:

 

A0 --> Başla

A1 --> S=0 : T=0 (Sayı 0, Toplam değeri 0 olsun)

A2 --> S=S+1 (Sayıyı bir artır, sayıyı göster.)

A3 --> T=T+2S+28 (28 sayısına çift sayı olması için sayıyı 2 ile çarp ve toplama ekle, toplamı göster)

A4 --> 2S+28<90 ise git A2 (Eğer Çift sayı 90 değerinden küçük ise Adım 2'ye git)

A5 --> O=T/S (Toplam değeri sayıya böl ve ortalamayı bul)

A6 --> O'yu yaz. (Ortalamayı göster)

A7 --> Dur

 

4.Soru : Klavyeden girilen 10 adet sayıdan çift sayıların toplamının tek sayıların toplamına oranını bulan algoritma yazınız.

 

Çözüm:

 

A0 --> Başla

A1 --> S=0 : T=0 : Ç=0 (Sayı, tek ve çift sayılar 0 değerini alsın)

A2 --> Sayı? (Sayıyı giriniz)

A3 --> (-1)sayı=1 ise Ç=Ç+Sayı (Eğer -1'in sayı üssü 1 sayısına eşitse sayıyı çift sayıya ekle ve çift sayıyı bul.)

A4 --> (-1)sayı=+1 ise T=T+Sayı (Eğer -1'in sayı üssü +1 sayısına eşitse sayıyı tek sayıya ekle ve tek sayıyı bul.)

A5 --> S=S+1 (Sayaça 1 ekle ve sayacı göster)

A6 --> S<10 ise A2'ye git. (Eğer Sayaç 10'dan küçük ise Adım 2'ye git.)

A7 --> V ß Ç/T ift sayıların toplamını tek sayıların toplamına böl.)

A8 --> V'yi göster. (Bölme sonucunu göster.)

A9 --> Dur

 

5.Soru : Klavyeden girilen iki sayıdan en büyüğünü bulup gösteren algoritmayı yazınız.

 

Çözüm :

 

A0 --> Başla

A1 --> S1=? : S2=? (Ilk sayıyı gir ; ;Ikinci sayıyı gir.)

A2 --> S1>S2 ise git A4 (Sayı 1 sayı 2'den küçükse Adım 4'e git.)

A3 --> S2>S1 ise git A5 (Sayı 2 sayı 1'den küçükse Adım 5'e git.)

A4 --> S1'i göster git A6 (sayı 1 değerini göster ve işlemi durdur)

A5 --> S2'yi göster. (Sayı 2 değerini göster)

A6 --> Dur

 

6.Soru : Klavyeden girilen üç sayıdan en büyüğünü bulup gösteren algoritmayı yazınız.

 

Çözüm :

 

A0 --> Başla : EB=-¥ : S=0 (Başla olabilecek EB:en küçük sayı olsun, Sayı 0 olsun)

A1 --> Sayı? (Sayıyı giriniz.)

A2 --> Sayı>EB ise EB=Sayı (Eğer Sayı EB'den küçükse EB sayıyla aynı değeri alsın.)

A3 --> S=S+1 (Sayaca 1 ekle ve sayacı göster)

A4 --> S<3 ise git A1 (Eğer sayac 3'ten küçükse adım 1'e git.)

A5 --> EB'yi göster (En büyük sayıyı göster.)

A6 --> Dur

 

Örnek 1.2.1 : 1'den 100'e kadar olan sayıların toplamını veren algoritma.

 

1. Toplam T, sayılar da i diye çağırılsın.

2. Başlangıçta T'nin değeri 0 ve i'nin değeri 1 olsun.

3. i'nin değerini T'ye ekle.

4. i'nin değerini 1 arttır.

5. Eğer i'nin değeri 100'den büyük değil ise 3. adıma git.

6. T'nin değerini yaz.

 

Algoritmaların yazım dili değişik olabilir. Günlük konuşma diline yakın bir dil olabileceği gibi simgelere dayalı da olabilir. Akış şeması eskiden beri kullanıla gelen bir yapıdır. Algoritmayı yazarken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. Yine aynı amaç için kullanılan programlama diline yakın bir (sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanılabilir.

 

Aynı algoritmayı aşağıdaki gibi yazabiliriz.

 

1. T=0 ve i=0

2. i'nin değerini T'ye ekle.

3. i'yi 1 arttır.

4. i<101 ise 2.adıma git.

5. T'nin değerini yaz.

 

Algoritmayı bir de akış şeması ile gerçekleyelim.

 

T=0

I=0

I'nin Değrini T'ye ekle

I'yi bir arttır

 

I<101

 

T'yi yaz

 

Örnek 1.2.2 : ax2+bx+c=0 tipi bir denklemin köklerini veren algoritma.

 

Girdi : a, b ve c katsayıları Çıktı : denklemin kökleri

1. a, b ve c katsayılarını al.

2. D = b2-4ac değerini hesapla.

3. D<0 ise gerçel kök yok. 7. adıma git.

4. -----------

5 . -----------

6. değerlerini yaz.

7. Dur.

Döngü Gösterimi

Tekrarlanan adımlar

n. Koşul sağlandığı sürece

n.1 ...

n.2 ... tekrarlanan adımlar

n.3 ...

 

Örnek 1.2.3 : Iki tamsayının çarpma işlemini sadece toplama işlemi kullanarak gerçekleyin.

 

Girdi : iki tamsayı

Çıktı : sayıların çarpımı

1. a ve b sayılarını oku

2. c =0

3. b>0 olduğu sürece tekrarla

.3.1. c=c + a

3.2. b = b-1

4. c değerini yaz ve dur

 

Örnek 1.2.4 : Bir tamsayının faktoriyelini hesaplayınız.

 

Girdi : Bir tamsayı

Çıktı : sayının faktoriyel

Ilgili formul: Faktoriyel(n)=1*2*...*n

1. n değerini oku

2. F=1

3. n >1 olduğu sürece tekrarla

.3.1. F=F*n

3.2. n= n-1

4. F değerini yaz

 

Örnek 1.2.5 : Iki tamsayının bölme işlemini sadece çıkarma işlemi kullanarak gerçekleyin. Bölüm ve kalanın ne olduğu bulunacak.

 

1. a ve b değerlerini oku

2. m=0

3. a>=b olduğu sürece tekrarla

3.1 a=a-b

3.2 m = m + 1

4. kalan a ve bölüm m 'yi yaz

 

Örnek 1.2.6 : 100 tane sayıyı okuyup, ortalamasını bul

 

1. T=0, i=0

2. i<101 olduğu sürece tekrarla

2.1 m değerini oku

2.2 T = T + m

2.3 i = i + 1

3. T = T / 100

4. Ortalama T 'yi yaz

5. Dur

 

Örnek 1.2.7 : Bir sınava giren öğrencilerin not ortalamasının hesaplanması

 

1. Tüm sınav kağıtlarını inceleyip notların toplamını hesapla

2. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla

3. Ortalamayı yaz.

1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et

2. Sıradaki sınav kağıdının notunu notların toplamına ekle

3. Incelenen sınav kağıdı sayısını Bir arttır

4. Incelenecek sınav kağıdı var ise 2. Adıma git

5. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hasapla

6. Ortalamayı yaz

1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et

2. Her bir sınav kağıdı için

3. 1. Sıradaki sınav kağıdının notunu notların toplamına ekle

4. 2. Incelenen sınav kağıdı sayısını bir arttır

5. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla

6. Ortalamayı yaz

Koşul Gösterimi

n. Koşul doğru ise

n.D.1

n.D.2 doğru olduğunda işlenen adımlar

n.D.3

aksi halde

n.Y.1

n.Y.2 yanlış olduğunda işlenen adımlar

n.Y.3

Kök bulma örneğinde 3. Adımı tekrar yazarsak

3. D>=0 ise

3.D.1

3.D.2

aksi halde

3.Y.1 Reel kök yoktur

 

Sorular:

 

* Girilen üç sayıdan en büyüğünü bulan algoritmayı yazınız.

* Tamsayılarda üs alma işlemini gerçekleştiren algoritmayı yazınız ( ab ).

* 1-100 arasında tutulan bir sayıyı tahmin eden algoritmayı yazınız.

 

Örnek 1.2.8 : Aracın otopark ücretinin hesaplanması. Araçların en fazla 24 saat kaldığını varsayın.

 

0 - 2 saat 150 bin

2 - 8 saat 300 bin

8-24 saat 500 bin

1. Aracın kaç saat kaldığını öğren ( t olsun ).

2. t <= 2 ise

2.D.1. ücret = 150 bin

Aksi halde

2.Y.1. t<=8 ise

2.Y.1.D.1. ücret = 300 bin

Aksi halde

2.Y.1.Y.1. ücret = 500 bin

3. ücreti yaz

4. Dur

 

Örnek 1.2.9: Sınavdaki en büyük notun bulan algoritma.

 

1. En büyük = ilk sınav kağıdındaki not (ya da olabilecek en düşük değer kabul edilebilir).

2. Incelenecek sınav kağıdı var ise

3. 1 Sınav kağıdındaki not > En büyük ise En büyük = Sınav kağıdındaki not

4. En büyük değerini yaz.

5. Dur

Algoritmanın yazımı daha simgesel olabilir. Ni i. Öğrencinin notu olsun.

1. EB = N1

2. i = 2

3. Incelenecek sınav kağıdı var ise

4. 1 Ni>EB => EB = Ni

5. 2 i = i + 1

6. EB' yi yaz.

7. Dur

 

 

Örnek 1.2.10 : Programın C dili ile yazılıp çalışır hale getirilmesi.

 

1. Programı bilgisayara gir

2. Kaynak dosya olarak kaydet

3. Kaynak dosyayı derle ( compile)

4. Derleme sonucunda hata var ise

5. 1 Hataları düzelt

6. 2 3. Adıma git

7. Oluşan amaç dosyasına diğer dosyaları bağla (link)

8. Bağlama sonucunda hata var ise

9. 1. Hataları düzelt

10. 2. Hatalar kaynak dosya ile ilgili ise 2. adıma aksi halde 5. adıma git

11. Program çalıştırılmaya hazır

 

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

 

register erisimi

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 GENEL BİLGİ

 

 

   Registry bilindiği gibi windowsun sistem bilgilerini tuttuğu  kendine has bir veritabanıdır. bu veritabanında windows bir çok çeşit bilgi tutabilir.bunlar...

 

      * işletim sistemi sistem bilgileri

      * sistemin donanım bilgileri

      * işletim sisteminde tanımlı bütün kullanıcıların bilgileri

      * işletim sistemine kululan yazılım bilgileri gibi daha bir sürü şey.....

 

 

     Delphi'de registry ayarlarına erişimek, okumak ve üzerinde değişiklik yapmak için eklenmesi gereken paket Registry paketidir. bunu projenin  uses kısmına eklemek gerekir.

 

   uses

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

         Dialogs,Registry;

 

  Bu paket eklendikten sonra projede artık register erişim için gereken kodlar kullanılabilir.

 

  * Registry'e bilgilerine erişim için kullanılan  windows editörüne erişmek için başlat/run ekranı açıldıktan sonra açılan ekranda 'regedit' yazıp enter'a basınız

 

  * registry veritabanı aslında birbirinden bağımsız ayrı hiyerarşik veritabanlarından oluşur.bunlardan 2'si HKEY_LOCAL_MACHINE ve HKEY_USERS olanlardır. Diğerleri (HKEY_CLASES_ROOT,HKEY_CURRENT_USER,HKEY_CURRENT_CONFIG) aslında vu iki veritabanının işaretçilerini işaret eder. konuyu daha iyi anlamak için bunları windowstaki sürücüler olarak görebiliriz. bir kayda erişmek için sürücü seçiminden sonra tabiki yol bilgisini belirtmek gerekir.(örn: 'SOFTWAREborlanddelphi7.0' gibi). Path belirtildikten sonra karşımıza anahtarlar çıkar. (örn: az önceki Path'te belirtilen yerde bulunan App anahtarı gibi) anahtarların bir ismi ve birde aldığı değer vardır. App anahtarının aldığı değer 'D:Program FilesBorlandDelphi7Bindelphi32.exe' gibi. bir anahtarın değerini değiştirmek için anahtar üzerinde çift tıklamak gerekerir. çıkan ekranda değişiklik yapılabilinir.

 

DELPHİ'DEN ERİŞİM

 

 

  * öncelikli olarak okuma ve yazma işlemlerin yapılacağı bir Register değişkeni tanıtmak gerekir.bu değişken TRegistry sınıfından olmalı. değişkenimizin adı RegDosya olsun

           RegDosya: TRegistry;

 

  * Bu değişkeni kullanabilmek için proje içinde kullanılacağı yerde yaratmak gerekir.Bu işlem için

           RegDosya  := TRegistry.Create; kodu kullanılmalı

 

  * öncelikli olarak register'da okuma işlemi yapalım. bunun için seçilecek kovan veya sürücü veya veritabanı veya RootKey(her ne derseniz) için RegDosya değişkeninin RootKey özelliğine değer atayacağız.

           RegDosya.RootKey := HKEY_LOCAL_MACHINE;

 

  * RegDosya değişkeninin 'OpenKey'  fonksiyonu register yolunu belirtmek için kullanılır.

           RegDosya.OpenKey('SOFTWAREborlanddelphi/7.0', True)

         anlaşılacağı gibi bu fonksiyonun ilk parametresi yolu belirtir. ikincisi ise belirtilen yolu bulmaması durumunda oluşturup oluşturmayacağına karar vermemizi sağlar. eğer True değeri verir isek bulmadığı takdirde bu yolu oluşturacaktır.

 

  * Belirtilen yolda istediğiniz anahtarın olup olmadığını kontrol etmek için RegDosya değişkeninin ValueExists fonksiyonu kullanılır.

          if RegDosya.ValueExists('App') then

          begin

               ShowMessage(RegDosya.ReadString('App'));

          end;

 

  * Register anahtarlarının bir kaç çeşidi vardır. String anahtarların değerini öğrenmek için Regdosya değişkeninin ReadString fonksiyonu kullanılır. float  anahtarların değerini öğrenmek için ReadFloat veya Boolean bir değer için ReadBool funksiyonu kullanılır.

 

          ShowMessage(RegDosya.ReadString('App'));

 

     kodunu yazdığınız an 'App' anahtarının değerini bize showmessage ile görüntüler. App değişkenin değeri Delphi 7.0 exe'sinin bilgisayarda bulunduğu yeri gösteriyor.

 

  * String Anahtarlara bir değer yazmak için WriteString , integer anahtara bir değer yazmak için Writeinteger fonksiyonları kullanılır.Diğer değişken türleride aynı mantıkla eşleşir.

 

       if RegDosya.OpenKey('SOFTWAREborlanddelphi/7.0', False) then

            begin

                   RegDosya.WriteString('App','D:Delphi32.exe');

            end;

 

      Eğer Belirtilen yolda 'App' diye bir değişken bulunmaz ise komut 'App' diye yeni bir anahtar oluşturur ve değerine 'D:Delphi32.exe' varsa sadece değerini değişirir.

 

    NOT : örnek uygulama yaparken Register'ı bir anahtarı üzerinde değişiklik yapmayın. bu sisteminiz göçmesine neden olabilir. onun yerine kendinizin oluşturduğu anahtar ve yollar üzerinde oynayın.

 

    şimdi registerdan string bir değer okuma için fonksiyon ve registera yazma için procedure yazalım. çünkü yazma işleminde geri bir değer  döndürmesini istemediğimiz için fonksiyona gerek yok

 

    //-----önce kayıt okuma için fonkiyon

 

    function OKUSTRING(str_HKEY: HKEY; str_Yol: String; str_Anahtar: String; strDefault:

                                            String): String;

    var

        RegDosya: TRegistry;

    begin

           RegDosya         := TRegistry.Create;

           RegDosya.RootKey := str_HKEY;

 

           Result           := strDefault;

 

           if RegDosya.OpenKey(str_Yol, True) then

           begin

                   if RegDosya.ValueExists(str_Anahtar) then

                   begin

                          result := RegDosya.ReadString(str_Anahtar);

                   end;

 

                   RegDosya.CloseKey;

           end;

 

     RegDosya.Free;

    end;

 

 

     //-----şimdi ise kayıt yazma için procedure yazalım

 

 

     procedure YAZSTRING(str_HKEY: HKEY; str_Yol: String; str_Anahtar: String;

                                               str_Yazilacak: String);

     var

          RegDosya: TRegistry;

     begin

            RegDosya         := TRegistry.Create;

            RegDosya.RootKey := str_HKEY;

 

            if RegDosya.OpenKey(str_Yol, True) then

            begin

                    RegDosya.WriteString(str_Anahtar, str_Yazilacak);

                    RegDosya.CloseKey;

            end;

 

           RegDosya.Free;

     end;

 

 

 

     //-----Bu fonksiyon ve procedure'ü aşağıdaki gibi kullanabiliriz

 

 

     Str_Deger := OKUSTRING(HKEY_LOCAL_MACINE , 'HARDWAREDESCRIPTIONSYSTEM' , 'SystemBiosDate' , '');

 

     YAZSTRING(HKEY_LOCAL_MACINE ,'SOFTWAREMEHMET ALI', 'TAKIM' ,'FENERBAHÇE');

 

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

 

register erisimi

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 GENEL BİLGİ

 

 

   Registry bilindiği gibi windowsun sistem bilgilerini tuttuğu  kendine has bir veritabanıdır. bu veritabanında windows bir çok çeşit bilgi tutabilir.bunlar...

 

      * işletim sistemi sistem bilgileri

      * sistemin donanım bilgileri

      * işletim sisteminde tanımlı bütün kullanıcıların bilgileri

      * işletim sistemine kululan yazılım bilgileri gibi daha bir sürü şey.....

 

 

     Delphi'de registry ayarlarına erişimek, okumak ve üzerinde değişiklik yapmak için eklenmesi gereken paket Registry paketidir. bunu projenin  uses kısmına eklemek gerekir.

 

   uses

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

         Dialogs,Registry;

 

  Bu paket eklendikten sonra projede artık register erişim için gereken kodlar kullanılabilir.

 

  * Registry'e bilgilerine erişim için kullanılan  windows editörüne erişmek için başlat/run ekranı açıldıktan sonra açılan ekranda 'regedit' yazıp enter'a basınız

 

  * registry veritabanı aslında birbirinden bağımsız ayrı hiyerarşik veritabanlarından oluşur.bunlardan 2'si HKEY_LOCAL_MACHINE ve HKEY_USERS olanlardır. Diğerleri (HKEY_CLASES_ROOT,HKEY_CURRENT_USER,HKEY_CURRENT_CONFIG) aslında vu iki veritabanının işaretçilerini işaret eder. konuyu daha iyi anlamak için bunları windowstaki sürücüler olarak görebiliriz. bir kayda erişmek için sürücü seçiminden sonra tabiki yol bilgisini belirtmek gerekir.(örn: 'SOFTWAREborlanddelphi7.0' gibi). Path belirtildikten sonra karşımıza anahtarlar çıkar. (örn: az önceki Path'te belirtilen yerde bulunan App anahtarı gibi) anahtarların bir ismi ve birde aldığı değer vardır. App anahtarının aldığı değer 'D:Program FilesBorlandDelphi7Bindelphi32.exe' gibi. bir anahtarın değerini değiştirmek için anahtar üzerinde çift tıklamak gerekerir. çıkan ekranda değişiklik yapılabilinir.

 

DELPHİ'DEN ERİŞİM

 

 

  * öncelikli olarak okuma ve yazma işlemlerin yapılacağı bir Register değişkeni tanıtmak gerekir.bu değişken TRegistry sınıfından olmalı. değişkenimizin adı RegDosya olsun

           RegDosya: TRegistry;

 

  * Bu değişkeni kullanabilmek için proje içinde kullanılacağı yerde yaratmak gerekir.Bu işlem için

           RegDosya  := TRegistry.Create; kodu kullanılmalı

 

  * öncelikli olarak register'da okuma işlemi yapalım. bunun için seçilecek kovan veya sürücü veya veritabanı veya RootKey(her ne derseniz) için RegDosya değişkeninin RootKey özelliğine değer atayacağız.

           RegDosya.RootKey := HKEY_LOCAL_MACHINE;

 

  * RegDosya değişkeninin 'OpenKey'  fonksiyonu register yolunu belirtmek için kullanılır.

           RegDosya.OpenKey('SOFTWAREborlanddelphi/7.0', True)

         anlaşılacağı gibi bu fonksiyonun ilk parametresi yolu belirtir. ikincisi ise belirtilen yolu bulmaması durumunda oluşturup oluşturmayacağına karar vermemizi sağlar. eğer True değeri verir isek bulmadığı takdirde bu yolu oluşturacaktır.

 

  * Belirtilen yolda istediğiniz anahtarın olup olmadığını kontrol etmek için RegDosya değişkeninin ValueExists fonksiyonu kullanılır.

          if RegDosya.ValueExists('App') then

          begin

               ShowMessage(RegDosya.ReadString('App'));

          end;

 

  * Register anahtarlarının bir kaç çeşidi vardır. String anahtarların değerini öğrenmek için Regdosya değişkeninin ReadString fonksiyonu kullanılır. float  anahtarların değerini öğrenmek için ReadFloat veya Boolean bir değer için ReadBool funksiyonu kullanılır.

 

          ShowMessage(RegDosya.ReadString('App'));

 

     kodunu yazdığınız an 'App' anahtarının değerini bize showmessage ile görüntüler. App değişkenin değeri Delphi 7.0 exe'sinin bilgisayarda bulunduğu yeri gösteriyor.

 

  * String Anahtarlara bir değer yazmak için WriteString , integer anahtara bir değer yazmak için Writeinteger fonksiyonları kullanılır.Diğer değişken türleride aynı mantıkla eşleşir.

 

       if RegDosya.OpenKey('SOFTWAREborlanddelphi/7.0', False) then

            begin

                   RegDosya.WriteString('App','D:Delphi32.exe');

            end;

 

      Eğer Belirtilen yolda 'App' diye bir değişken bulunmaz ise komut 'App' diye yeni bir anahtar oluşturur ve değerine 'D:Delphi32.exe' varsa sadece değerini değişirir.

 

    NOT : örnek uygulama yaparken Register'ı bir anahtarı üzerinde değişiklik yapmayın. bu sisteminiz göçmesine neden olabilir. onun yerine kendinizin oluşturduğu anahtar ve yollar üzerinde oynayın.

 

    şimdi registerdan string bir değer okuma için fonksiyon ve registera yazma için procedure yazalım. çünkü yazma işleminde geri bir değer  döndürmesini istemediğimiz için fonksiyona gerek yok

 

    //-----önce kayıt okuma için fonkiyon

 

    function OKUSTRING(str_HKEY: HKEY; str_Yol: String; str_Anahtar: String; strDefault:

                                            String): String;

    var

        RegDosya: TRegistry;

    begin

           RegDosya         := TRegistry.Create;

           RegDosya.RootKey := str_HKEY;

 

           Result           := strDefault;

 

           if RegDosya.OpenKey(str_Yol, True) then

           begin

                   if RegDosya.ValueExists(str_Anahtar) then

                   begin

                          result := RegDosya.ReadString(str_Anahtar);

                   end;

 

                   RegDosya.CloseKey;

           end;

 

     RegDosya.Free;

    end;

 

 

     //-----şimdi ise kayıt yazma için procedure yazalım

 

 

     procedure YAZSTRING(str_HKEY: HKEY; str_Yol: String; str_Anahtar: String;

                                               str_Yazilacak: String);

     var

          RegDosya: TRegistry;

     begin

            RegDosya         := TRegistry.Create;

            RegDosya.RootKey := str_HKEY;

 

            if RegDosya.OpenKey(str_Yol, True) then

            begin

                    RegDosya.WriteString(str_Anahtar, str_Yazilacak);

                    RegDosya.CloseKey;

            end;

 

           RegDosya.Free;

     end;

 

 

 

     //-----Bu fonksiyon ve procedure'ü aşağıdaki gibi kullanabiliriz

 

 

     Str_Deger := OKUSTRING(HKEY_LOCAL_MACINE , 'HARDWAREDESCRIPTIONSYSTEM' , 'SystemBiosDate' , '');

 

     YAZSTRING(HKEY_LOCAL_MACINE ,'SOFTWAREMEHMET ALI', 'TAKIM' ,'FENERBAHÇE');

 

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

 

ini dosyasi kullanimi

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 

İNİ DOSYA KULLANIMI

 

 

    Çok kullanıcılı bir program yaptınız. programa giren son kullanıcının kim olduğunu onun

    kişisel ayarlarını ve benzeri bilgileri nerde tutarsınız. bunun için veritabanı kullanmak olmaz. yani olurda ne kadar olur. çoğu program bu tip bilgileri İNİ dosyada tutar. aşağıda örnek bir İNİ dosya içeriği var

 

[connectDatabase]

Access=ReadWrite

Connect="DSN=AdvWorks"

 

[sqlCustomerById]

Sql="SELECT * FROM Customers WHERE CustomerID = ?"

 

[connectAuthorDatabase]

Access=ReadOnly

Connect="DSN=MyLibraryInfo;UID=MyUserID;PWD=MyPassword"

 

[sql AuthorById]

Sql="SELECT * FROM Authors WHERE au_id = ?"

 

[] köşeli parantezin içine yazıların her biri kısım,bölüm(section) olarak adlandırılır.

örnekte [connectdatabese] bağlanılacak database hakkındaki bilgileri tutacaktır.

onun altındaki diğer seçeneklerden(identy) örneğin "access" veitabanına erişim şeklini tutar

"connect" ise bağlanacağı veretabanının DSN'i bulunmakta.

 

   Delphide İNİ Dosya üzerinde işlem yapabilmek için  Uses kısmına iniFiles class'ını eklemek gerekir.ini dosya değişkeni olarak kullanacağımız değişken TIniFile tipinde olacaktır.

       IniDosya: TIniFile;

 

 

tanıttığımız değişkeni Create etmemiz lazım

 

       IniDosya := TIniFile.Create('c:deneme.ini');

 

Create ederken zaten hangi dosyayı açacağımızı belirtmiş oluyoruz(deneme.ini)

İNİ dosyadan string bilgi okumak için inidosya.readstring integer bilgi okumak için inidosya.

readinteger fonksiyonu kullanılır. örnek

 

[GENEL]

Kullanıcı Kodu=BIM  bilgisini okumak için

 

Str_Kullanici_Adi  := IniDosya.ReadString('GENEL','Kullanıcı Kodu',''); dersek

 

       Str_Kullanici_Adi string değişkeninin değeri 'BIM' olacaktır.

       aynı şey integer değişkenler içinde geçerli.

 

       İNİ dosyaya yazma işlemi yapmak için string değişkenler için WriteString

       integer değişkenler için WriteInteger procedürü kullanılır.

 

IniDosya.WriteString('GENEL','Kullanıcı Kodu','Mali'); daha sonra

IniDosya.UpdateFile; ile işlemi tamamlıyoruz.

 

ini dosyalar ile işimiz bittikten sonra IniDosya.Free; ile dosyayı kapatıyoruz.

 

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

 

ini dosyasi kullanimi

//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle

//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi

 

 

İNİ DOSYA KULLANIMI

 

 

    Çok kullanıcılı bir program yaptınız. programa giren son kullanıcının kim olduğunu onun

    kişisel ayarlarını ve benzeri bilgileri nerde tutarsınız. bunun için veritabanı kullanmak olmaz. yani olurda ne kadar olur. çoğu program bu tip bilgileri İNİ dosyada tutar. aşağıda örnek bir İNİ dosya içeriği var

 

[connectDatabase]

Access=ReadWrite

Connect="DSN=AdvWorks"

 

[sqlCustomerById]

Sql="SELECT * FROM Customers WHERE CustomerID = ?"

 

[connectAuthorDatabase]

Access=ReadOnly

Connect="DSN=MyLibraryInfo;UID=MyUserID;PWD=MyPassword"

 

[sql AuthorById]

Sql="SELECT * FROM Authors WHERE au_id = ?"

 

[] köşeli parantezin içine yazıların her biri kısım,bölüm(section) olarak adlandırılır.

örnekte [connectdatabese] bağlanılacak database hakkındaki bilgileri tutacaktır.

onun altındaki diğer seçeneklerden(identy) örneğin "access" veitabanına erişim şeklini tutar

"connect" ise bağlanacağı veretabanının DSN'i bulunmakta.

 

   Delphide İNİ Dosya üzerinde işlem yapabilmek için  Uses kısmına iniFiles class'ını eklemek gerekir.ini dosya değişkeni olarak kullanacağımız değişken TIniFile tipinde olacaktır.

       IniDosya: TIniFile;

 

 

tanıttığımız değişkeni Create etmemiz lazım

 

       IniDosya := TIniFile.Create('c:deneme.ini');

 

Create ederken zaten hangi dosyayı açacağımızı belirtmiş oluyoruz(deneme.ini)

İNİ dosyadan string bilgi okumak için inidosya.readstring integer bilgi okumak için inidosya.

readinteger fonksiyonu kullanılır. örnek

 

[GENEL]

Kullanıcı Kodu=BIM  bilgisini okumak için

 

Str_Kullanici_Adi  := IniDosya.ReadString('GENEL','Kullanıcı Kodu',''); dersek

 

       Str_Kullanici_Adi string değişkeninin değeri 'BIM' olacaktır.

       aynı şey integer değişkenler içinde geçerli.

 

       İNİ dosyaya yazma işlemi yapmak için string değişkenler için WriteString

       integer değişkenler için WriteInteger procedürü kullanılır.

 

IniDosya.WriteString('GENEL','Kullanıcı Kodu','Mali'); daha sonra

IniDosya.UpdateFile; ile işlemi tamamlıyoruz.

 

ini dosyalar ile işimiz bittikten sonra IniDosya.Free; ile dosyayı kapatıyoruz.

 

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

 

windows api

Belgeler menüsüne bir dosya ekleme

 

uses kısmına ShlOBJ unitini ekleyin;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  s : string;

begin

  s := 'C:DownLoaddeneme.html';

  SHAddToRecentDocs(SHARD_PATH, pChar(s));

end;

 

 Belgeler menüsünü temizleme

 

uses kısmına ShlOBJ unitini ekleyin;

 

SHAddToRecentDocs(SHARD_PATH, nil);

 

 

 

 

 

 

 

 

 

 

 

 

 

 Duvar kağıdını değiştirmek

 

var

  s: string;

begin

  s := 'c:windowscars.bmp';

  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(s),0);

 

 Başlat butonunu gizlemek veya kullanılmaz hale getirmek

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Rgn : hRgn;

begin

  // Başlat butonunu gizle

  Rgn := CreateRectRgn(0, 0, 0, 0);

  SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),

                                       0,

                                      'Button',

                                       nil),

                                       Rgn,

                                       true);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  //Gizlenen Başlat butonunu eski haline döndürmek için

  SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),

                                       0,

                                      'Button',

                                       nil),

                                       0,

                                       true);

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

  //Başlat butonunu kullanılmaz yap

  EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),

                                       0,

                                       'Button',

                                       nil),

                                       false);

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

  //Kullanılmaz yapılan Başlat butonunu eski haline getirmek için

  EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),

                                       0,

                                       'Button',

                                       nil),

                                       true);

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 Bir programın çalıştırılması

 

WinExec('c:windowscalc.exe',sw_show);

WinExec('C:WINDOWSNOTEPAD.EXE C:WINDOWSWIN.INI', SW_SHOWNORMAL);

WinExec('COMMAND.COM', SW_SHOWNORMAL);

WinExec('COMMAND.COM /C DIR *.*', SW_SHOWNORMAL);

 

 Harddiskin seri numarasının bulunması

 

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;

 

 

 

 

 

 

 

 

 Windows ve System klasörlerinin bulunması

 

procedure TForm1.Button1Click(Sender: TObject);

var

  a : Array[0..144] of char;

begin

  GetWindowsDirectory(a, sizeof(a));

  ShowMessage(StrPas(a));

  GetSystemDirectory(a, sizeof(a));

  ShowMessage(StrPas(a));

end;

 

 

 

 

 

 

 

 

 

 

 Windows lisans bilgilerinin (isim ve şirket) bulunması

 

uses kısmına Registry unitini ekleyin;

 

procedure TForm1.Button1Click(Sender:TObject);

var

  reg: TRegIniFile;

begin

  reg := TRegIniFile.create('SOFTWAREMICROSOFTMS SETUP (ACME)');

  Memo1.Lines.Add(reg.ReadString('USER INFO', 'DefName', 'Mustafa ŞİMŞEK'));

  Memo1.Lines.Add(reg.ReadString('USER INFO', 'DefCompany', ''));

  reg.free;

end;

 

 

 

 

 Speakerdan Beep sesi çıkartma

 

MessageBeep(word(-1));

 

 

 

 

 

 

 

 

 

 

 

 Bir Denetim Masası uygulamasını çalıştırmak

 

Control Panel uygulamaları WindowsSystem klasörü altında bulunur. *.CPL uzantılı dosyalardır.

Bu uygulamaları Control.Exe programı ile çalıştırabilirsiniz.

Bazı Control Panel uygulamaları WindowsSystem klasöründe bulunmaz.

Bunların ismini vererek çalıştırabilirsiniz.

 

WinExec('C:WINDOWSCONTROL.EXE TIMEDATE.CPL', sw_ShowNormal);

WinExec('C:WINDOWSCONTROL.EXE MOUSE', sw_ShowNormal);

WinExec('C:WINDOWSCONTROL.EXE PRINTERS', sw_ShowNormal);

 

Windows 9x ve NT'de ortak olarak kullanılan bazı denetim masası uygulamaları

 

access.cpl:Erişilebilirlik

 

appwiz.cpl:Program ekle/kaldır

 

desk.cpl:Görüntü

 

intl.cpl:Bölgesel ayarlar

 

joy.cpl:Oyun çubuğu

 

main.cpl:Fare

 

mmsys.cploklu ortam

 

modem.cpl:Modem

 

sysdm.cpl:Sistem

 

timedate.cpl:Tarih/Saat

 

 

 

 

 

 

 

 

 

 Windows'u kapatmak veya yeniden başlatmak(reboot)

 

 

 

 

Win9x'te bilgisayarı kapatmak veya yeninden başlatmak için :

 

ExitWindowsEx(EWX_SHUTDOWN,0);     //yeniden başlatmak için EWX_REBOOT

 

 Ekran koruyucusunu kapatmak ve açmak

 

//kapatmak için

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,

                     0,

                     nil,

                     0);

//açmak için

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,

                     1,

                     nil,

                     0);

 

 

 

 

 

 

 

 

 

 

 

 

Ekran kartım kaç rengi destekliyor

 

Ekran kartınızın kaç rengi desteklediğini aşağıdaki kodla bulabilirsiniz.

 

(1 shl (GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *

          GetDeviceCaps(Form1.Canvas.Handle, PLANES)));

 

 Windows Gezginini istediğiniz bir klasörle açma

 

uses kısmına ShellApi unitini ekleyin.

 

ShellExecute(0,

                  'explore',

                  'C:WINDOWS',   //buraya açmak istediğiniz klasörü yazın.

                  nil,

                  nil,

                  SW_SHOWNORMAL);

 

 

 

 

 

 

 

 

 

 

 

 

Windows'un Bul (Find File) diyalog penceresini istediğiniz bir klasörle açma

 

Windows'ta Başlat->Bul->Dosyalar ve Klasörler ile açtığınız Bul diyalog penceresini Delphi içerisinden

 hem de istediğiniz yolu vererek çalıştırabilirsiniz.

 

uses kısmına ddeman unitini ekleyin.

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  with TDDEClientConv.Create(Self) do begin

    ConnectMode := ddeManual;

    ServiceApplication := 'explorer.exe';

    SetLink( 'Folders', 'AppProperties');

    OpenLink;

    ExecuteMacro('[FindFolder(, C:DOWNLOAD)]', False);  //diyalog açıldığında konum kısmında

    CloseLink;                                                             //olmasını istediğiniz klasör.

    Free;

  end;

end;

 

 

 

 

 

 

 

 

 

Pencerenin kapatma düğmesini etkisiz hale getirme

 

Pencerenin başlık çubuğunda bulunan kapatma düğmesini (X) etkisiz hale getirebilirsiniz.

 Aynı zamanda sistem menüsündeki Kapat(Close) seçeneğide kaybolur.

  Bunun için aşağıdaki gibi bir kod yazmalısınız.

 

procedure TForm1.Button1Click(Sender: TObject);

var

  hwndHandle : THANDLE;

  hMenuHandle : HMENU;

begin

  hwndHandle := FindWindow(nil, 'Form1');  //Form1 pencerenin başlığını göstermektedir.

  if (hwndHandle <> 0) then begin             //Burayı uygulamanıza göre değiştirin

    hMenuHandle := GetSystemMenu(hwndHandle, FALSE);

    if (hMenuHandle <> 0) then

      DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);

  end;

end;

 

 

 

 

 

 

 

 

 

 

 

 

 Uygulamam Windows her açıldığında otomatik çalışsın

 

uses kısmına Registry unitini ekleyin.

 

{$IFNDEF WIN32}

const MAX_PATH = 144;

{$ENDIF}

 

procedure TForm1.Button1Click(Sender: TObject);

var

  reg: TRegistry;

begin

  reg := TRegistry.Create;

  reg.RootKey := HKEY_LOCAL_MACHINE;

  reg.LazyWrite := false;

  reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun',false);

  reg.WriteString('Uygulamam', uygulamanızın_yolu_ve_adı);

  reg.CloseKey;

  reg.free;

end;

 

 

 

 

 

 

 

 

 

 

 

Klasöre Gözat diyalogunu kullanarak bir klasörü seçme

 

uses kısmına ShellAPI ve ShlObj unitlerini ekleyin.

 

procedure TForm1.Button1Click(Sender: TObject);

var

  TitleName : string;

  lpItemID : PItemIDList;

  BrowseInfo : TBrowseInfo;

  DisplayName : array[0..MAX_PATH] of char;

  TempPath : array[0..MAX_PATH] of char;

begin

  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);

  BrowseInfo.hwndOwner := Form1.Handle;

  BrowseInfo.pszDisplayName := @DisplayName;

  TitleName := 'Lütfen bir klasör seçin';

  BrowseInfo.lpszTitle := PChar(TitleName);

  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;

  lpItemID := SHBrowseForFolder(BrowseInfo);

  if lpItemId <> nil then begin

    SHGetPathFromIDList(lpItemID, TempPath);

    ShowMessage(TempPath);

    GlobalFreePtr(lpItemID);

  end;

end;

 

 

 

 

 

 

 

 

 

Bir web adresini açma

 

uses kısmına Shellapi unitini ekleyin;

 

ShellExecute(Handle,

                   'open',

                   'http://www.geocities.com/siliconvalley/campus/4958/',

                    nil,

                    nil,

                    sw_ShowMaximized);

 

 

 

 

 

 

 

 

 

 

 

Bir DOS programını çalıştırma ve çalışması bitince penceresini kapatma

 

WinExec('command.com /c progdos.exe',sw_ShowNormal); //progdos.exe çalıştırılıyor.

 

(* eğer ikinci paremetreyi sw_Hide yaparsanız kullanıcı programın çalıştığını görmez. *)

 

 Alt + Tab ve Ctrl + Esc tuşlarının kullanılmaz hale getirilmesi

 

var

  OldVal : LongInt;

begin

  SystemParametersInfo (97, Word (True), @OldVal, 0)

 

(* Word(False) ile kullanırsanız tuşları tekrar kullanabilirsiniz. *)

 

 

 

 

 

 

 

 

 

 

 

 Bir menü öğesine resim ekleme

 

procedure TForm1.FormCreate(Sender: TObject);

var

  Bmp1 : TPicture;

begin

  Bmp1 := TPicture.Create;

  Bmp1.LoadFromFile('c:denemeturkey.bmp');

  SetMenuItemBitmaps( deneme1.Handle,

                      0,

                      MF_BYPOSITION,

                      Bmp1.Bitmap.Handle,

                      Bmp1.Bitmap.Handle);

end;

 

 

 

 

 

 

 

 

 

 

 

 

Ağ ortamında makinenin ismini bulma

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Makine_ismi:array[0..255] of char;

  BufferSize:DWORD;

begin

  BufferSize:=SizeOf(Makine_ismi);

  GetComputerName(@Makine_ismi,BufferSize);

  Showmessage(Makine_ismi);

end;

 

 

 

 

 

 

 

 

 

 

 

 

Ağ ortamında login olmuş kullanıcı ismini bulma

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Kullanici_ismi:array[0..255] of char;

  BufferSize:DWORD;

begin

  BufferSize:=SizeOf(Kullanici_ismi);

  GetUserName(@Kullanici_ismi,BufferSize);

  Showmessage(Kullanici_ismi);

end;

 

Ekran çözünürlüğünü nasıl öğrenirim

 

Screen.Width   //yatay çözünürlük

Screen.Height  //dikey çözünürlük

 

MessageDlg('Şu anda ' + IntToStr( Screen.Width ) +' x '+

                                 IntToStr( Screen.Height )+' çözünürlükte çalışıyorsunuz',

                 mtInformation, [mbOk], 0 );

 

 

 

 

 

 

 

 

 

 

 

Taskbar'ın (Görev çubuğu) AutoHide özelliği açık mı, kapalı mı?

 

uses kısmına ShellAPI unitini ekleyin.

 

procedure TForm1.Button1Click(Sender: TObject);

var

  ABData : TAppBarData;

begin

  ABData.cbSize := sizeof(ABData);

  if (SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE) > 0 then

     Showmessage('Autohide özelliği açık');

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Programım biraz beklesin

 

Bazı işlemlerden sonra diğer bir işlemi çalıştırmadan önce bir süre beklemek istersiniz.

 Bu gibi durumlarda Sleep komutunu kullanabilirsiniz. Burada verilen değer milisaniye cinsindendir.

  (1 saniye=1000 milisaniye)

 

Sleep(10000)    //10 saniye bekler

 

Caps lock tuşu açık mı, kapalı mı?

 

if (GetKeyState(VK_CAPITAL) and $01)<>0 then

    Showmessage ('caps lock açık');

 

İmleci (cursor) gizleyip, tekrar gösterme

 

ShowCursor(False) //imleci gizler

ShowCursor(True)  //imleci tekrardan gösterir.

 

 

 

 

 

 

 

 

 

 

 

 

Ekran görüntüsünü alın

 

procedure TForm1.Button1Click(Sender: TObject);

var

  DCDesk: HDC;

begin

  DCDesk:=GetWindowDC(GetDesktopWindow);

  BitBlt(Form1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,DCDesk, 0, 0,SRCCOPY);

  ReleaseDC(GetDesktopWindow, DCDesk);

end;

 

Not: Yukarıdaki kod ekran görünütüsünü form üstüne alır. Image bileşeni içine ekran görüntüsünü almak

için form üzerine bir image bileşeni yerleştirin ve  Form1.Canvas.Handle yerine Image1.Canvas.Handle yazın.

 

 

 

 

 

 

 

 

 

Map Network Drive diyalogunu açma

 

WNetConnectionDialog ( 0, RESOURCETYPE_DISK );

 

Bir dosyayı bağlantılı olduğu uygulama ile açma

 

uses kısmına shellapi unitini ekleyin.

 

shellexecute(0,'open', 'c:test2.avi','','',SW_NORMAL);

 

 

 

 

 

 

Temp klasörünü bulma

 

procedure TForm1.Button1Click(Sender: TObject);

var

  temp_klasor: array[0..MAX_PATH] of char;

begin

  GetTempPath(SizeOf(temp_klasor), @temp_klasor);

  ShowMessage(temp_klasor);

end;

 

 

 

 

 

 

 

Ekran koruyucuyu çalıştırmak

 

PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

 

Güç koruma modunda (Power Safe Mode) çalışan monitörü kapatıp açma

 

 

 

 

 

 

 

Monitörü kapatmak için :

 

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);

 

Monitörü açmak için :

 

 

 

 

 

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

 

 

 

 

Windows Tarih/Saat Özellikleri (Date/Time Properties) iletişim kutusunu açma

 

Winexec('Control.exe Date/Time',sw_shownormal);

 

 

 

 

 

Windows'ta yüklü bulunan yazıcıları listeleme

 

uses kısmına printers unitini ekleyin

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Printer:TPrinter;

begin

  Printer:=TPrinter.Create;

  Listbox1.Items.Assign(Printer.Printers)

end;

 

 

 

 

 

 

 

 

 

 

Programımın Windows NT'de çalıştığını nasıl tespit ederim

 

if Win32Platform = VER_PLATFORM_WIN32_NT then

  ShowMessage ('NT''de çalışıyorsunuz!');

 

Windows oturumunu kapatma (log off)

 

ExitWindows (0,0);

 

CPU tipini nasıl tespit ederim

 

uses kısmına Registry unitini ekleyin. Aşağıdaki fonksiyon ile CPU tipini bulabilirsiniz.

 

function CPUType: string;

var

  Reg: TRegistry;

begin

  CPUType := '';

  Reg := TRegistry.Create;

  try

    Reg.RootKey := HKEY_LOCAL_MACHINE;

    if Reg.OpenKey('HardwareDescriptionSystemCentralProcessor', False) then

      CPUType := Reg.ReadString('Identifier');

  finally

    Reg.Free;

  end;

end;

 

 

 

 

 

 

 

 

 

Bir klasördeki tüm dosyaları silme

 

uses kımına ShellApi komutunu ekleyin. Aşağıdaki kod bir klasördeki tüm dosyaları çöp tenekesine atar.

 Daha fazla seçenek için Delphi yardıma başvurun.

 

procedure TumDosyalariSil;

var

  T:TSHFileOpStruct;

begin

  fillchar(T, sizeof(T), 0 );

  with T do begin

    Wnd:=0;

    wFunc:=FO_DELETE;

    pFrom:='E:TempTestDel*.*'#0;

    fFlags:=FOF_ALLOWUNDO or FOF_FILESONLY or

            FOF_SILENT or FOF_NOCONFIRMATION;

  end;

  SHFileOperation(T);

end;

 

 

 

 

 

 

 

 

Windows NT/2000/XP'yi Kapatmak

 

2000 ve XP'de bilgisayarı kapatmak için gerekli yetkiye sahip olmanız lazım. Aşağıda kodla bilgisayarı

kapatabilirsiniz.

 

var

   tkHandle : THandle;

   BufferLun,ret : DWORD;

   tk,tkPrevious : TTokenPrivileges;

   LID : TLargeInteger;

   LUID : TLuIDAndAttributes;

   versione : TOSVersionInfo;

begin

   BufferLun := 1024;

   ret := 0;

   versione.dwOSVersionInfoSize := sizeof(versione);

   GetVersionEx(versione);

   if versione.dwPlatformId = VER_PLATFORM_WIN32_NT then

         begin

         tkHandle := GetCurrentProcess;

         OpenProcessToken(tkHandle,TOKEN_ALL_ACCESS,tkHandle);

         LookupPrivilegeValue(PChar(''),PChar('SeShutDownPrivilege'),LID);

         LUID.Luid := LID;

         LUID.Attributes := SE_PRIVILEGE_ENABLED;

         tk.PrivilegeCount := 1;

         tk.Privileges[0] := LUID;

         AdjustTokenPrivileges(tkHandle,False,tk,BufferLun,tkPrevious,ret);

      end;

      ExitWindowsEx(EWX_SHUTDOWN or EWX_PowerOff,0);

   end;

 

 

 

 

 

 

*.wav (ses) dosyalarını çaldırmak

 

Bu iş için PlaySound isimli api'yi kullanabilirsiniz. Api geniş bir parametre aralığına sahip, detaylar için Delphi ile gelen Win32 yardım dosyasına bakabilirsiniz.

 

PlaySound('C:WINDOWSMEDIAWindows Start.wav', 0, Snd_FileName or Snd_Async);

 

Programımın simgesi Tray'de (saatin yanında) gözüksün

 

Bu işi yapan birçok bileşen var. Bunlardan en iyisi artık bedava olarak dağıtılan TurboPower ShellShock paketi içindeki tray bileşeni. Bu paketi indirip kurun. İndirme detayları için sitedeki 3. Parti bileşenler kısmındaki TurboPower yazısına bakabilirsiniz.

 

Programım Windows 2000/Xp'de düzgün çalışıyor, Win9x'te TComboBox bileşeninde xxx.Items.String EReadError veriyor

 

Bu hata genellikle sistem kaynakları yetersiz olduğu zaman alınmakta. Win 9x'te sistem kaynakları biraz sınırlı.

 

Diğer programlarda bu tip hatalar almıyorsanız, programınızda aldığınız kaynakları ve bunları işi bittiği anda serbest bırakıp bırakmadığınızı kontrol edin.

 

Win9x'te user ve gdi kaynakları hala sınırlı. TWinControl sınıfından türeyen componentlerin hepsi handle'a sahiptir. Win9x'te handle sayısı 16K ile sınırlı. Ayrıca glyph, image, imagelist ve font gibi componentler de gdi kaynaklarını kullanırlar. Bu da sınırlı Win9x'te. Aşağıdaki noktalara dikkat edin.

 

1. Kesin çözüm 2000 veya XP'ye terfi. Eğer işyeri ise güvenlik gibi başka nedenlerle bu en iyi çözüm olacaktır. Biliyorsunuz Win9x'in hedef kitlesi ev kullanıcıları.

 

2. Formları otomatik create etmeyin. Gerektiği zaman oluşturup işi bitince yok edin.

 

3. TWinControl'den türeyen bileşenler yerine grafik componentler kullanın. Mesela Panel yerine Bevel kullanın. Grafik componentlerin handle'ları olmadığı için Windows kaynaklarını kullanmazlar.

 

4. Kendi oluşturduğuz nesneleri yok edin. Mesela bir stringlist oluşturup, daha sonra yok etmezseniz program kapatılsa bile hafızada kalmaya devam eder. Aynı kodu programda bir çok kez çağırıyorsanız gerisini siz düşünün.

 

5. Windows'ta resource monitör isimli bir program var. Yüklü değilse Program ekle/Kaldır windows kısmından kurabilirsiniz. Burdan user ve gdi resource kısmını takip ederek nerelerde kaynakların kritik noktalara indiğini takip edip önlem alabilirsiniz.

 

6. Herşey yolunda olsa bile eğer bir formda çok fazla bileşen veya resim vs. varsa buda etkileyebilir. Geçenlerde birisi 1600 tane buton olan bir formdan bahsediyordu.

 

 

 

 

 

 

 

Başka bir uygulamayı kapatmak

 

Programatik olarak başka bir uygulamayı kapatmak için, uygulamay WM_QUIT mesajı göndermeniz lazım.

 

function KillApp(const sCapt: PChar) : boolean;

 var AppHandle:THandle;

begin

 AppHandle:=FindWindow(Nil, sCapt);

 Result:=PostMessage(AppHandle, WM_QUIT, 0, 0);

end;

 

 

Kullanılışı :

 

if not KillApp('Pencere başlığı') then

 ShowMessage('Uygulama kapatılamadı!');

 

CD'nin takılıp çıkarıldığından haberdar olma

 

Bunun için WM_DEVICECHANGE mesajlarını yakalamamız lazım.

 

private kısmına aşağıdaki satırı ekleyin :

 

procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;

 

bu da yakalama kısmı :

 

procedure TForm1.WMDeviceChange (var Msg: TMessage);

const

  CD_IN = $8000;

  CD_OUT = $8004;

var

  Mesaj : String;

begin

  inherited;

  case Msg.wParam of

    CD_IN : Mesaj := 'CD takıldı';

    CD_OUT : Mesaj := 'CD çıkarıldı';

  end;

  ShowMessage(Mesaj);

end;

 

 

 

 

 

 

Sürücü (drive) tipini belirlemek

 

Formun üzerine bir memo ve bir buton koyun ve aşağıdaki kodu yazın.

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Drive: Char;

  DriveLetter: String[4];

begin

  for Drive := 'A' to 'Z' do

    begin

      DriveLetter := Drive + ':';

      case GetDriveType(PChar(Drive + ':')) of

        DRIVE_REMOVABLE: Memo1.Lines.Add(DriveLetter + ' Disket Sürücü(Floppy Drive)');

        DRIVE_FIXED: Memo1.Lines.Add(DriveLetter + ' Sabit disk(Fixed Drive)');

        DRIVE_REMOTE: Memo1.Lines.Add(DriveLetter + ' Ağ sürücüsü(Network Drive)');

        DRIVE_CDROM: Memo1.Lines.Add(DriveLetter + ' CD-Rom(CD-ROM Drive)');

        DRIVE_RAMDISK: Memo1.Lines.Add(DriveLetter + ' RAM Disk');

      end;

    end;

end;

 

 

 

 

 

 

 

Bir fontu (.ttf) Windows'a kurmadan uygulamanızda kullanma

 

Formun OnCreate ve OnClose olaylarına aşağıdaki kodları yazın.

 

procedure TForm1.FormCreate(Sender: TObject);

begin

 AddFontResource('c:FONTSMyFont.TTF');

 SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

end;

 

procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction);

begin

 RemoveFontResource('C:FONTSMyFont.TTF');

 SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

end;

 

 

 

 

 

 

 

 

 

Bir Klasördeki Dosyaları Başka Bir Klasöre Kopyalama

 

uses kısmına ShellApi unitini ekleyin.

 

procedure TForm1.Button1Click(Sender: TObject);

var

  OpStruc: TSHFileOpStruct;

  frombuf, tobuf: Array [0..128] of Char;

Begin

  {The fillchars make sure the parameters are terminated by at least

   two #0 characters, this is required since each parameter can hold

   a list of zero-terminated strings, the extra #0 terminates the

   list. }

  fillChar( OpStruc, Sizeof(OpStruc), 0 );

  FillChar( frombuf, Sizeof(frombuf), 0 );

  FillChar( tobuf, Sizeof(tobuf), 0 );

  StrPCopy( frombuf, 'c:deneme*.*' );

  StrPCopy( tobuf, 'd:deneme' );

  With OpStruc DO Begin

    Wnd:= Handle;

    wFunc:= FO_COPY;

    pFrom:= @frombuf;

    pTo:=@tobuf;

    fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;

  end;

  ShFileOperation( OpStruc );

end;

 

 

 

 

 

 

 

 

 

 

Windows'un Özel Klasörlerini Açma

 

Aşağıdaki kodla Bilgisayarım, Masaüstü, Yazıcılar, Fontlar gibi özel Windows klasörlerini açabilirsiniz.

 

uses shellapi, ShlObj, ActiveX;

 

procedure TForm1.Button1Click(Sender: TObject);

var

exInfo: TShellExecuteInfo;

Procedure FreePidl( pidl: PItemIDList );

Var

allocator: IMalloc;

Begin

If Succeeded(SHGetMalloc(allocator)) Then Begin

allocator.Free(pidl);

{$IFDEF VER90}

allocator.Release;

{$ENDIF}

End;

End;

 

Begin

FillChar( exInfo, Sizeof(exInfo), 0 );

// initialize all fields to 0

With exInfo Do Begin

cbSize:= Sizeof( exInfo ); // required!

fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_IDLIST;

Wnd := Handle;

nShow := SW_SHOWNORMAL;

lpVerb := 'open';

ShGetSpecialFolderLocation( handle, CSIDL_DESKTOP , PItemIDLIst(lpIDList ));

End;

ShellExecuteEx( @exInfo );

FreePIDL( exinfo.lpIDList );

end;

 

Diğer özel klasörler : CSIDL_DESKTOP, CSIDL_PROGRAMS, CSIDL_CONTROLS, CSIDL_PRINTERS, CSIDL_PERSONAL,

 CSIDL_STARTUP, CSIDL_RECENT, CSIDL_SENDTO, CSIDL_BITBUCKET, CSIDL_STARTMENU, CSIDL_DESKTOPDIRECTORY,

  CSIDL_DRIVES (My Computer), CSIDL_NETWORK, CSIDL_NETHOOD, CSIDL_FONTS, CSIDL_TEMPLATES.

 

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

 

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