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

 

Exe İçine Dosya Gömme (ANLATIM)

Ben bunu çok aradım kısa bir zaman önce forumlarda felan iyi anlatılamamıştı.

İnşallah ben anlattıktan sonra kaparsınız..Aslında ingilizce anlatan bir site var

ama herkesin ingilizcesi iyi değil..Yani öğrenin ingilizce..En acemi adamın bile

anlayacağı biçimde anlattım.Bilenlere zaten lafımız yok.Yakında manyak programlarla

giriyom ortama

 

Başlıyoruz öncelikle açıklayacaklarım .wav , .avi ve .mp3 dosyaları nasıl gömülür.

               Wave(.wav) Dosyası Nasıl Gömülür Çalıştırılır...

Bir .wav dosyası alalım.Adı muslum.wav olsunuan Müslüm babayı dinliyom).Bu dosyayı

C:'ye atalım.Gene C:'de bir text dosyası oluşturalım.Ve içine şunları girelim.

muslum WAVE "c:muslum.wav"        Bunları yazdıktan sonra dosyayı muslum.rc

olarak kaydedelimimdi C:'de muslum.wav(Müzik dosyamız) ve muslum.rc dosyamız var.

Sonra Başlat - programlar - Donatılar - Ms-dos komut istemini açalım.

C:/Windows yazacaktır orda.Onun yanına (cd..) parantez içindekini yazın enter'a basın

Yani şöle bişey olcak c:/windows>cd..   tamamimdi c: yazcak sadeceimdi oraya

(brcc32 muslum.rc) parantez içindekini yazcaz.Oda şöle bişey olcak

c:/>brcc32 muslum.rc     enter a bastığımız zaman c:'de muslum.res dosyası oluşmuş olacak

Bu 3 dosyayı alıp ekleyeceğimiz programın olduğu klasore atın.Ve kodunuzda şöle biyer var

{$R *.DFM}       Bunun yanına  {$R muslum.RES}     bunu ekleyin..implemention un altında

Şöle olcak  {$R *.DFM} {$R muslum.RES}   oke mi? Şimdi gelelim nasıl çalıştıracağımıza

Formda bir button olsun buna basınca çalsın şarkımız..

uses kısmına mmsystem eklemeyi unutmayın!!!!!!!!

 

procedure TForm1.Button1Click(Sender: TObject);

var

  hFind, hRes: THandle;

  Song: PChar;

begin

 hFind:=FindResource(HInstance, 'msulum', 'WAVE');

 if hFind<>0 then begin

   hRes:=LoadResource(HInstance, hFind);

   if hRes<>0 then begin

     Song:=LockResource(hRes);

     if Assigned(Song) then

       SndPlaySound(Song, snd_ASync or snd_Memory);

     UnlockResource(hRes);

   end;

   FreeResource(hFind);

 end;

end;

 

hepsi bu kadar......

             Avi(.avi) Nasıl Gömülür Çalıştırılır....

Yukarda nasıl .rc dosyası yaratacağınızı anlattım Bundada  .rc dosyasının içine

FİLM AVI film.avi       yazın..(Benim avi'min ismi film di siz değiştirebilirsiniz.)

Gene film.res dosyamız oluştuktan sonra programı yaptığınız klasore atın.

açın delphiyle gene kodunuzu  {$R film.RES} bunu eklemeyi unutmayın..

nasıl çalıştıracanız

 

procedure TForm1.FormCreate(Sender: TObject);

begin

 with Animate1 do begin

  ResName := 'film';

  ResHandle := hInstance;

 

  Active := TRUE;

 end;

end;

 

hepsi bu kadar.......

             Mp3(.mp3) Nasıl Gömülür Çalıştırılır.....

Gene .rc yi oluşturun içine şunları yazın   senbaskasin RCDATA senbaskasin.mp3

Ms-dosta yukardaki gibi senbaskasin.res dosyasını oluşturun.klasore atın.

gene kodunuza  {$R senbaskasin.RES} eklemeyi unnutmayın.

 

Nasıl çalıştırırız...

 

 

procedure TForm1.Button1Click(Sender: TObject);

var

 rStream: TResourceStream;

 fStream: TFileStream;

 fname: string;

begin

 

 fname:=ExtractFileDir(Paramstr(0))+'senbaskasin.mp3';

 rStream := TResourceStream.Create

           (hInstance, 'senbaskasin', RT_RCDATA);

 try

  fStream := TFileStream.Create(fname, fmCreate);

  try

   fStream.CopyFrom(rStream, 0);

  finally

   fStream.Free;

  end;

 finally

  rStream.Free;

 end;

 

 MediaPlayer1.Close;

 MediaPlayer1.FileName:=fname;

 MediaPlayer1.Open;

end;

 

--------------------------------------------------------------------------------

 

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

 

Exe İçine Dosya Gömme (ANLATIM)

VictiMHunteR.... victim_hunter@yahoo.com

Ben bunu çok aradım kısa bir zaman önce forumlarda felan iyi anlatılamamıştı.

İnşallah ben anlattıktan sonra kaparsınız..Aslında ingilizce anlatan bir site var

ama herkesin ingilizcesi iyi değil..Yani öğrenin ingilizce..En acemi adamın bile

anlayacağı biçimde anlattım.Bilenlere zaten lafımız yok.Yakında manyak programlarla

giriyom ortama

 

Başlıyoruz öncelikle açıklayacaklarım .wav , .avi ve .mp3 dosyaları nasıl gömülür.

               Wave(.wav) Dosyası Nasıl Gömülür Çalıştırılır...

Bir .wav dosyası alalım.Adı muslum.wav olsunuan Müslüm babayı dinliyom).Bu dosyayı

C:'ye atalım.Gene C:'de bir text dosyası oluşturalım.Ve içine şunları girelim.

muslum WAVE "c:muslum.wav"        Bunları yazdıktan sonra dosyayı muslum.rc

olarak kaydedelimimdi C:'de muslum.wav(Müzik dosyamız) ve muslum.rc dosyamız var.

Sonra Başlat - programlar - Donatılar - Ms-dos komut istemini açalım.

C:/Windows yazacaktır orda.Onun yanına (cd..) parantez içindekini yazın enter'a basın

Yani şöle bişey olcak c:/windows>cd..   tamamimdi c: yazcak sadeceimdi oraya

(brcc32 muslum.rc) parantez içindekini yazcaz.Oda şöle bişey olcak

c:/>brcc32 muslum.rc     enter a bastığımız zaman c:'de muslum.res dosyası oluşmuş olacak

Bu 3 dosyayı alıp ekleyeceğimiz programın olduğu klasore atın.Ve kodunuzda şöle biyer var

{$R *.DFM}       Bunun yanına  {$R muslum.RES}     bunu ekleyin..implemention un altında

Şöle olcak  {$R *.DFM} {$R muslum.RES}   oke mi? Şimdi gelelim nasıl çalıştıracağımıza

Formda bir button olsun buna basınca çalsın şarkımız..

uses kısmına mmsystem eklemeyi unutmayın!!!!!!!!

 

procedure TForm1.Button1Click(Sender: TObject);

var

  hFind, hRes: THandle;

  Song: PChar;

begin

 hFind:=FindResource(HInstance, 'msulum', 'WAVE');

 if hFind<>0 then begin

   hRes:=LoadResource(HInstance, hFind);

   if hRes<>0 then begin

     Song:=LockResource(hRes);

     if Assigned(Song) then

       SndPlaySound(Song, snd_ASync or snd_Memory);

     UnlockResource(hRes);

   end;

   FreeResource(hFind);

 end;

end;

 

hepsi bu kadar......

             Avi(.avi) Nasıl Gömülür Çalıştırılır....

Yukarda nasıl .rc dosyası yaratacağınızı anlattım Bundada  .rc dosyasının içine

FİLM AVI film.avi       yazın..(Benim avi'min ismi film di siz değiştirebilirsiniz.)

Gene film.res dosyamız oluştuktan sonra programı yaptığınız klasore atın.

açın delphiyle gene kodunuzu  {$R film.RES} bunu eklemeyi unutmayın..

nasıl çalıştıracanız

 

procedure TForm1.FormCreate(Sender: TObject);

begin

 with Animate1 do begin

  ResName := 'film';

  ResHandle := hInstance;

 

  Active := TRUE;

 end;

end;

 

hepsi bu kadar.......

             Mp3(.mp3) Nasıl Gömülür Çalıştırılır.....

Gene .rc yi oluşturun içine şunları yazın   senbaskasin RCDATA senbaskasin.mp3

Ms-dosta yukardaki gibi senbaskasin.res dosyasını oluşturun.klasore atın.

gene kodunuza  {$R senbaskasin.RES} eklemeyi unnutmayın.

 

Nasıl çalıştırırız...

 

 

procedure TForm1.Button1Click(Sender: TObject);

var

 rStream: TResourceStream;

 fStream: TFileStream;

 fname: string;

begin

 

 fname:=ExtractFileDir(Paramstr(0))+'senbaskasin.mp3';

 rStream := TResourceStream.Create

           (hInstance, 'senbaskasin', RT_RCDATA);

 try

  fStream := TFileStream.Create(fname, fmCreate);

  try

   fStream.CopyFrom(rStream, 0);

  finally

   fStream.Free;

  end;

 finally

  rStream.Free;

 end;

 

 MediaPlayer1.Close;

 MediaPlayer1.FileName:=fname;

 MediaPlayer1.Open;

end;

 

--------------------------------------------------------------------------------

 

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

 

Exe İçine Dosya Gömme (ANLATIM)

VictiMHunteR.... victim_hunter@yahoo.com

Ben bunu çok aradım kısa bir zaman önce forumlarda felan iyi anlatılamamıştı.

İnşallah ben anlattıktan sonra kaparsınız..Aslında ingilizce anlatan bir site var

ama herkesin ingilizcesi iyi değil..Yani öğrenin ingilizce..En acemi adamın bile

anlayacağı biçimde anlattım.Bilenlere zaten lafımız yok.Yakında manyak programlarla

giriyom ortama

 

Başlıyoruz öncelikle açıklayacaklarım .wav , .avi ve .mp3 dosyaları nasıl gömülür.

               Wave(.wav) Dosyası Nasıl Gömülür Çalıştırılır...

Bir .wav dosyası alalım.Adı muslum.wav olsunuan Müslüm babayı dinliyom).Bu dosyayı

C:'ye atalım.Gene C:'de bir text dosyası oluşturalım.Ve içine şunları girelim.

muslum WAVE "c:muslum.wav"        Bunları yazdıktan sonra dosyayı muslum.rc

olarak kaydedelimimdi C:'de muslum.wav(Müzik dosyamız) ve muslum.rc dosyamız var.

Sonra Başlat - programlar - Donatılar - Ms-dos komut istemini açalım.

C:/Windows yazacaktır orda.Onun yanına (cd..) parantez içindekini yazın enter'a basın

Yani şöle bişey olcak c:/windows>cd..   tamamimdi c: yazcak sadeceimdi oraya

(brcc32 muslum.rc) parantez içindekini yazcaz.Oda şöle bişey olcak

c:/>brcc32 muslum.rc     enter a bastığımız zaman c:'de muslum.res dosyası oluşmuş olacak

Bu 3 dosyayı alıp ekleyeceğimiz programın olduğu klasore atın.Ve kodunuzda şöle biyer var

{$R *.DFM}       Bunun yanına  {$R muslum.RES}     bunu ekleyin..implemention un altında

Şöle olcak  {$R *.DFM} {$R muslum.RES}   oke mi? Şimdi gelelim nasıl çalıştıracağımıza

Formda bir button olsun buna basınca çalsın şarkımız..

uses kısmına mmsystem eklemeyi unutmayın!!!!!!!!

 

procedure TForm1.Button1Click(Sender: TObject);

var

  hFind, hRes: THandle;

  Song: PChar;

begin

 hFind:=FindResource(HInstance, 'msulum', 'WAVE');

 if hFind<>0 then begin

   hRes:=LoadResource(HInstance, hFind);

   if hRes<>0 then begin

     Song:=LockResource(hRes);

     if Assigned(Song) then

       SndPlaySound(Song, snd_ASync or snd_Memory);

     UnlockResource(hRes);

   end;

   FreeResource(hFind);

 end;

end;

 

hepsi bu kadar......

             Avi(.avi) Nasıl Gömülür Çalıştırılır....

Yukarda nasıl .rc dosyası yaratacağınızı anlattım Bundada  .rc dosyasının içine

FİLM AVI film.avi       yazın..(Benim avi'min ismi film di siz değiştirebilirsiniz.)

Gene film.res dosyamız oluştuktan sonra programı yaptığınız klasore atın.

açın delphiyle gene kodunuzu  {$R film.RES} bunu eklemeyi unutmayın..

nasıl çalıştıracanız

 

procedure TForm1.FormCreate(Sender: TObject);

begin

 with Animate1 do begin

  ResName := 'film';

  ResHandle := hInstance;

 

  Active := TRUE;

 end;

end;

 

hepsi bu kadar.......

             Mp3(.mp3) Nasıl Gömülür Çalıştırılır.....

Gene .rc yi oluşturun içine şunları yazın   senbaskasin RCDATA senbaskasin.mp3

Ms-dosta yukardaki gibi senbaskasin.res dosyasını oluşturun.klasore atın.

gene kodunuza  {$R senbaskasin.RES} eklemeyi unnutmayın.

 

Nasıl çalıştırırız...

 

 

procedure TForm1.Button1Click(Sender: TObject);

var

 rStream: TResourceStream;

 fStream: TFileStream;

 fname: string;

begin

 

 fname:=ExtractFileDir(Paramstr(0))+'senbaskasin.mp3';

 rStream := TResourceStream.Create

           (hInstance, 'senbaskasin', RT_RCDATA);

 try

  fStream := TFileStream.Create(fname, fmCreate);

  try

   fStream.CopyFrom(rStream, 0);

  finally

   fStream.Free;

  end;

 finally

  rStream.Free;

 end;

 

 MediaPlayer1.Close;

 MediaPlayer1.FileName:=fname;

 MediaPlayer1.Open;

end;

 

 

 

neoturk: "bulmaca puzzle çözümü"

 

programın ana VAR bloğunu aşağıdaki şekilde uyarlayınız

 

...

const

        numbers='123456789'; //kullanılacağımız ve yerleştireceğimiz rakamlar

        spacenul='.'; //boş hücreleri nokta ile göstereceğiz

 

var

  Form1: TForm1;

  s:array[1..9,1..3,1..3] of string;//3x3 lük 9 tane ufak matris

  mm:array[1..9] of string; //9x9 luk matrisin tek boyutta gösterimi şeklinde

  tempx:Tstringlist; //bunu boşuna tanıttım, kullanmaya ihtiyacım olmadı...

  xexit:boolean; //recursive fonksiyondan çıkış için. çözüm bulunduğunda.

 

implementation

 

{$R *.dfm}

 

//******** ana matrisin dikey satırını verir ****************

function getdownline(sut:byte):string;

var x,x2:string;m:integer;

begin

x:='';

for m:=1 to 9 do

        begin

        x2:=mm[m];

        x:=x+x2[sut];

        end;

result:=x;

//final

end;

 

//******** kume matrisin tüm stringini verir ****************

function getkumestring(kumeno:byte):string;

var x:string;m,n:integer;

begin

x:='';

for m:=1 to 3 do

for n:=1 to 3 do

        begin

        x:=x+s[kumeno,m,n];

        end;

result:=x;

//final

end;

 

 

//********** ana matristeki sat,sut değerinin hangi alt kümede olduğunu söyler ****************

function getkume(sat,sut:byte):byte;

var xresult:byte;

begin

xresult:=0;

case sat of

1..3:

        begin

        case sut of

        1..3:xresult:=1;

        4..6:xresult:=2;

        7..9:xresult:=3;

        end;//case

        end;

4..6:

        begin

        case sut of

        1..3:xresult:=4;

        4..6:xresult:=5;

        7..9:xresult:=6;

        end;//case

        end;

7..9:

        begin

        case sut of

        1..3:xresult:=7;

        4..6:xresult:=8;

        7..9:xresult:=9;

        end;//case

        end;

end;//case

result:=xresult;

//final

end;

 

//********* ana matrisi ekranda gösterir ****************

procedure showmainmatris;

var m,n:integer;x:string;

begin

for m:=1 to 9 do

for n:=1 to 9 do

        begin

        x:=mm[m];

        form1.StringGrid1.Cells[n-1,m-1]:=x[n];

        //application.ProcessMessages;

        end;

form1.StringGrid1.Refresh;

//final

end;

 

//*********** ana matrisi alt kümelerden üretir ********************

procedure createmainmatris;

begin

mm[1]:=s[1,1,1]+s[1,1,2]+s[1,1,3]+s[2,1,1]+s[2,1,2]+s[2,1,3]+s[3,1,1]+s[3,1,2]+s[3,1,3];

mm[2]:=s[1,2,1]+s[1,2,2]+s[1,2,3]+s[2,2,1]+s[2,2,2]+s[2,2,3]+s[3,2,1]+s[3,2,2]+s[3,2,3];

mm[3]:=s[1,3,1]+s[1,3,2]+s[1,3,3]+s[2,3,1]+s[2,3,2]+s[2,3,3]+s[3,3,1]+s[3,3,2]+s[3,3,3];

mm[4]:=s[4,1,1]+s[4,1,2]+s[4,1,3]+s[5,1,1]+s[5,1,2]+s[5,1,3]+s[6,1,1]+s[6,1,2]+s[6,1,3];

mm[5]:=s[4,2,1]+s[4,2,2]+s[4,2,3]+s[5,2,1]+s[5,2,2]+s[5,2,3]+s[6,2,1]+s[6,2,2]+s[6,2,3];

mm[6]:=s[4,3,1]+s[4,3,2]+s[4,3,3]+s[5,3,1]+s[5,3,2]+s[5,3,3]+s[6,3,1]+s[6,3,2]+s[6,3,3];

mm[7]:=s[7,1,1]+s[7,1,2]+s[7,1,3]+s[8,1,1]+s[8,1,2]+s[8,1,3]+s[9,1,1]+s[9,1,2]+s[9,1,3];

mm[8]:=s[7,2,1]+s[7,2,2]+s[7,2,3]+s[8,2,1]+s[8,2,2]+s[8,2,3]+s[9,2,1]+s[9,2,2]+s[9,2,3];

mm[9]:=s[7,3,1]+s[7,3,2]+s[7,3,3]+s[8,3,1]+s[8,3,2]+s[8,3,3]+s[9,3,1]+s[9,3,2]+s[9,3,3];

//final

end;

 

//*********** çözümün tamamlanıp tamamlanmadığını bul **********

function ifresolvedok:boolean;

var isok:boolean;x:string;m:integer;

begin

isok:=true;

x:='';

for m:=1 to 9 do x:=x+mm[m];

if pos(spacenul,x)>0 then isok:=false;

result:=isok;

//final

end;

 

//*********** satır,sutun yerine olası rakamları bul ****************

procedure olasirakamlar;

var

        tx:tstringlist;

        m,n:integer;

        xsat,xsut:byte;

        kumeno:byte;

        x,xyatay,xdikey,xkume:string;

        kural1,kural2,kural3:boolean;

 

        procedure bossatirsutunubul;

        label bcik;

        var bm,bn:integer;bx:string;

        begin

        for bm:=1 to 9 do

        for bn:=1 to 9 do

                begin

                bx:=mm[bm];

                if bx[bn]=spacenul then

                        begin

                        xsat:=bm;xsut:=bn;

                        goto bcik;

                        end;

                end;

        bcik:

        //final

        end;

 

begin

if xexit then exit;

tx:=tstringlist.Create;

if ifresolvedok=false then

        begin

        xexit:=false;

        bossatirsutunubul;//boş satir sutunu bul

 

        kumeno:=getkume(xsat,xsut);

        xkume:=getkumestring(kumeno);

        xyatay:=mm[xsat];

        xdikey:=getdownline(xsut);

 

        for m:=1 to 9 do

                begin

                //kural-1

                //yerleştireceğin sayı kume içersinde bulunamaz

                if pos(numbers[m],xkume)>0 then kural1:=false else kural1:=true;

                //kural-2

                //yerleştireceğin sayı yatay sırada olamaz

                if pos(numbers[m],xyatay)>0 then kural2:=false else kural2:=true;

                //kural-3

                //yerleştireceğin sayı dikey içersinde bulunamaz

                if pos(numbers[m],xdikey)>0 then kural3:=false else kural3:=true;

                if ((kural1) and (kural2) and (kural3)) then

                        begin

                        tx.Add(numbers[m]);//ilgili numarayı ekle

                        end;

                end;

 

        for m:=0 to tx.Count-1 do

                begin

                case xsat of

                1,4,7:xsat:=1;

                2,5,8:xsat:=2;

                3,6,9:xsat:=3;

                end;

                case xsut of

                1,4,7:xsut:=1;

                2,5,8:xsut:=2;

                3,6,9:xsut:=3;

                end;

                s[kumeno,xsat,xsut]:=tx.Strings[m];

                createmainmatris;showmainmatris;

                olasirakamlar;//recursive

                if ifresolvedok then exit;

                s[kumeno,xsat,xsut]:=spacenul;

                end;

 

        end

        else

        begin

        showmessage('çözüm bulunmuştur !');

        xexit:=true;

        end;

tx.Free;

//final

end;

 

 

formun on create olayına aşağıdaki kodu yazınız:

 

//form on create

procedure TForm1.FormCreate(Sender: TObject);

var m,k,n:integer;

begin

xexit:=false;

tempx:=tstringlist.Create;

 

for m:=1 to 9 do

for n:=1 to 3 do

for k:=1 to 3 do s[m,n,k]:=spacenul;

 

//soruda verilmiş olan rakamları burada tanımladım

//olayı güzelleştirmek isteseydim stringgrid üzerinde click yordamına

//atanmak istenilen sayıyı inputquery ile yapardım.

//direkt çözüme gidiyorum.....

//küme 1

s[1,1,2]:='6';

s[1,2,3]:='8';

s[1,3,1]:='2';

//küme 2

s[2,1,1]:='1';

s[2,1,3]:='4';

s[2,2,1]:='3';

s[2,2,3]:='5';

//küme 3

s[3,1,2]:='5';

s[3,2,1]:='6';

s[3,3,3]:='1';

//küme 4

s[4,1,1]:='8';

s[4,2,3]:='6';

s[4,3,1]:='7';

//küme 5

s[5,1,1]:='4';

s[5,1,3]:='7';

s[5,3,1]:='9';

s[5,3,3]:='1';

//küme 6

s[6,1,3]:='6';

s[6,2,1]:='3';

s[6,3,3]:='4';

//küme 7

s[7,1,1]:='5';

s[7,2,3]:='7';

s[7,3,2]:='4';

//level 8

s[8,2,1]:='2';

s[8,2,3]:='6';

s[8,3,1]:='5';

s[8,3,3]:='8';

//küme 9

s[9,1,3]:='2';

s[9,2,1]:='9';

s[9,3,2]:='7';

createmainmatris;showmainmatris;

//final

end;

 

 

buttonun click olayına aşağıdaki kodu yazınız:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

//ara testler

//showmessage(inttostr(getkume(9,4))); //test - 9.satır 4.sutun hangi kümeye denk gelir?

//showmessage(getdownline(6)); //test - 6. sütunun dikey değerini göster

//if ifresolvedok then showmessage('tamam') else showmessage('hayır');//test-çözüm tamam mı değil mi ?

//showmessage(getkumestring(6));//test- 6 nolu kümenin sayılarını göster

createmainmatris;showmainmatris;

xexit:=false;

Memo1.clear;

Memo1.lines.add('Analiz başlatıldı...');

olasirakamlar;

Memo1.lines.add('Ok_');

end;

 

 

bitti.....

 

kodlama bu kadar.

 

 

neoturk: Forum - "sqlde iki tabloyu karşılaştırıp rapor üretmek"

"

SQL 'de iki tabloyu karşılaştırıp rapor üretmek Bugün 14:10

 

Herkeze merhabalar!

 

1. Tablo Siparis.db

   Field1 FirmaKod String

   Field2 Sip_Tar  Date

   Field3 Miktar Numeric

 

2. Tablo Firma.db

   Field1 FirmaKod String

   Field2 Uyar Lojik

   Field3 Gun Integer

  

Bu İki Tabloyu ve Date()fonksiyonunu kullanarak,tablo2 de

Uyar Field'i true olan ve kaç gün önceden uyarılacağı belirtilen

Field3'ü (Gun) üde değerlendirerek Günü Gelmiş Siparişleri

Raporlayacak bir SQL ifadesini nasıl yazabiliriz.

 

Çıktı Şu şekilde olacak.

Firma Kodu Sipariş Tar.

---------- ------------

00001      24.11.2005

00001      25.11.2005

00002      24.11.2005

 

aruz65

"

 

cevap:

 

öncelikle, bu güzel sorunuz için,

sizi tebrik ediyorum....

 

kendimce 2 farklı yöntemi teorik olarak açıklamaya çalışacağım,

deneme ve testlerinizi kendinizce yapıp çözüme ulaşmanızı umuyorum...

( yazım hatalarım olabilir, gereken düzeltmeleri kendiniz yapabilirsiniz )

 

*************

Yöntem - 1

*************

 

sql de iki tarih arası sorgulamayı şöyle yazabiliriz:

 

kabaca:

...

adoquery1.SQL.Clear;

adoquery1.active:=false;

ADOQuery1.SQL.Add('SELECT * FROM FIRMA');

ADOQuery1.SQL.Add('WHERE TARIH BETWEEN "01.01.2005" AND "10.10.2005"');

ADOQuery1.SQL.Add('AND LOJIK=TRUE');

ADOQuery1.SQL.Add('ORDER BY TARIH');

ADOQuery1.Active:=True;

...

 

yukarıdaki kod,

FIRMA tablosundaki TARIH kolonuna göre sorgulama yapar, ve,

örnek olsun diye LOJIK değeri işaretlenmiş olanları da kapsar.

 

yukarıdaki kod sizin sorunuzu tam olarak çözmez...

 

çünkü, field3 sahasındaki "GUNde tarih aralığına otomatik eklettiremiyoruz.

ve, tarih adlı bir field alanınız da yok.

 

veri tabanı kolon yapısı olarak şunu tavsiye ediyorum,

 

2. Tablo Firma.db

   Field1 FirmaKod String

   Field2 Uyar Lojik

   Field3 Gun Integer

  

   şeklindeki orjinal dosyanızı aşağıdaki şekilde düzeltiniz,

  

2. Tablo Firma.db

   Field1 FirmaKod String

   Field2 Uyar Lojik

   Field3 Gun Integer

   Field4 UyariTarihi String

         ( DATE değil. STRING. DATE olunca sql yemiyor ne üzücüdür ki ! )

         ( access için konuşuyorum )

 

şeklinde 1 adet kolon daha ekleyiniz.

 

Kullanıcı "GUN" değerini de girdikten sonra, otomatik olarak programınız,

baslamatarihine + gun değerini eklesin ve uyarıtarihini de yazsın DB ye.

( bunu bir şekilde kodlama ile yapabilirsiniz )

( veya "gun" adlı fieldi kaldırıp, direkt uyarı tarihini de elle girdirebilirsiniz )

 

yukarıdaki şekilde kolon yapılarınız olur ise,

 

...

adoquery1.SQL.Clear;

adoquery1.active:=false;

ADOQuery1.SQL.Add('SELECT * FROM FIRMA'); // db tablonuz

ADOQuery1.SQL.Add('WHERE UYARITARIHI BETWEEN "01.01.2005" AND "10.10.2005"');

ADOQuery1.SQL.Add('AND LOJIK=TRUE');

ADOQuery1.SQL.Add('ORDER BY UYARITARIHI');

ADOQuery1.Active:=True;

...

 

şeklinde bir düzenleme ile istediğinizi tam olarak alabilirsiniz.

 

"01.01.2005" ve "10.10.2005" olan tarih aralıklarını,

edit nesneleri ile esnek hale getirebilirsiniz.

bunu kullanırken de şu şekilde düzeltiniz,

 

'WHERE UYARITARIHI BETWEEN "+datetostr(strtodate(edit1.text))+'" AND "'+datetostr(strtodate(edit2.text))+'"'

 

şeklinde kodlama yapınız...

 

lojik değere bağlı olarak ve tarih aralığına göre

istediğiniz listeyi elde edebileceksiniz.

 

Firma Kodu Sipariş Tar.

---------- ------------

00001      24.11.2005

00001      25.11.2005

00002      24.11.2005

 

şeklinde çıktı istemişsiniz,

 

sanıyorum ki yukarıdaki kodlama ve kolon yapısını düzenlediğinizde

yukarıdaki çıktıyı elde edebilirsiniz.

( gereken dbgrid üzerindeki gösterilecek olan hücreleri de belirttirebilirsiniz )

 

buradan şu tecrübeyi edinebiliriz,

 

kolon yapısını hazırladığınızda,

"GUN" adlı field sahası, uyarı verdirtmek için sql cümleciğine yetersiz kalıyor.

Biz, bu "GUN" adlı sahayı, "UYARITARIHI" kolonuna otomatik olarak hesaplattırabilir,

db ye yazdırabilir, ve bu "UYARITARIHI" kolonuna göre hem tarih aralığını,

hem de lojik değerine göre sorgu yaptırabiliriz.

 

dediğim gibi isterseniz "GUN" adlı kolonu komple de silebilir, sadece yerine

"UYARITARIHI" kolonunu ekleyerek sql ile entegre sağlayabilirsiniz.

 

**************

YÖNTEM - 2

**************

 

diyorsanız ki,

herşey yerli yerinde kalsın, ben bu kolon yapısıyla yine de,

istediğim işlemi yaptırmak istiyorum,

bunu yine çözebiliriz, ama sql yardımı olmadan olur bu sefer...

 

biraz uzunca ve hızlıca anlatacağım, ( pek vaktim kalmadığı için )

 

 

//teorik yazıyorum, açıklayacağım.

function gunekle(tarih:string;eklenengun:byte):string;

var gun,ay,yil:string;xgun,xay,xyil:longint;x:string;

begin

x:=tarih;

gun:=copy(x,1,2);

ay:=copy(x,4,2);

yil:=copy(x,7,4);

xgun:=strtointdef(gun,0)+eklenengun;

xay:=strtointdef(ay,0);

xyil:=strtointdef(yil,0);

if xgun>31 then

   begin

   xgun:=(xgun mod 31)+1;

   inc(xay);

   if xay>12 then

      begin

      xay:=(xay mod 12)+1;

      inc(xyil);

      end;

   end;

result:=formatfloat('00',xgun)+'.'+formatfloat('00',xay)+'.'+formatfloat('0000',xyil);

end;

 

kullanım örneği:

showmessage(gunekle('11.01.2005',10));

21.01.2005 olarak gösterir.

 

yukarıdaki fonksiyon mantıksal olarak hatalar içermektedir.

çünkü date fonksiyonlarını kullanmadan basit bir formül yapısı ile çözmeye çalıştım.

ubat ayının 28 gün çektiği, veya bazı ayların 30 çektiğini filan hesaplatmadım )

(gereği de yok, çünkü,

sonuçta hepsi aynı süzgeçten geçeceği için ilgili gün öncesinden

haber verme işine yarayacaktır.....

)

 

function tarihcrc(x:string):longint;

var gun,ay,yil:string;xgun,xay,xyil:longint;

begin

gun:=copy(x,1,2);

ay:=copy(x,4,2);

yil:=copy(x,7,4);

xgun:=strtointdef(gun,0);

xay:=strtointdef(ay,0)*120;

xyil:=strtointdef(yil,0)*3650;

result:=xyil+xay+xgun;

end;

 

yukarıdaki kod da iki tarih arasını sorgulatmak için kullanacağız.

( yukarıdaki kodu çok eski bir tarihte kodbanka göndermiştim, direkt copy/paste yaptım)

 

 

evet şimdi lojik değere göre ve ilgili gün öncesinden uyarı verilecek olan

kayıtların listesini nasıl üreteceğimize gelelim,

 

iskelet mantık olarak şöyle yapıyorum,

 

amacım, belirttiğiniz orjinal tablo yapısında, lojik değerleri de göz önünde

bulundurarak belirtilen gün öncesindeki kayıtların listesini

listbox1 içerisinde göstermek

( buradan sıçratarak neyi istiyorsanız yaptırabilirsiniz )

 

access formatına adapte edildiğini varsayıyorum:

 

....

var

  firmakod:string,uyar:boolean;gun:integer;

  hedeftarih,buguntarih,kontroltarih:string;

  hedef,kontroltarih:longint;

 

begin

listbox1.clear;//listbox1i temizle

adotable1.firt;//ilk kayda git

hedeftarih:='30.10.2005';//bunu edit1 e bağlayabilirsin.

                         //bu tarihe göre bugünün tarihini

                         //gün fieldine göre bakıp uyaracak

hedef:=tarihcrc(hedeftarih);//hedef tarihin crc si

buguntarih:=datetostr(now); //bugünün tarihinden itibaren baz alınacak

                            //bunu da edit2 ye bağlayabilirsin.

do while not(eof(adotable1)) do

begin

lojik:=adotable1.fields.fieldbyname('UYAR').asboolean;

if lojik then // bu kayıtta uyarı yapılacak ise

    begin

    firmakod:=adotable1.fields.fieldbyname('FIRMAKOD').asstring;

    gun:=adotable1.fields.fieldbyname('GUN').asinteger;

    kontroltarih:=gunekle(buguntarih,gun);//bugunkü tarihe GUN adet günü ekle

    kontroltarih:=tarihcrc(kontroltarih);//kontroltarih crc si

    if kontroltarih=hedef then //ilgili GUN öncesi uyarısı tutuyor ise

         begin

         listbox1.items.add(firmakod+' / '+buguntarih+' / '+hedeftarih );

         end;

    end;//lojik

adotable1.next;//sonraki kayda git

end;//while

//final

end;

...

 

yukarıdaki iskelet kod yapısı ve mantığı ile,

istediğiniz çözümü elde edebilirsiniz.

 

şu şekilde çalışıyor mantık olarak:

 

hedeftarih=30.10.2005 olsun.

bugun=25.10.2005 olsun.

 

tüm kayıtlara tek tek bakıyor....

 

lojik değeri atanmış olan bir kayda rastladığında,

 

bugun tarihine ilgili gun değerini ekliyor

 

örneğin o kaydın gun değeri 4 olsun

kontroltarih = 29.10.2005 olur.

kontroltarih<>hedeftarih olduğu için

o kaydı size uyarmaz.

 

örneğin o kaydın gun değeri 1 olsun

kontroltarih = 26.10.2005 olur.

kontroltarih<>hedeftarih olduğu için

o kaydı size uyarmaz.

 

örneğin o kaydın gun değeri 5 olsun

kontroltarih = 30.10.2005 olur.

kontroltarih=hedeftarih olduğu için

o kaydı size uyarır.

 

Böylece hedeftarihe göre ilgili bir tarihi baz alarak, her kaydın

gün öncesini alıp bire-bir eşleşiyor mu diye kontrol eder

ve tüm kayıtlar filtrelenmiş olur........

 

 

probleminizi çözerseniz beni bilgilendirirseniz sevinirim,

 

çalışmalarınızda başarılar diliyorum,

 

kolay gelsin.....

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "sqlde iki tabloyu karşılaştırıp rapor üretmek"

"

SQL 'de iki tabloyu karşılaştırıp rapor üretmek Bugün 14:10

 

Herkeze merhabalar!

 

1. Tablo Siparis.db

   Field1 FirmaKod String

   Field2 Sip_Tar  Date

   Field3 Miktar Numeric

 

2. Tablo Firma.db

   Field1 FirmaKod String

   Field2 Uyar Lojik

   Field3 Gun Integer

  

Bu İki Tabloyu ve Date()fonksiyonunu kullanarak,tablo2 de

Uyar Field'i true olan ve kaç gün önceden uyarılacağı belirtilen

Field3'ü (Gun) üde değerlendirerek Günü Gelmiş Siparişleri

Raporlayacak bir SQL ifadesini nasıl yazabiliriz.

 

Çıktı Şu şekilde olacak.

Firma Kodu Sipariş Tar.

---------- ------------

00001      24.11.2005

00001      25.11.2005

00002      24.11.2005

 

aruz65

"

 

cevap:

 

öncelikle, bu güzel sorunuz için,

sizi tebrik ediyorum....

 

kendimce 2 farklı yöntemi teorik olarak açıklamaya çalışacağım,

deneme ve testlerinizi kendinizce yapıp çözüme ulaşmanızı umuyorum...

( yazım hatalarım olabilir, gereken düzeltmeleri kendiniz yapabilirsiniz )

 

*************

Yöntem - 1

*************

 

sql de iki tarih arası sorgulamayı şöyle yazabiliriz:

 

kabaca:

...

adoquery1.SQL.Clear;

adoquery1.active:=false;

ADOQuery1.SQL.Add('SELECT * FROM FIRMA');

ADOQuery1.SQL.Add('WHERE TARIH BETWEEN "01.01.2005" AND "10.10.2005"');

ADOQuery1.SQL.Add('AND LOJIK=TRUE');

ADOQuery1.SQL.Add('ORDER BY TARIH');

ADOQuery1.Active:=True;

...

 

yukarıdaki kod,

FIRMA tablosundaki TARIH kolonuna göre sorgulama yapar, ve,

örnek olsun diye LOJIK değeri işaretlenmiş olanları da kapsar.

 

yukarıdaki kod sizin sorunuzu tam olarak çözmez...

 

çünkü, field3 sahasındaki "GUNde tarih aralığına otomatik eklettiremiyoruz.

ve, tarih adlı bir field alanınız da yok.

 

veri tabanı kolon yapısı olarak şunu tavsiye ediyorum,

 

2. Tablo Firma.db

   Field1 FirmaKod String

   Field2 Uyar Lojik

   Field3 Gun Integer

  

   şeklindeki orjinal dosyanızı aşağıdaki şekilde düzeltiniz,

  

2. Tablo Firma.db

   Field1 FirmaKod String

   Field2 Uyar Lojik

   Field3 Gun Integer

   Field4 UyariTarihi String

         ( DATE değil. STRING. DATE olunca sql yemiyor ne üzücüdür ki ! )

         ( access için konuşuyorum )

 

şeklinde 1 adet kolon daha ekleyiniz.

 

Kullanıcı "GUN" değerini de girdikten sonra, otomatik olarak programınız,

baslamatarihine + gun değerini eklesin ve uyarıtarihini de yazsın DB ye.

( bunu bir şekilde kodlama ile yapabilirsiniz )

( veya "gun" adlı fieldi kaldırıp, direkt uyarı tarihini de elle girdirebilirsiniz )

 

yukarıdaki şekilde kolon yapılarınız olur ise,

 

...

adoquery1.SQL.Clear;

adoquery1.active:=false;

ADOQuery1.SQL.Add('SELECT * FROM FIRMA'); // db tablonuz

ADOQuery1.SQL.Add('WHERE UYARITARIHI BETWEEN "01.01.2005" AND "10.10.2005"');

ADOQuery1.SQL.Add('AND LOJIK=TRUE');

ADOQuery1.SQL.Add('ORDER BY UYARITARIHI');

ADOQuery1.Active:=True;

...

 

şeklinde bir düzenleme ile istediğinizi tam olarak alabilirsiniz.

 

"01.01.2005" ve "10.10.2005" olan tarih aralıklarını,

edit nesneleri ile esnek hale getirebilirsiniz.

bunu kullanırken de şu şekilde düzeltiniz,

 

'WHERE UYARITARIHI BETWEEN "+datetostr(strtodate(edit1.text))+'" AND "'+datetostr(strtodate(edit2.text))+'"'

 

şeklinde kodlama yapınız...

 

lojik değere bağlı olarak ve tarih aralığına göre

istediğiniz listeyi elde edebileceksiniz.

 

Firma Kodu Sipariş Tar.

---------- ------------

00001      24.11.2005

00001      25.11.2005

00002      24.11.2005

 

şeklinde çıktı istemişsiniz,

 

sanıyorum ki yukarıdaki kodlama ve kolon yapısını düzenlediğinizde

yukarıdaki çıktıyı elde edebilirsiniz.

( gereken dbgrid üzerindeki gösterilecek olan hücreleri de belirttirebilirsiniz )

 

buradan şu tecrübeyi edinebiliriz,

 

kolon yapısını hazırladığınızda,

"GUN" adlı field sahası, uyarı verdirtmek için sql cümleciğine yetersiz kalıyor.

Biz, bu "GUN" adlı sahayı, "UYARITARIHI" kolonuna otomatik olarak hesaplattırabilir,

db ye yazdırabilir, ve bu "UYARITARIHI" kolonuna göre hem tarih aralığını,

hem de lojik değerine göre sorgu yaptırabiliriz.

 

dediğim gibi isterseniz "GUN" adlı kolonu komple de silebilir, sadece yerine

"UYARITARIHI" kolonunu ekleyerek sql ile entegre sağlayabilirsiniz.

 

**************

YÖNTEM - 2

**************

 

diyorsanız ki,

herşey yerli yerinde kalsın, ben bu kolon yapısıyla yine de,

istediğim işlemi yaptırmak istiyorum,

bunu yine çözebiliriz, ama sql yardımı olmadan olur bu sefer...

 

biraz uzunca ve hızlıca anlatacağım, ( pek vaktim kalmadığı için )

 

 

//teorik yazıyorum, açıklayacağım.

function gunekle(tarih:string;eklenengun:byte):string;

var gun,ay,yil:string;xgun,xay,xyil:longint;x:string;

begin

x:=tarih;

gun:=copy(x,1,2);

ay:=copy(x,4,2);

yil:=copy(x,7,4);

xgun:=strtointdef(gun,0)+eklenengun;

xay:=strtointdef(ay,0);

xyil:=strtointdef(yil,0);

if xgun>31 then

   begin

   xgun:=(xgun mod 31)+1;

   inc(xay);

   if xay>12 then

      begin

      xay:=(xay mod 12)+1;

      inc(xyil);

      end;

   end;

result:=formatfloat('00',xgun)+'.'+formatfloat('00',xay)+'.'+formatfloat('0000',xyil);

end;

 

kullanım örneği:

showmessage(gunekle('11.01.2005',10));

21.01.2005 olarak gösterir.

 

yukarıdaki fonksiyon mantıksal olarak hatalar içermektedir.

çünkü date fonksiyonlarını kullanmadan basit bir formül yapısı ile çözmeye çalıştım.

ubat ayının 28 gün çektiği, veya bazı ayların 30 çektiğini filan hesaplatmadım )

(gereği de yok, çünkü,

sonuçta hepsi aynı süzgeçten geçeceği için ilgili gün öncesinden

haber verme işine yarayacaktır.....

)

 

function tarihcrc(x:string):longint;

var gun,ay,yil:string;xgun,xay,xyil:longint;

begin

gun:=copy(x,1,2);

ay:=copy(x,4,2);

yil:=copy(x,7,4);

xgun:=strtointdef(gun,0);

xay:=strtointdef(ay,0)*120;

xyil:=strtointdef(yil,0)*3650;

result:=xyil+xay+xgun;

end;

 

yukarıdaki kod da iki tarih arasını sorgulatmak için kullanacağız.

( yukarıdaki kodu çok eski bir tarihte kodbanka göndermiştim, direkt copy/paste yaptım)

 

 

evet şimdi lojik değere göre ve ilgili gün öncesinden uyarı verilecek olan

kayıtların listesini nasıl üreteceğimize gelelim,

 

iskelet mantık olarak şöyle yapıyorum,

 

amacım, belirttiğiniz orjinal tablo yapısında, lojik değerleri de göz önünde

bulundurarak belirtilen gün öncesindeki kayıtların listesini

listbox1 içerisinde göstermek

( buradan sıçratarak neyi istiyorsanız yaptırabilirsiniz )

 

access formatına adapte edildiğini varsayıyorum:

 

....

var

  firmakod:string,uyar:boolean;gun:integer;

  hedeftarih,buguntarih,kontroltarih:string;

  hedef,kontroltarih:longint;

 

begin

listbox1.clear;//listbox1i temizle

adotable1.firt;//ilk kayda git

hedeftarih:='30.10.2005';//bunu edit1 e bağlayabilirsin.

                         //bu tarihe göre bugünün tarihini

                         //gün fieldine göre bakıp uyaracak

hedef:=tarihcrc(hedeftarih);//hedef tarihin crc si

buguntarih:=datetostr(now); //bugünün tarihinden itibaren baz alınacak

                            //bunu da edit2 ye bağlayabilirsin.

do while not(eof(adotable1)) do

begin

lojik:=adotable1.fields.fieldbyname('UYAR').asboolean;

if lojik then // bu kayıtta uyarı yapılacak ise

    begin

    firmakod:=adotable1.fields.fieldbyname('FIRMAKOD').asstring;

    gun:=adotable1.fields.fieldbyname('GUN').asinteger;

    kontroltarih:=gunekle(buguntarih,gun);//bugunkü tarihe GUN adet günü ekle

    kontroltarih:=tarihcrc(kontroltarih);//kontroltarih crc si

    if kontroltarih=hedef then //ilgili GUN öncesi uyarısı tutuyor ise

         begin

         listbox1.items.add(firmakod+' / '+buguntarih+' / '+hedeftarih );

         end;

    end;//lojik

adotable1.next;//sonraki kayda git

end;//while

//final

end;

...

 

yukarıdaki iskelet kod yapısı ve mantığı ile,

istediğiniz çözümü elde edebilirsiniz.

 

şu şekilde çalışıyor mantık olarak:

 

hedeftarih=30.10.2005 olsun.

bugun=25.10.2005 olsun.

 

tüm kayıtlara tek tek bakıyor....

 

lojik değeri atanmış olan bir kayda rastladığında,

 

bugun tarihine ilgili gun değerini ekliyor

 

örneğin o kaydın gun değeri 4 olsun

kontroltarih = 29.10.2005 olur.

kontroltarih<>hedeftarih olduğu için

o kaydı size uyarmaz.

 

örneğin o kaydın gun değeri 1 olsun

kontroltarih = 26.10.2005 olur.

kontroltarih<>hedeftarih olduğu için

o kaydı size uyarmaz.

 

örneğin o kaydın gun değeri 5 olsun

kontroltarih = 30.10.2005 olur.

kontroltarih=hedeftarih olduğu için

o kaydı size uyarır.

 

Böylece hedeftarihe göre ilgili bir tarihi baz alarak, her kaydın

gün öncesini alıp bire-bir eşleşiyor mu diye kontrol eder

ve tüm kayıtlar filtrelenmiş olur........

 

 

probleminizi çözerseniz beni bilgilendirirseniz sevinirim,

 

çalışmalarınızda başarılar diliyorum,

 

kolay gelsin.....

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk:Forum - Düzeltme - "merhaba arkadaşlar yardıma ihtiyacım var"

****

düzeltilen yer:

 

sql cümleciklerinde "like" ekini yazmayı unuttum.

bu yazıda ilave ettim.

****

 

"

MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR... Bugün 13:44

 

Arkadaşlar Form Üzerinde Bir Adet Edit

ve Vir Adet de DBGrid Var ben

 

Form Açıldığında DBGrid içinde Hiç Kayıt Olmayacak ...

 

BEn Edit1 İçine Örnek % ( Yüzde ) İşareti Yazıp Entere BAsarsam

 

CARI Tablosundaki Kayıtları DBGrid içine Lİsteleyecek ...

 

VEya Edit1 İçine Ahmet Tin Ahm% Yazdığumda AHm İle Başlayan Kayıtları

Listelemesini İstiyorum...

 

DAtabas Paradox Kullanıyorum..

 

Tablo Adım ' CARI '

Kolun Adım ' C_ADI'

 

Bana YArdımcı Olabilirseniz Sevinirim....

 

Önemli Arkadaşlar...

 

sahinmaster

"

 

cevap:

 

sorunuzdan anladığım kadarıyla konu olarak "sql" e giriyor.

 

Bu konuda fazlaca döküman ve kod örneği görebilirsiniz kodbank içerisinde.

 

Kullandığınız veritabanı Paradox olsun Access olsun farketmez,

sql cümlecikleri hepsinde geçerlidir.

 

dbgrid,table ve datasource ayarlarınızı yaptığınızı varsayıyorum.

( dbgridin datasource = datasource1 olarak yaptınız vs vs ... )

 

verdiğiniz tablo adı ve kolonunuza göre sql cümlecikleri şunlar olabilir:

 

1) SELECT * FROM CARI WHERE C_ADI ="neoturk"

> c_adı neoturk olanları listeler.

 

2) SELECT * FROM CARI WHERE C_ADI ="neoturk" ORDER BY C_ADI ASC

> c_adı neoturk olanları listeler ve c_adi kolonuna göre sıralar.

  ASC - Adan Zye doğru sıralar

  DESC - Zden Aya doğru sıralar

 

3) SELECT * FROM CARI WHERE C_ADI like "neoturk*"

> c_adı neoturk ile başlayanları listeler. ( * kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

4) SELECT * FROM CARI WHERE C_ADI like "%neoturk%"

> c_adı içerisinde neoturk geçenleri listeler ( % kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

5) 'SELECT * FROM CARI WHERE C_ADI like "'+edit1.text+'*"'

> c_adı edit1 hücresindeki hece ile başlayanları listeler.

 

...

 

sql cümlelerinde karşılaşılan tek tırnak ( ' ) problemi vardır,

 

bunu 2 şekilde önleyebilirsiniz,

 

#39 kullanarak ( 39 nolu ascii karakterin karşılığı tirnaktir )

" ( tab tuşunun üzerindeki tuşda bulunan çifttırnak kullanarak )

 

örnekler:

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like "'+edit1.text+'*"' ( doğrudur )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like '+#39+edit1.text+'*'+#39 ( doğrudur )

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like ''+edit1.text+'*'' ( yanlıştır )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like '''+edit1.text+'*''' ( doğrudur )

 

hangi yöntem size kolay geliyor ise onu kullanınız.

 

ben şahsen çifttırnak ( " ) olanı tercih ediyorum, kodlama karışmıyor o zaman...

 

access de sql cümleciklerini şöyle kullanabilirsin:

 

...

adoquery1.sql.text:=sqlcumle;//cümleyi ata

adoquery1.sql.open;//çalıştır, göster

( ilgili dbgrid üzerinde gösterecektir )

...

 

ana iskelet yapısıyla anlatmaya çalıştım,

 

umarım yardımım olmuştur...

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk:Forum - Düzeltme - "merhaba arkadaşlar yardıma ihtiyacım var"

****

düzeltilen yer:

 

sql cümleciklerinde "like" ekini yazmayı unuttum.

bu yazıda ilave ettim.

****

 

"

MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR... Bugün 13:44

 

Arkadaşlar Form Üzerinde Bir Adet Edit

ve Vir Adet de DBGrid Var ben

 

Form Açıldığında DBGrid içinde Hiç Kayıt Olmayacak ...

 

BEn Edit1 İçine Örnek % ( Yüzde ) İşareti Yazıp Entere BAsarsam

 

CARI Tablosundaki Kayıtları DBGrid içine Lİsteleyecek ...

 

VEya Edit1 İçine Ahmet Tin Ahm% Yazdığumda AHm İle Başlayan Kayıtları

Listelemesini İstiyorum...

 

DAtabas Paradox Kullanıyorum..

 

Tablo Adım ' CARI '

Kolun Adım ' C_ADI'

 

Bana YArdımcı Olabilirseniz Sevinirim....

 

Önemli Arkadaşlar...

 

sahinmaster

"

 

cevap:

 

sorunuzdan anladığım kadarıyla konu olarak "sql" e giriyor.

 

Bu konuda fazlaca döküman ve kod örneği görebilirsiniz kodbank içerisinde.

 

Kullandığınız veritabanı Paradox olsun Access olsun farketmez,

sql cümlecikleri hepsinde geçerlidir.

 

dbgrid,table ve datasource ayarlarınızı yaptığınızı varsayıyorum.

( dbgridin datasource = datasource1 olarak yaptınız vs vs ... )

 

verdiğiniz tablo adı ve kolonunuza göre sql cümlecikleri şunlar olabilir:

 

1) SELECT * FROM CARI WHERE C_ADI ="neoturk"

> c_adı neoturk olanları listeler.

 

2) SELECT * FROM CARI WHERE C_ADI ="neoturk" ORDER BY C_ADI ASC

> c_adı neoturk olanları listeler ve c_adi kolonuna göre sıralar.

  ASC - Adan Zye doğru sıralar

  DESC - Zden Aya doğru sıralar

 

3) SELECT * FROM CARI WHERE C_ADI like "neoturk*"

> c_adı neoturk ile başlayanları listeler. ( * kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

4) SELECT * FROM CARI WHERE C_ADI like "%neoturk%"

> c_adı içerisinde neoturk geçenleri listeler ( % kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

5) 'SELECT * FROM CARI WHERE C_ADI like "'+edit1.text+'*"'

> c_adı edit1 hücresindeki hece ile başlayanları listeler.

 

...

 

sql cümlelerinde karşılaşılan tek tırnak ( ' ) problemi vardır,

 

bunu 2 şekilde önleyebilirsiniz,

 

#39 kullanarak ( 39 nolu ascii karakterin karşılığı tirnaktir )

" ( tab tuşunun üzerindeki tuşda bulunan çifttırnak kullanarak )

 

örnekler:

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like "'+edit1.text+'*"' ( doğrudur )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like '+#39+edit1.text+'*'+#39 ( doğrudur )

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like ''+edit1.text+'*'' ( yanlıştır )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI like '''+edit1.text+'*''' ( doğrudur )

 

hangi yöntem size kolay geliyor ise onu kullanınız.

 

ben şahsen çifttırnak ( " ) olanı tercih ediyorum, kodlama karışmıyor o zaman...

 

access de sql cümleciklerini şöyle kullanabilirsin:

 

...

adoquery1.sql.text:=sqlcumle;//cümleyi ata

adoquery1.sql.open;//çalıştır, göster

( ilgili dbgrid üzerinde gösterecektir )

...

 

ana iskelet yapısıyla anlatmaya çalıştım,

 

umarım yardımım olmuştur...

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "merhaba arkadaşlar yardıma ihtiyacım var"

"

MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR... Bugün 13:44

 

Arkadaşlar Form Üzerinde Bir Adet Edit

ve Vir Adet de DBGrid Var ben

 

Form Açıldığında DBGrid içinde Hiç Kayıt Olmayacak ...

 

BEn Edit1 İçine Örnek % ( Yüzde ) İşareti Yazıp Entere BAsarsam

 

CARI Tablosundaki Kayıtları DBGrid içine Lİsteleyecek ...

 

VEya Edit1 İçine Ahmet Tin Ahm% Yazdığumda AHm İle Başlayan Kayıtları

Listelemesini İstiyorum...

 

DAtabas Paradox Kullanıyorum..

 

Tablo Adım ' CARI '

Kolun Adım ' C_ADI'

 

Bana YArdımcı Olabilirseniz Sevinirim....

 

Önemli Arkadaşlar...

 

sahinmaster

"

 

cevap:

 

sorunuzdan anladığım kadarıyla konu olarak "sql" e giriyor.

 

Bu konuda fazlaca döküman ve kod örneği görebilirsiniz kodbank içerisinde.

 

Kullandığınız veritabanı Paradox olsun Access olsun farketmez,

sql cümlecikleri hepsinde geçerlidir.

 

dbgrid,table ve datasource ayarlarınızı yaptığınızı varsayıyorum.

( dbgridin datasource = datasource1 olarak yaptınız vs vs ... )

 

verdiğiniz tablo adı ve kolonunuza göre sql cümlecikleri şunlar olabilir:

 

1) SELECT * FROM CARI WHERE C_ADI ="neoturk"

> c_adı neoturk olanları listeler.

 

2) SELECT * FROM CARI WHERE C_ADI ="neoturk" ORDER BY C_ADI ASC

> c_adı neoturk olanları listeler ve c_adi kolonuna göre sıralar.

  ASC - Adan Zye doğru sıralar

  DESC - Zden Aya doğru sıralar

 

3) SELECT * FROM CARI WHERE C_ADI ="neoturk*"

> c_adı neoturk ile başlayanları listeler. ( * kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

4) SELECT * FROM CARI WHERE C_ADI ="%neoturk%"

> c_adı içerisinde neoturk geçenleri listeler ( % kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

5) 'SELECT * FROM CARI WHERE C_ADI="'+edit1.text+'*"'

> c_adı edit1 hücresindeki hece ile başlayanları listeler.

 

...

 

sql cümlelerinde karşılaşılan tek tırnak ( ' ) problemi vardır,

 

bunu 2 şekilde önleyebilirsiniz,

 

#39 kullanarak ( 39 nolu ascii karakterin karşılığı tirnaktir )

" ( tab tuşunun üzerindeki tuşda bulunan çifttırnak kullanarak )

 

örnekler:

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI="'+edit1.text+'*"' ( doğrudur )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI='+#39+edit1.text+'*'+#39 ( doğrudur )

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI=''+edit1.text+'*'' ( yanlıştır )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI='''+edit1.text+'*''' ( doğrudur )

 

hangi yöntem size kolay geliyor ise onu kullanınız.

 

ben şahsen çifttırnak ( " ) olanı tercih ediyorum, kodlama karışmıyor o zaman...

 

access de sql cümleciklerini şöyle kullanabilirsin:

 

...

adoquery1.sql.text:=sqlcumle;//cümleyi ata

adoquery1.sql.open;//çalıştır, göster

( ilgili dbgrid üzerinde gösterecektir )

...

 

ana iskelet yapısıyla anlatmaya çalıştım,

 

umarım yardımım olmuştur...

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "merhaba arkadaşlar yardıma ihtiyacım var"

"

MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR... Bugün 13:44

 

Arkadaşlar Form Üzerinde Bir Adet Edit

ve Vir Adet de DBGrid Var ben

 

Form Açıldığında DBGrid içinde Hiç Kayıt Olmayacak ...

 

BEn Edit1 İçine Örnek % ( Yüzde ) İşareti Yazıp Entere BAsarsam

 

CARI Tablosundaki Kayıtları DBGrid içine Lİsteleyecek ...

 

VEya Edit1 İçine Ahmet Tin Ahm% Yazdığumda AHm İle Başlayan Kayıtları

Listelemesini İstiyorum...

 

DAtabas Paradox Kullanıyorum..

 

Tablo Adım ' CARI '

Kolun Adım ' C_ADI'

 

Bana YArdımcı Olabilirseniz Sevinirim....

 

Önemli Arkadaşlar...

 

sahinmaster

"

 

cevap:

 

sorunuzdan anladığım kadarıyla konu olarak "sql" e giriyor.

 

Bu konuda fazlaca döküman ve kod örneği görebilirsiniz kodbank içerisinde.

 

Kullandığınız veritabanı Paradox olsun Access olsun farketmez,

sql cümlecikleri hepsinde geçerlidir.

 

dbgrid,table ve datasource ayarlarınızı yaptığınızı varsayıyorum.

( dbgridin datasource = datasource1 olarak yaptınız vs vs ... )

 

verdiğiniz tablo adı ve kolonunuza göre sql cümlecikleri şunlar olabilir:

 

1) SELECT * FROM CARI WHERE C_ADI ="neoturk"

> c_adı neoturk olanları listeler.

 

2) SELECT * FROM CARI WHERE C_ADI ="neoturk" ORDER BY C_ADI ASC

> c_adı neoturk olanları listeler ve c_adi kolonuna göre sıralar.

  ASC - Adan Zye doğru sıralar

  DESC - Zden Aya doğru sıralar

 

3) SELECT * FROM CARI WHERE C_ADI ="neoturk*"

> c_adı neoturk ile başlayanları listeler. ( * kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

4) SELECT * FROM CARI WHERE C_ADI ="%neoturk%"

> c_adı içerisinde neoturk geçenleri listeler ( % kullandım dikkat )

  ORDEY BY ... kullanabilirsiniz, süsleyebilirsiniz.

 

5) 'SELECT * FROM CARI WHERE C_ADI="'+edit1.text+'*"'

> c_adı edit1 hücresindeki hece ile başlayanları listeler.

 

...

 

sql cümlelerinde karşılaşılan tek tırnak ( ' ) problemi vardır,

 

bunu 2 şekilde önleyebilirsiniz,

 

#39 kullanarak ( 39 nolu ascii karakterin karşılığı tirnaktir )

" ( tab tuşunun üzerindeki tuşda bulunan çifttırnak kullanarak )

 

örnekler:

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI="'+edit1.text+'*"' ( doğrudur )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI='+#39+edit1.text+'*'+#39 ( doğrudur )

 

sqlcumle:='SELECT * FROM CARI WHERE C_ADI=''+edit1.text+'*'' ( yanlıştır )

sqlcumle:='SELECT * FROM CARI WHERE C_ADI='''+edit1.text+'*''' ( doğrudur )

 

hangi yöntem size kolay geliyor ise onu kullanınız.

 

ben şahsen çifttırnak ( " ) olanı tercih ediyorum, kodlama karışmıyor o zaman...

 

access de sql cümleciklerini şöyle kullanabilirsin:

 

...

adoquery1.sql.text:=sqlcumle;//cümleyi ata

adoquery1.sql.open;//çalıştır, göster

( ilgili dbgrid üzerinde gösterecektir )

...

 

ana iskelet yapısıyla anlatmaya çalıştım,

 

umarım yardımım olmuştur...

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Burada Soru Sorulması Yasaklanmıştır, Buradaki Sorular Cevapsız bırakılacaktır

Konuyu daha fazla uzatmayacağım !

 

Buraya sorulmuş olan soruları,

 

her kim burada cevaplarsa,

 

onu kınamak zorunda kalacağım, fena halde kalp kırarım.

 

Burada sorulmuş soruları hiç içeriğine bile bakmadan SİLİNİZ...

 

Kimse cevap da vermesin, olaya da karışmasın.

 

Sorularınızı foruma sorunuz, cevaplarınızı burada bulacaksınız.

 

forum linki:

 

http://...................................../Forums.aspx?Forums=1

 

            KİMSE BURADA SORULAN SORULARA CEVAP VERMESİN

 

                       ( BU BİR EMİRDİR )

                      

                  SORULAN SORULARI DİREKT SİLİNİZ

                 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Burada Soru Sorulması Yasaklanmıştır, Buradaki Sorular Cevapsız bırakılacaktır

Konuyu daha fazla uzatmayacağım !

 

Buraya sorulmuş olan soruları,

 

her kim burada cevaplarsa,

 

onu kınamak zorunda kalacağım, fena halde kalp kırarım.

 

Burada sorulmuş soruları hiç içeriğine bile bakmadan SİLİNİZ...

 

Kimse cevap da vermesin, olaya da karışmasın.

 

Sorularınızı foruma sorunuz, cevaplarınızı burada bulacaksınız.

 

forum linki:

 

http://...................................../Forums.aspx?Forums=1

 

            KİMSE BURADA SORULAN SORULARA CEVAP VERMESİN

 

                       ( BU BİR EMİRDİR )

                      

                  SORULAN SORULARI DİREKT SİLİNİZ

                 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

Yardım Edebilen Yok mu?

Sorum şu:

 

CD'lerin seri numarası nasıl alınır.

lütfen yardım edin.

 

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

 

Yardım Edebilen Yok mu?

Sorum şu:

 

CD'lerin seri numarası nasıl alınır.

lütfen yardım edin.

 

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

 

neoturk: Forum - "microfon kaydı yapmak"

"

ses okuma Bugün 12:32

selam arkadaşlar bir proje için ses kartından ses girişi yapmam gerek bunun

için yol gösterirseniz sevinirim.

mikrofondan sesi okuyup bir dosya olarak kaydedecek.

şimdiden teşekkürler...

 

ofludursun

"

 

cevap:

 

//archived by neoturk - 2003

{************* record wav ****************}

//uses mmsystem

procedure recordwav(sender:Tobject);

begin

  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, form1.Handle);

  mciSendString('SET mysound TIME FORMAT MS ' +     // set time

    'BITSPERSAMPLE 8 ' +                // 8 Bit

    'CHANNELS 1 ' +                     // MONO

    'SAMPLESPERSEC 8000 ' +             // 8 KHz

    'BYTESPERSEC 8000',                // 8000 Bytes/s

    nil, 0, form1.Handle);

  mciSendString('RECORD mysound', nil, 0, form1.Handle)

end;

 

{********* stop record wav **************}

procedure stoprecordwav(sender:Tobject);

begin

mciSendString('STOP mysound', nil, 0, form1.Handle)

end;

 

 

{********* save record wav **************}

procedure saverecordwav(sender:Tobject;xrecordfile:string);

begin

  mciSendString(PChar('SAVE mysound '+xrecordfile), nil, 0, form1.Handle);

  mciSendString('CLOSE mysound', nil, 0, form1.Handle)

end;

 

 

kullanımı:

 

kodda da belirttim uses bölümüne "mmsystem" eklemeyi unutmayınız,

 

kayda-başla click:

begin

recordwav(sender);

end;

 

kaydi-durdur click:

begin

stoprecordwav(sender);

end;

 

kaydı-dosyaya-yaz click:

begin

saverecordwav(sender,'c:neo_deneme_wav_kayit.wav');

end;

 

BİLGİ NOTU:

*******************

microfon ve ses ayarları sağlıklı durumda olmalıdır,

yani bazen microfon sessizde kalabilir,

bazen de aux-misc girişleri veya,

ilgili ayarları ( xp de ) farklı yapılandırılmış olabilir..

microfon sesini "test" ettirdiğiniz anda ve iletişim sağlıklı kurulduğu anda,

verdiğim kodlar sorunsuz çalışacaktır...

 

umarım yardımcı olmuşumdur.........

 

kolay gelsin......

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "microfon kaydı yapmak"

"

ses okuma Bugün 12:32

selam arkadaşlar bir proje için ses kartından ses girişi yapmam gerek bunun

için yol gösterirseniz sevinirim.

mikrofondan sesi okuyup bir dosya olarak kaydedecek.

şimdiden teşekkürler...

 

ofludursun

"

 

cevap:

 

//archived by neoturk - 2003

{************* record wav ****************}

//uses mmsystem

procedure recordwav(sender:Tobject);

begin

  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, form1.Handle);

  mciSendString('SET mysound TIME FORMAT MS ' +     // set time

    'BITSPERSAMPLE 8 ' +                // 8 Bit

    'CHANNELS 1 ' +                     // MONO

    'SAMPLESPERSEC 8000 ' +             // 8 KHz

    'BYTESPERSEC 8000',                // 8000 Bytes/s

    nil, 0, form1.Handle);

  mciSendString('RECORD mysound', nil, 0, form1.Handle)

end;

 

{********* stop record wav **************}

procedure stoprecordwav(sender:Tobject);

begin

mciSendString('STOP mysound', nil, 0, form1.Handle)

end;

 

 

{********* save record wav **************}

procedure saverecordwav(sender:Tobject;xrecordfile:string);

begin

  mciSendString(PChar('SAVE mysound '+xrecordfile), nil, 0, form1.Handle);

  mciSendString('CLOSE mysound', nil, 0, form1.Handle)

end;

 

 

kullanımı:

 

kodda da belirttim uses bölümüne "mmsystem" eklemeyi unutmayınız,

 

kayda-başla click:

begin

recordwav(sender);

end;

 

kaydi-durdur click:

begin

stoprecordwav(sender);

end;

 

kaydı-dosyaya-yaz click:

begin

saverecordwav(sender,'c:neo_deneme_wav_kayit.wav');

end;

 

BİLGİ NOTU:

*******************

microfon ve ses ayarları sağlıklı durumda olmalıdır,

yani bazen microfon sessizde kalabilir,

bazen de aux-misc girişleri veya,

ilgili ayarları ( xp de ) farklı yapılandırılmış olabilir..

microfon sesini "test" ettirdiğiniz anda ve iletişim sağlıklı kurulduğu anda,

verdiğim kodlar sorunsuz çalışacaktır...

 

umarım yardımcı olmuşumdur.........

 

kolay gelsin......

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "aynı anda birden fazla kod satırını çalıştırmak"

"

Eş ZAmanlı komut satırı... Bugün 11:42

 

Arkadaşlar benim sorum biraz karşık gibi geliyor muhakkak kolaydır ama

ben yakalayamadım bir türlü  sorum şu:

 

aynı anda (eş zamanlı) birden fazla komut satırını nasıl çalıştıra bilirim

üst satırın görevi bitmeden alttaki satır ve daha başka satır aynı formda

aynı unit te aynı butonda (aynı procedure de) bi el atıp

yardımcı olursanız sevinirim

Çok teşekkürler herkeze

 

youutek

"

 

cevap:

 

Aynı anda birden fazla komut satırını çalıştırmak,

yani aynı anda birden fazla "işlem" yaptırmak,

"thread"(iş parçacığı) konusuna girer.

 

Thread programlama ileri bir programlamadır.

Dezavantaj olarak performans kaybına yol açar.

Avantaj olarak birden fazla işi aynı anda yaptırabilirsiniz.

 

"TProgressThread" sınıfından türetilen thread iş parçacığı kodlaması

için aşağıdaki örnek kodu inceleyiniz ve deneyiniz.

 

iskelet yapısı olarak bu kodu veriyorum, mantığını kavrayıp önce ufak denemelerle,

ardından yaptırmak istediğiniz iş-parçacıkları ile yoğunlaştırınız.

 

 

//archived by neoturk - 2004 ( Thread Programming )

unit Unit1;

 

interface

 

uses

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

  StdCtrls, ComCtrls;

 

type

  TProgressThread = class(TThread)

  private

    fRandomNo: Integer;

    fThreadNo: Integer;

    fProgress: Integer;

    fDone: Boolean;

  protected

    procedure Execute; override;

    procedure ShowProgress;

  end;

 

  TForm1 = class(TForm)

    Button1: TButton;

    ProgressBar1: TProgressBar;

    ProgressBar2: TProgressBar;

    ProgressBar3: TProgressBar;

    ProgressBar4: TProgressBar;

    ProgressBar5: TProgressBar;

    ProgressBar6: TProgressBar;

    ProgressBar7: TProgressBar;

    ProgressBar8: TProgressBar;

    ProgressBar9: TProgressBar;

    ProgressBar10: TProgressBar;

    Memo1: TMemo;

    procedure Button1Click(Sender: TObject);

  private

    ProgressThread: TProgressThread;

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.Button1Click(Sender: TObject);

var n: Integer;

begin

  Randomize;

  Memo1.Clear;

  // 10 tane iş parçacığı üret ve başlat

  for n:= 1 to 10 do

  begin

    ProgressThread:= TProgressThread.Create(true);

    ProgressThread.FreeOnTerminate:= true;

    ProgressThread.fThreadNo:= n;

    ProgressThread.fRandomNo:= Random(100);

    ProgressThread.FProgress:= 0;

    ProgressThread.fDone:= false;

   // işi başlat

    ProgressThread.Resume;

  end;

end;

 

 

{ TProgressThread }

 

procedure TProgressThread.Execute;

begin

  repeat

    if fRandomNo = Random(100000) then

    begin

      if fProgress < 100 then

      begin

        Inc(fProgress);

        if fProgress = 100 then fDone:= true;

        Synchronize(ShowProgress);

      end;

    end;

  until fDone;

end;

 

procedure TProgressThread.ShowProgress;

begin

  // progress barları iş parçacığına göre güncelle

  case fThreadNo of

    1: Form1.ProgressBar1.Position:= fProgress;

    2: Form1.ProgressBar2.Position:= fProgress;

    3: Form1.ProgressBar3.Position:= fProgress;

    4: Form1.ProgressBar4.Position:= fProgress;

    5: Form1.ProgressBar5.Position:= fProgress;

    6: Form1.ProgressBar6.Position:= fProgress;

    7: Form1.ProgressBar7.Position:= fProgress;

    8: Form1.ProgressBar8.Position:= fProgress;

    9: Form1.ProgressBar9.Position:= fProgress;

    10: Form1.ProgressBar10.Position:= fProgress;

  end;

 

  // işlemler tamamlandığında

  if fDone then

    Form1.Memo1.Lines.Add('İş parçacığı no: ' + IntToStr(fThreadNo) +

      ' tamamlandı.');

end;

 

end.

 

ileri kodlama yapısına girse de iyi bir örnek olduğunu düşünüyorum...

 

"application.ProcessMessages" komutu sorduğunuz sorunun cevabı değildir...

bu komut sadece diğer "event" lara ara sekmelerle kontrol imkanı sunar...

( daha önceden de sizin sorunuza benzer bir soru sorulduğunda, cümle alem,

"application.processmessages kullan tamamdır" şeklinde açıklama yapmışlardı,

çok biliyolardı sanıyorum, çünkü yazmışlar okumuşlar........... )

 

umarım yardımcı olabilmişimdir..

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "aynı anda birden fazla kod satırını çalıştırmak"

"

Eş ZAmanlı komut satırı... Bugün 11:42

 

Arkadaşlar benim sorum biraz karşık gibi geliyor muhakkak kolaydır ama

ben yakalayamadım bir türlü  sorum şu:

 

aynı anda (eş zamanlı) birden fazla komut satırını nasıl çalıştıra bilirim

üst satırın görevi bitmeden alttaki satır ve daha başka satır aynı formda

aynı unit te aynı butonda (aynı procedure de) bi el atıp

yardımcı olursanız sevinirim

Çok teşekkürler herkeze

 

youutek

"

 

cevap:

 

Aynı anda birden fazla komut satırını çalıştırmak,

yani aynı anda birden fazla "işlem" yaptırmak,

"thread"(iş parçacığı) konusuna girer.

 

Thread programlama ileri bir programlamadır.

Dezavantaj olarak performans kaybına yol açar.

Avantaj olarak birden fazla işi aynı anda yaptırabilirsiniz.

 

"TProgressThread" sınıfından türetilen thread iş parçacığı kodlaması

için aşağıdaki örnek kodu inceleyiniz ve deneyiniz.

 

iskelet yapısı olarak bu kodu veriyorum, mantığını kavrayıp önce ufak denemelerle,

ardından yaptırmak istediğiniz iş-parçacıkları ile yoğunlaştırınız.

 

 

//archived by neoturk - 2004 ( Thread Programming )

unit Unit1;

 

interface

 

uses

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

  StdCtrls, ComCtrls;

 

type

  TProgressThread = class(TThread)

  private

    fRandomNo: Integer;

    fThreadNo: Integer;

    fProgress: Integer;

    fDone: Boolean;

  protected

    procedure Execute; override;

    procedure ShowProgress;

  end;

 

  TForm1 = class(TForm)

    Button1: TButton;

    ProgressBar1: TProgressBar;

    ProgressBar2: TProgressBar;

    ProgressBar3: TProgressBar;

    ProgressBar4: TProgressBar;

    ProgressBar5: TProgressBar;

    ProgressBar6: TProgressBar;

    ProgressBar7: TProgressBar;

    ProgressBar8: TProgressBar;

    ProgressBar9: TProgressBar;

    ProgressBar10: TProgressBar;

    Memo1: TMemo;

    procedure Button1Click(Sender: TObject);

  private

    ProgressThread: TProgressThread;

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.Button1Click(Sender: TObject);

var n: Integer;

begin

  Randomize;

  Memo1.Clear;

  // 10 tane iş parçacığı üret ve başlat

  for n:= 1 to 10 do

  begin

    ProgressThread:= TProgressThread.Create(true);

    ProgressThread.FreeOnTerminate:= true;

    ProgressThread.fThreadNo:= n;

    ProgressThread.fRandomNo:= Random(100);

    ProgressThread.FProgress:= 0;

    ProgressThread.fDone:= false;

   // işi başlat

    ProgressThread.Resume;

  end;

end;

 

 

{ TProgressThread }

 

procedure TProgressThread.Execute;

begin

  repeat

    if fRandomNo = Random(100000) then

    begin

      if fProgress < 100 then

      begin

        Inc(fProgress);

        if fProgress = 100 then fDone:= true;

        Synchronize(ShowProgress);

      end;

    end;

  until fDone;

end;

 

procedure TProgressThread.ShowProgress;

begin

  // progress barları iş parçacığına göre güncelle

  case fThreadNo of

    1: Form1.ProgressBar1.Position:= fProgress;

    2: Form1.ProgressBar2.Position:= fProgress;

    3: Form1.ProgressBar3.Position:= fProgress;

    4: Form1.ProgressBar4.Position:= fProgress;

    5: Form1.ProgressBar5.Position:= fProgress;

    6: Form1.ProgressBar6.Position:= fProgress;

    7: Form1.ProgressBar7.Position:= fProgress;

    8: Form1.ProgressBar8.Position:= fProgress;

    9: Form1.ProgressBar9.Position:= fProgress;

    10: Form1.ProgressBar10.Position:= fProgress;

  end;

 

  // işlemler tamamlandığında

  if fDone then

    Form1.Memo1.Lines.Add('İş parçacığı no: ' + IntToStr(fThreadNo) +

      ' tamamlandı.');

end;

 

end.

 

ileri kodlama yapısına girse de iyi bir örnek olduğunu düşünüyorum...

 

"application.ProcessMessages" komutu sorduğunuz sorunun cevabı değildir...

bu komut sadece diğer "event" lara ara sekmelerle kontrol imkanı sunar...

( daha önceden de sizin sorunuza benzer bir soru sorulduğunda, cümle alem,

"application.processmessages kullan tamamdır" şeklinde açıklama yapmışlardı,

çok biliyolardı sanıyorum, çünkü yazmışlar okumuşlar........... )

 

umarım yardımcı olabilmişimdir..

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "Kronometre"

"

Daha detayl ıbilgi lütfen Bugün 01:28

 

1-----Rastgele 10 sayı üretip üretilen sayıları memo içerisine yazan program

 

Bu soruyu verdiğiniz kodlarla yapamadım daha detaylı bilgi verebilirmisiniz

ve geriye doğru değilde ileri doğru çalışan kronometreye ihtiyacım var bu

konudada yardımcı olabilirmisin acaba Başla dur reset butonları olmalı..

teşekkürler

 

hasgüç

"

 

cevap:

 

yeni bir uygulama projesi üretelim, teorik olarak yazıyorum,

 

forma 1 adet timer

forma 3 adet button ( reset-başla-dur )

forma 1 adet label

 

yerleştiriniz.

 

timer nesnesinin enabled değerini false atayınız.

timer nesnesinin interval değerini 10 atayınız ( değiştirebilirsiniz hıza bağlı olarak )

 

Ana VAR bloğuna şu tanımı yapınız,

 

var

  Form1: TForm1;

  salise,saniye,dakika,saat:byte; //kronometre değişkenleri

 

 

timer nesnesinin ontimer olayına şu kodu yazınız;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

inc(salise);

if salise>100 then //intervale bağlı olarak değişir bu satır

   begin

   salise:=0;

   inc(saniye);

   if saniye>=60 then

        begin

        saniye:=0;

        inc(dakika);

        if dakika>=60 then inc(saat);

        end;

   end;

label1.Caption:=formatfloat('00',saat)+' : '+formatfloat('00',dakika)+' : '+formatfloat('00',saniye)+' : '+formatfloat('00',salise);

end;

 

reset butonuna şu kodu yazınız:

 

begin

salise:=0;

saniye:=0;

dakika:=0;

saat:=0;

end;

 

 

başla botununa şu kodu yazınız:

 

timer1.enabled:=true;

 

dur botununa şu kodu yazınız:

 

timer1.enabled:=false;

 

F9 ile programı çalıştırıp test ediniz.

 

istediğiniz kronometre karşınızda çalışıyor durumda olmalı.........

 

 

CEVAP 2:

 

sayı üretip bunları memo içine aktaran kod örneğini tekrardan yazmayacağım.

 

gereken kodu yazmıştım,

bakınız:"edit üzerinde rastgele sayı üreten function"

 

bu koda bakıp da,

 

memo içine aktarım yapamıyor iseniz diyecek bir sözüm yok.......

 

memo1.lines.add('...ne.eklemek.istiyosan.buraya.yaz....');

 

bu kadar da vurdum duymazlık yapmayın ya.....

 

her yazdığım kod için pişmanlık ettirmeyin..

 

biraz yaratıcı olun artık !........

 

neredeyse kahvenizin şekerini de nasıl karıştırılacağını anlatacağım artık.....

 

kolay gelsin....

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "Kronometre"

"

Daha detayl ıbilgi lütfen Bugün 01:28

 

1-----Rastgele 10 sayı üretip üretilen sayıları memo içerisine yazan program

 

Bu soruyu verdiğiniz kodlarla yapamadım daha detaylı bilgi verebilirmisiniz

ve geriye doğru değilde ileri doğru çalışan kronometreye ihtiyacım var bu

konudada yardımcı olabilirmisin acaba Başla dur reset butonları olmalı..

teşekkürler

 

hasgüç

"

 

cevap:

 

yeni bir uygulama projesi üretelim, teorik olarak yazıyorum,

 

forma 1 adet timer

forma 3 adet button ( reset-başla-dur )

forma 1 adet label

 

yerleştiriniz.

 

timer nesnesinin enabled değerini false atayınız.

timer nesnesinin interval değerini 10 atayınız ( değiştirebilirsiniz hıza bağlı olarak )

 

Ana VAR bloğuna şu tanımı yapınız,

 

var

  Form1: TForm1;

  salise,saniye,dakika,saat:byte; //kronometre değişkenleri

 

 

timer nesnesinin ontimer olayına şu kodu yazınız;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

inc(salise);

if salise>100 then //intervale bağlı olarak değişir bu satır

   begin

   salise:=0;

   inc(saniye);

   if saniye>=60 then

        begin

        saniye:=0;

        inc(dakika);

        if dakika>=60 then inc(saat);

        end;

   end;

label1.Caption:=formatfloat('00',saat)+' : '+formatfloat('00',dakika)+' : '+formatfloat('00',saniye)+' : '+formatfloat('00',salise);

end;

 

reset butonuna şu kodu yazınız:

 

begin

salise:=0;

saniye:=0;

dakika:=0;

saat:=0;

end;

 

 

başla botununa şu kodu yazınız:

 

timer1.enabled:=true;

 

dur botununa şu kodu yazınız:

 

timer1.enabled:=false;

 

F9 ile programı çalıştırıp test ediniz.

 

istediğiniz kronometre karşınızda çalışıyor durumda olmalı.........

 

 

CEVAP 2:

 

sayı üretip bunları memo içine aktaran kod örneğini tekrardan yazmayacağım.

 

gereken kodu yazmıştım,

bakınız:"edit üzerinde rastgele sayı üreten function"

 

bu koda bakıp da,

 

memo içine aktarım yapamıyor iseniz diyecek bir sözüm yok.......

 

memo1.lines.add('...ne.eklemek.istiyosan.buraya.yaz....');

 

bu kadar da vurdum duymazlık yapmayın ya.....

 

her yazdığım kod için pişmanlık ettirmeyin..

 

biraz yaratıcı olun artık !........

 

neredeyse kahvenizin şekerini de nasıl karıştırılacağını anlatacağım artık.....

 

kolay gelsin....

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "yardıma ihtiyacım var arkadaşlar"

"

YARDIMA İHTİYACIM VAR ARKADAŞLAR.... 24 Kasım 2005 09:53

 

Merhaba Arkadaşlar ....

dbcomboBox1 İçindeki Bir Sayıyı Table1 İçindeki Sayı Kolonunda Olup

olmadığını Kontrol Edecek .. Var İse Hiç Bir Şey Yapmayacak Yok ise Uyarı

Mesajı Verecek ....

 

Bu Konuda Yardımcı Olabilirseniz Sevinirim....

 

Kolay Gelsin...

 

sahinmaster

"

 

cevap:

 

öncelikle,

 

dbcombobox kullanıyor iseniz,

bu zaten table içindeki bir field sahasının içeriğini gösteriyor demektir.

 

dolayısıyla, "table içindeki sayı kolonunda olup olmadığını kontrol etmek"

isteği mantıksız bir çakışmaya sebep oluyor...

 

dbcombobox nesnenizin tutulan field sahası "renkler" olsun diyelim,

ve access kullandığınızı varsayıyorum,

 

içinin boş olup olmadığını şöyle diyebiliriz,

 

if adotable1.fields.fieldbyname('RENKLER').asstring='' then showmessage('kayıt boştur');

 

dbcombobox nesnesinin "items" özelliğine varsayılan değerler atayabilirsiniz.

kullanıcı buradan seçtiği itemi otomatik olarak veri tabanında değiştirebilir.

 

dbcombobox ile normal combobox farklı nesnelerdir.

 

dbcombobox'ın anlamı zaten üzerindedir, ilgili field sahasını burada göster anlamındadır.

 

sorduğunuz sorunuzu şöyle değiştirirsek,

 

"benim bir combobox'ım var, içinde liste halinde item değerlerim var.

veri tabanındaki ilgili kolonda bu listedeki değerlerden herhangi birisi var sa

şöyle olsun, yoksa böyle olsun..."

 

bunu da şöyle düzeltebiliriz:

combobox1 nesnesi yerleştiriniz uygulamanıza,

ve içerisine kontrol ettireceğiniz items değerlerini atayınız,

daha sonra kontrol amaçlı aşağıdaki kod yapısını kendinize göre kurgulayınız.

 

var x:string;m:integer;

begin

x:=adotable1.fields.fieldbyname('RENKLER').asstring;

m:=combobox1.items.indexof(x);

if m<>-1 then

    begin

    showmessage('veri tabanındaki renkler kolonundaki veri, combobox içerisinde mevcuttur');

    ....

    end

    else

    begin

    showmessage('veri tabanındaki renkler kolonundaki veri, combobox içerisinde YOKTUR');

    ....

    end;

//final

end;

 

 

EK OLARAK: ( size kalmış )

 

ayrıca veri tabanında kullanılan bir başka yöntem de "picklist"ler oluşturmaktır.

 

dbgrid nesnesinin colums özelliğine girin.

yeni eklemek istediğiniz field alanlarını ekleyin. ( sarı ikonlu düğme - add new )

 

eklediğiniz fieldin properties penceresinde "picklist" özelliği göreceksiniz,

buraya çift tıklayın ( üç nokta olan yere "..." ) gereken items satırlarını ekleyin.

otomatik çoktan seçim özelliği de ekleyebilirsiniz.

 

 

sorunuzu bu şekilde anladım...

 

umarım yardımcı olmuşumdur...

 

kolay gelsin....

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "yardıma ihtiyacım var arkadaşlar"

"

YARDIMA İHTİYACIM VAR ARKADAŞLAR.... 24 Kasım 2005 09:53

 

Merhaba Arkadaşlar ....

dbcomboBox1 İçindeki Bir Sayıyı Table1 İçindeki Sayı Kolonunda Olup

olmadığını Kontrol Edecek .. Var İse Hiç Bir Şey Yapmayacak Yok ise Uyarı

Mesajı Verecek ....

 

Bu Konuda Yardımcı Olabilirseniz Sevinirim....

 

Kolay Gelsin...

 

sahinmaster

"

 

cevap:

 

öncelikle,

 

dbcombobox kullanıyor iseniz,

bu zaten table içindeki bir field sahasının içeriğini gösteriyor demektir.

 

dolayısıyla, "table içindeki sayı kolonunda olup olmadığını kontrol etmek"

isteği mantıksız bir çakışmaya sebep oluyor...

 

dbcombobox nesnenizin tutulan field sahası "renkler" olsun diyelim,

ve access kullandığınızı varsayıyorum,

 

içinin boş olup olmadığını şöyle diyebiliriz,

 

if adotable1.fields.fieldbyname('RENKLER').asstring='' then showmessage('kayıt boştur');

 

dbcombobox nesnesinin "items" özelliğine varsayılan değerler atayabilirsiniz.

kullanıcı buradan seçtiği itemi otomatik olarak veri tabanında değiştirebilir.

 

dbcombobox ile normal combobox farklı nesnelerdir.

 

dbcombobox'ın anlamı zaten üzerindedir, ilgili field sahasını burada göster anlamındadır.

 

sorduğunuz sorunuzu şöyle değiştirirsek,

 

"benim bir combobox'ım var, içinde liste halinde item değerlerim var.

veri tabanındaki ilgili kolonda bu listedeki değerlerden herhangi birisi var sa

şöyle olsun, yoksa böyle olsun..."

 

bunu da şöyle düzeltebiliriz:

combobox1 nesnesi yerleştiriniz uygulamanıza,

ve içerisine kontrol ettireceğiniz items değerlerini atayınız,

daha sonra kontrol amaçlı aşağıdaki kod yapısını kendinize göre kurgulayınız.

 

var x:string;m:integer;

begin

x:=adotable1.fields.fieldbyname('RENKLER').asstring;

m:=combobox1.items.indexof(x);

if m<>-1 then

    begin

    showmessage('veri tabanındaki renkler kolonundaki veri, combobox içerisinde mevcuttur');

    ....

    end

    else

    begin

    showmessage('veri tabanındaki renkler kolonundaki veri, combobox içerisinde YOKTUR');

    ....

    end;

//final

end;

 

 

EK OLARAK: ( size kalmış )

 

ayrıca veri tabanında kullanılan bir başka yöntem de "picklist"ler oluşturmaktır.

 

dbgrid nesnesinin colums özelliğine girin.

yeni eklemek istediğiniz field alanlarını ekleyin. ( sarı ikonlu düğme - add new )

 

eklediğiniz fieldin properties penceresinde "picklist" özelliği göreceksiniz,

buraya çift tıklayın ( üç nokta olan yere "..." ) gereken items satırlarını ekleyin.

otomatik çoktan seçim özelliği de ekleyebilirsiniz.

 

 

sorunuzu bu şekilde anladım...

 

umarım yardımcı olmuşumdur...

 

kolay gelsin....

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "text dosyada arama ve listbox hakkında"

text dosyada arama  ve listbox hakkında  Bugün 00:11

 

selam arkadaşlar. önecelikle yardımlarınızdan dolayı gerçekten herkese

çok teşekkür ederim bu sitede çok kaliteli insanlar var.

 

benim sorunum .:

 

ben text dosyaya kayıt kaydedip sonrada bu kayıtları listboxta listeletiyorum.

 

ben  sadece ürün adı kayıtlarını listeletip kullanıcı listboxtaki bir ürün

adına tıklayınca o ürün adınla ilgili bilgiler yan taraftaki edit lerde

görünmesini istiyorum.

 

benim yapamadığım yer listbox taki ürün adı kaydına tıklandığında

dosyada tıklanan ürün adını aratıp o ad ile ilgili bilgileri

edit.text lere yerleştirmek ve böylece kullanıcıya bu kayıt ile

ilgili düzenleme imkanı vermek.

 

çok acil yardımlarınızı bekliyorum..

 

saygılarımla...

 

benim listelemede kullandığım kodlar aşağıdadır.

 

procedure Tanaform.BitBtn4Click(Sender: TObject);

var

i:integer;

begin

listbox1.clear;

assignfile(stokdosya,'c:stoksatısdata.sys');

{$i-}reset(stokdosya);{$i+}

 

for i:=0 to filesize(stokdosya)-1 do

begin

seek(stokdosya,i);read(stokdosya,skay);

if   skay.f='*' then

begin

  listbox1.items.add(stokkay.uad);

 

  end;

 

end;

 

end;

 

memolipascal

"

 

cevap:

 

değerli memolipascal arkadaşım,

 

bir önceki sorunuza bağlantılı olarak,

 

kodlama yapısındaki uğraşınızı takdirle karşılıyorum...

 

sorunuz güzel, ancak, uzunca anlatmak istediğim unsurlar var.

 

pascal tabanlı veri saklamak-okutmak ( kütük yapısı )

fikrinden yavaş yavaş vazgeçmelisiniz. Bunu daha uygun

yöntemlerle nasıl yapabileceğinizi birazdan anlatacağım.

 

"

if   skay.f='*' then

  begin

  listbox1.items.add(stokkay.uad);

  end;

"

 

şeklindeki bir kodlama mantığının anlamı şu olabilir,

( yanılıyor olabilirim, veya siz başka bir amaç için kullanmış olabilirsiniz)

 

"ilgili kayıt silinmemiş ise" mantığı olabilir..

 

ki, bu da 10 sene önceki üniversitede bizlere gösterilen,

silinen kayıtların başına "*" simgesi koymak veya koymamak,

ile kütük yapıları idi...

 

dediğim gibi "kütük yapıları" mantığı delphide kullanmanıza gerek kalmayacak.

 

kütük yapıların kayıt arama işlemini "lineer"(sıradan) yapıyor iseniz,

çok kaydınız olduğunda zaman kaybı ve işlem kalabalığı yapacaktır.

eskimiş bir yöntemdir. ( index yapısını da kullanabilirsiniz ama dediğim gibi

eskimiş ve epeyce geride kalmış bir uygulama örneğidir )

 

veri tabanına neden geçiş yapmadığınızı bilmiyorum.

belki de henüz ısınamamış olabilirsiniz DB olaylarına..

çünkü dediğim gibi, pascal tabanlı kütük yapısı kodlara alışkın birisi için,

veri tabanına geçiş yapmak, sudan çıkmış balığa benzer bir "korku" içerir..

bu her zaman olmuştur... Ben de aynı şaşkınlığı ve korkuyu zamanında yaşadım.

 

veri tabanı kullanmak istemiyorsanız, ve kütük yapısı şeklinde bir program

geliştirmek istiyor iseniz, size önereceğim aşağıdaki mantığı kullanınız

ve kendinizi bu kodlar üzerinde geliştiriniz.

 

sıfırdan bir proje oluşturalım.

 

amacımız şu olsun:

veri tabanı kullanmadan "adsoyad-telefon-adres" bilgilerinin takibi yapan

bir program yazalım. ( kütük sistemi gibi.. ama yeni nesil kodlama ile )

 

Anlatacağım örnek, en temel ve iskelet yapı olacaktır.

Geliştirilmesini siz yapabilirsiniz. teorik olarak yazıyorum..

 

formun tasarımını şöyle yapınız:

( button-label-edit-listbox dizaynlarını size bırakıyorum )

 

Adısoyadı  : Edit1

Telefonu   : Edit2

Adresi     : Edit3

 

Listbox1(adsoyadlistesi)  Listbox2(telefonlistesi)  listbox3(adreslistesi)

 

 

bu dizaynı yapınız. Listboxlar içerisinde ilgili girilmiş olan kayıtlar

otomatik olarak gösterilecektir.(böyle ayarlayacağız kod ile birazdan)

listbox üzerinde tıklanılan satıra ilişkin bilgiler de edit kutuları

üzerine otomatik gelecektir. ( bunu da ayarlayacağız )

 

 

projenin ana "VAR" bloğunda aşağıdaki yapıyı tanımlayınız

 

VAR

    adsoyad,tel,adres:Tstringlist;

    apppath:string;

 

Formun oncreate olayına aşağıdaki yapıyı kodlayınız:

 

var x:string;

begin

apppath:=extractfilepath(application.exename)+'';

adsoyad:=tstringlist.create;

tel:=tstringlist.create;

adres:=tstringlist.create;

x:=apppath+'adsoyad.txt'; //sizin kütük dosyanız ( yeni nesil )

if fileexists(x) then

   begin

   adsoyad.loadfromfile(x);//hafızaya yükle

   listbox1.loadfromfile(x);//listboxa yükle

   end;

x:=apppath+'tel.txt';//sizin kütük dosyanız ( yeni nesil )

if fileexists(x) then

   begin

   tel.loadfromfile(x);//hafızaya yükle

   listbox2.loadfromfile(x);//listboxa yükle

   end;

x:=apppath+'adres.txt';//sizin kütük dosyanız ( yeni nesil )

if fileexists(x) then

   begin

   adres.loadfromfile(x);//hafızaya yükle

   listbox3.loadfromfile(x);//listboxa yükle

   end;

//final

end;

 

"Ekle" isminde bir button yerleştiriniz. ( kaydet butonu olacak )

butonun click olayına aşağıdaki kodu yazınız:

 

begin

adsoyad.add(edit1.text);listbox1.items.assign(adsoyad);

tel.add(edit2.text);listbox2.items.assign(tel);

adress.add(edit3.text);listbox3.items.assign(adress);

showmessage('kaydınız yapılmıştır');

//final

end;

 

"Sil" isminde bir button yerleştiriniz ( silme butonu olacak )

butonun click olayına aşağıdaki kodu yazınız:

 

var m:integer;

begin

m:=listbox1.itemindex;//listboxdaki seçili olan satır numarası

if m<>-1 then

   begin

   adsoyad.delete(m);listbox1.items.assign(adsoyad);

   tel.delete(m);listbox2.items.assign(tel);

   adress.delete(m);listbox3.items.assign(adress);

   showmessage('kayıt silinmiştir');

   end;

//final

end;

 

"arama" isminde bir button yerleştiriniz ( arama butonu olacak )

butonun click olayına aşağıdaki kodu yazınız:

 

var aranan:string;sonuc:integer;

begin

aranan:=edit4.text;//arama yapılacak isim edit4 text içinde yazan olsun

                   //edit4 nesnesi de ekleyiniz formunuza

 

//isim kolonunda arama yapılacak ise

sonuc:=adsoyad.indexof(aranan);//hangi kolonda arama yapacak iseniz onu kodlayınız

if sonuc<>-1 then //aranan kayıt var ise ( kendisi çok hızlı arar burada )

                  //büyük küçük harfe duyarlıdır. extra olarak kodu süslemeniz gerekmektedir.

    begin

    showmessage('aradığınız kayıt bulunmuştur');

    showmessage(inttostr(sonuc+1)+'.sirada bulunmaktadir');

    listbox1.itemindex:=sonuc;//listboxları hizala

    listbox2.itemindex:=sonuc;

    listbox3.itemindex:=sonuc;

    edit1.text:=adsoyad.strings[sonuc];//ilgili satırdaki elemanı al

    edit2.text:=tel.strings[sonuc];//ilgili satırdaki elemanı al

    edit3.text:=adres.strings[sonuc];//ilgili satırdaki elemanı al

    end;

//final

end;

 

 

listbox1 onclik olayına şunu yazınız, ve diğer listboxları da düzenleyiniz.

 

begin

listbox2.itemindex:=listbox1.itemindex;

listbox3.itemindex:=listbox1.itemindex;

listbox2.topindex:=listbox1.topindex;

listbox3.topindex:=listbox1.topindex;

edit1.text:=adsoyad.strings[listbox1.itemindex];

edit2.text:=tel.strings[listbox1.itemindex];

edit3.text:=adres.strings[listbox1.itemindex];

end;

 

listbox2 onclick olayına şunu yazınız:

 

begin

listbox1.itemindex:=listbox2.itemindex;

listbox3.itemindex:=listbox2.itemindex;

listbox1.topindex:=listbox2.topindex;

listbox3.topindex:=listbox2.topindex;

edit1.text:=adsoyad.strings[listbox2.itemindex];

edit2.text:=tel.strings[listbox2.itemindex];

edit3.text:=adres.strings[listbox2.itemindex];

end;

 

diğer listboxları da çapraz olarak itemindex ve topindex hizalamalarını ayarlarınız.

 

formun onclose olayına aşağıdaki kodu yazınız:

 

var x:string;

begin

//bilgileri kütüğe yaz

x:=apppath+'adsoyad.txt';adsoyad.savetofile(x);

x:=apppath+'tel.txt';tel.savetofile(x);

x:=apppath+'adres.txt';adres.savetofile(x);

end;

 

************

SONUÇ:

************

 

en temel ve iskelet yapısı ile veri tabanı kullanmaksızın,

 

- kayıt ekleme

- kayıt silme

- kayıt arama

- kayıtların listboxlarda listelenmesi

- listboxlara tıklanıldığında aynı hizlara getirilmesini

- listboxlara tıklanıldığında edit içeriklerinde bilgilerin görüntülenmesini

 

öğrenmiş olduk...

 

umarım faydam olmuştur,

 

yukarıda yazdığım şablon kodu geliştirebilirsiniz, bu size kalmış......

 

çalışmalarınızda başarılar diliyorum,

kodlama unsurlarında diğer

olası sorularınızı da cevaplamak isterim...

 

son tavsiyem,

bir an önce veritabanı programcılığına giriş yapmanızda fayda vardır..

 

kolay gelsin...

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "text dosyada arama ve listbox hakkında"

text dosyada arama  ve listbox hakkında  Bugün 00:11

 

selam arkadaşlar. önecelikle yardımlarınızdan dolayı gerçekten herkese

çok teşekkür ederim bu sitede çok kaliteli insanlar var.

 

benim sorunum .:

 

ben text dosyaya kayıt kaydedip sonrada bu kayıtları listboxta listeletiyorum.

 

ben  sadece ürün adı kayıtlarını listeletip kullanıcı listboxtaki bir ürün

adına tıklayınca o ürün adınla ilgili bilgiler yan taraftaki edit lerde

görünmesini istiyorum.

 

benim yapamadığım yer listbox taki ürün adı kaydına tıklandığında

dosyada tıklanan ürün adını aratıp o ad ile ilgili bilgileri

edit.text lere yerleştirmek ve böylece kullanıcıya bu kayıt ile

ilgili düzenleme imkanı vermek.

 

çok acil yardımlarınızı bekliyorum..

 

saygılarımla...

 

benim listelemede kullandığım kodlar aşağıdadır.

 

procedure Tanaform.BitBtn4Click(Sender: TObject);

var

i:integer;

begin

listbox1.clear;

assignfile(stokdosya,'c:stoksatısdata.sys');

{$i-}reset(stokdosya);{$i+}

 

for i:=0 to filesize(stokdosya)-1 do

begin

seek(stokdosya,i);read(stokdosya,skay);

if   skay.f='*' then

begin

  listbox1.items.add(stokkay.uad);

 

  end;

 

end;

 

end;

 

memolipascal

"

 

cevap:

 

değerli memolipascal arkadaşım,

 

bir önceki sorunuza bağlantılı olarak,

 

kodlama yapısındaki uğraşınızı takdirle karşılıyorum...

 

sorunuz güzel, ancak, uzunca anlatmak istediğim unsurlar var.

 

pascal tabanlı veri saklamak-okutmak ( kütük yapısı )

fikrinden yavaş yavaş vazgeçmelisiniz. Bunu daha uygun

yöntemlerle nasıl yapabileceğinizi birazdan anlatacağım.

 

"

if   skay.f='*' then

  begin

  listbox1.items.add(stokkay.uad);

  end;

"

 

şeklindeki bir kodlama mantığının anlamı şu olabilir,

( yanılıyor olabilirim, veya siz başka bir amaç için kullanmış olabilirsiniz)

 

"ilgili kayıt silinmemiş ise" mantığı olabilir..

 

ki, bu da 10 sene önceki üniversitede bizlere gösterilen,

silinen kayıtların başına "*" simgesi koymak veya koymamak,

ile kütük yapıları idi...

 

dediğim gibi "kütük yapıları" mantığı delphide kullanmanıza gerek kalmayacak.

 

kütük yapıların kayıt arama işlemini "lineer"(sıradan) yapıyor iseniz,

çok kaydınız olduğunda zaman kaybı ve işlem kalabalığı yapacaktır.

eskimiş bir yöntemdir. ( index yapısını da kullanabilirsiniz ama dediğim gibi

eskimiş ve epeyce geride kalmış bir uygulama örneğidir )

 

veri tabanına neden geçiş yapmadığınızı bilmiyorum.

belki de henüz ısınamamış olabilirsiniz DB olaylarına..

çünkü dediğim gibi, pascal tabanlı kütük yapısı kodlara alışkın birisi için,

veri tabanına geçiş yapmak, sudan çıkmış balığa benzer bir "korku" içerir..

bu her zaman olmuştur... Ben de aynı şaşkınlığı ve korkuyu zamanında yaşadım.

 

veri tabanı kullanmak istemiyorsanız, ve kütük yapısı şeklinde bir program

geliştirmek istiyor iseniz, size önereceğim aşağıdaki mantığı kullanınız

ve kendinizi bu kodlar üzerinde geliştiriniz.

 

sıfırdan bir proje oluşturalım.

 

amacımız şu olsun:

veri tabanı kullanmadan "adsoyad-telefon-adres" bilgilerinin takibi yapan

bir program yazalım. ( kütük sistemi gibi.. ama yeni nesil kodlama ile )

 

Anlatacağım örnek, en temel ve iskelet yapı olacaktır.

Geliştirilmesini siz yapabilirsiniz. teorik olarak yazıyorum..

 

formun tasarımını şöyle yapınız:

( button-label-edit-listbox dizaynlarını size bırakıyorum )

 

Adısoyadı  : Edit1

Telefonu   : Edit2

Adresi     : Edit3

 

Listbox1(adsoyadlistesi)  Listbox2(telefonlistesi)  listbox3(adreslistesi)

 

 

bu dizaynı yapınız. Listboxlar içerisinde ilgili girilmiş olan kayıtlar

otomatik olarak gösterilecektir.(böyle ayarlayacağız kod ile birazdan)

listbox üzerinde tıklanılan satıra ilişkin bilgiler de edit kutuları

üzerine otomatik gelecektir. ( bunu da ayarlayacağız )

 

 

projenin ana "VAR" bloğunda aşağıdaki yapıyı tanımlayınız

 

VAR

    adsoyad,tel,adres:Tstringlist;

    apppath:string;

 

Formun oncreate olayına aşağıdaki yapıyı kodlayınız:

 

var x:string;

begin

apppath:=extractfilepath(application.exename)+'';

adsoyad:=tstringlist.create;

tel:=tstringlist.create;

adres:=tstringlist.create;

x:=apppath+'adsoyad.txt'; //sizin kütük dosyanız ( yeni nesil )

if fileexists(x) then

   begin

   adsoyad.loadfromfile(x);//hafızaya yükle

   listbox1.loadfromfile(x);//listboxa yükle

   end;

x:=apppath+'tel.txt';//sizin kütük dosyanız ( yeni nesil )

if fileexists(x) then

   begin

   tel.loadfromfile(x);//hafızaya yükle

   listbox2.loadfromfile(x);//listboxa yükle

   end;

x:=apppath+'adres.txt';//sizin kütük dosyanız ( yeni nesil )

if fileexists(x) then

   begin

   adres.loadfromfile(x);//hafızaya yükle

   listbox3.loadfromfile(x);//listboxa yükle

   end;

//final

end;

 

"Ekle" isminde bir button yerleştiriniz. ( kaydet butonu olacak )

butonun click olayına aşağıdaki kodu yazınız:

 

begin

adsoyad.add(edit1.text);listbox1.items.assign(adsoyad);

tel.add(edit2.text);listbox2.items.assign(tel);

adress.add(edit3.text);listbox3.items.assign(adress);

showmessage('kaydınız yapılmıştır');

//final

end;

 

"Sil" isminde bir button yerleştiriniz ( silme butonu olacak )

butonun click olayına aşağıdaki kodu yazınız:

 

var m:integer;

begin

m:=listbox1.itemindex;//listboxdaki seçili olan satır numarası

if m<>-1 then

   begin

   adsoyad.delete(m);listbox1.items.assign(adsoyad);

   tel.delete(m);listbox2.items.assign(tel);

   adress.delete(m);listbox3.items.assign(adress);

   showmessage('kayıt silinmiştir');

   end;

//final

end;

 

"arama" isminde bir button yerleştiriniz ( arama butonu olacak )

butonun click olayına aşağıdaki kodu yazınız:

 

var aranan:string;sonuc:integer;

begin

aranan:=edit4.text;//arama yapılacak isim edit4 text içinde yazan olsun

                   //edit4 nesnesi de ekleyiniz formunuza

 

//isim kolonunda arama yapılacak ise

sonuc:=adsoyad.indexof(aranan);//hangi kolonda arama yapacak iseniz onu kodlayınız

if sonuc<>-1 then //aranan kayıt var ise ( kendisi çok hızlı arar burada )

                  //büyük küçük harfe duyarlıdır. extra olarak kodu süslemeniz gerekmektedir.

    begin

    showmessage('aradığınız kayıt bulunmuştur');

    showmessage(inttostr(sonuc+1)+'.sirada bulunmaktadir');

    listbox1.itemindex:=sonuc;//listboxları hizala

    listbox2.itemindex:=sonuc;

    listbox3.itemindex:=sonuc;

    edit1.text:=adsoyad.strings[sonuc];//ilgili satırdaki elemanı al

    edit2.text:=tel.strings[sonuc];//ilgili satırdaki elemanı al

    edit3.text:=adres.strings[sonuc];//ilgili satırdaki elemanı al

    end;

//final

end;

 

 

listbox1 onclik olayına şunu yazınız, ve diğer listboxları da düzenleyiniz.

 

begin

listbox2.itemindex:=listbox1.itemindex;

listbox3.itemindex:=listbox1.itemindex;

listbox2.topindex:=listbox1.topindex;

listbox3.topindex:=listbox1.topindex;

edit1.text:=adsoyad.strings[listbox1.itemindex];

edit2.text:=tel.strings[listbox1.itemindex];

edit3.text:=adres.strings[listbox1.itemindex];

end;

 

listbox2 onclick olayına şunu yazınız:

 

begin

listbox1.itemindex:=listbox2.itemindex;

listbox3.itemindex:=listbox2.itemindex;

listbox1.topindex:=listbox2.topindex;

listbox3.topindex:=listbox2.topindex;

edit1.text:=adsoyad.strings[listbox2.itemindex];

edit2.text:=tel.strings[listbox2.itemindex];

edit3.text:=adres.strings[listbox2.itemindex];

end;

 

diğer listboxları da çapraz olarak itemindex ve topindex hizalamalarını ayarlarınız.

 

formun onclose olayına aşağıdaki kodu yazınız:

 

var x:string;

begin

//bilgileri kütüğe yaz

x:=apppath+'adsoyad.txt';adsoyad.savetofile(x);

x:=apppath+'tel.txt';tel.savetofile(x);

x:=apppath+'adres.txt';adres.savetofile(x);

end;

 

************

SONUÇ:

************

 

en temel ve iskelet yapısı ile veri tabanı kullanmaksızın,

 

- kayıt ekleme

- kayıt silme

- kayıt arama

- kayıtların listboxlarda listelenmesi

- listboxlara tıklanıldığında aynı hizlara getirilmesini

- listboxlara tıklanıldığında edit içeriklerinde bilgilerin görüntülenmesini

 

öğrenmiş olduk...

 

umarım faydam olmuştur,

 

yukarıda yazdığım şablon kodu geliştirebilirsiniz, bu size kalmış......

 

çalışmalarınızda başarılar diliyorum,

kodlama unsurlarında diğer

olası sorularınızı da cevaplamak isterim...

 

son tavsiyem,

bir an önce veritabanı programcılığına giriş yapmanızda fayda vardır..

 

kolay gelsin...

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "acil destek pls"

"

Acil destek pls.......... 24 Kasım 2005 13:05

 

forma 5 adet imege yerleştirilecek, elimiizde bulunan 10 resimden rast gele

5 tenesini image bileşenlerine yerleştirecek programı nasıl

yapacagım kouşunda bana detaylı bilgi verirmisiniz kodları

nasıl yazmam gerekir

 

greenplover

"

 

"

24 Kasım 2005 22:19

 

merhaba,

 

anladığım kadarı ile ;

 

kendinize random bir sayı ürettirin.

bu işlemi 5 defa yaptırın.

 

çıkan rakamlara göre

 

image1.loadfromfile('1.bmp');

image2.loadfromfile('3.bmp');

image3.loadfromfile('7.bmp');

image4.loadfromfile('10.bmp');

image5.loadfromfile('5.bmp');

 

umarım anladığım doğrudur.

 

kolay gelsin.

 

hasgüç

"

 

"

 24 Kasım 2005 15:47

merak ettim peki nasıl olacak..

Yani randomla üretilen sayılar nasıl her seferde

tekrar üretilip resimlere aktarılacak..Kodlarını tamamen nasıl acaba

 

bydomur

"

 

 

cevap:

 

bydomur arkadaşım,

merak etmişsiniz nasıl olacak diye,

 

"hasguc" arkadaşımız gereken mantığı size açıklamış gayet güzel bir biçimde.

 

kodları tamamen nasıl yazabileceğinizi bilemiyorsanız,

size kod anlatmamın gereksiz olacağını düşünüyorum...

 

balık tutmayı öğrenmeniz, daha yararınıza olacaktır......

 

merakınızın karşılığı "acizlik" olmasın...

 

kodlama ve mantık yeteneğinizi geliştiriniz...

 

sana ( istemeyerek ) kendimce hayali programı anlatmaya çalışacağım:

 

amaç: "10 tane resim içersinden 5 tanesini rastgele seçip, bu 5 tane

seçilen resmi 5 tane image nesnesine yüklemek"

( bu şekilde anladım.... )

 

forma 1 adet button, 5 adet image yerleştir.

projeni ilgili bir klasöre kaydet.

kaydettiğin klasöre de 10 adet jpeg resim koy. ( hangi resimler ise artık )

jpeg resimlerin adını da kolaylık olsun diye 1.jpg, 2.jpg, 3.jpg.. olarak

değiştir.

 

button1 onclick olayına aşağıdaki kodu yaz:

( teorik olarak yazıyorum, çalışması gerek. yazım hatalarım olabilir, düzeltin)

 

var apppath,x:string;m,r:integer;

begin

apppath:=extractfilepath(application.exename);

randomize;

for m:=1 to 5 do

    begin

    r:=trunc(random(10)+1);//sağlam olsun diye bu şekilde yazdım

    x:=apppath+''+inttostr(r)+'.jpg';

    if fileexists(x) then

       begin

       case m of

       1:image1.picture.loadfromfile(x);

       2:image2.picture.loadfromfile(x);

       3:image3.picture.loadfromfile(x);

       4:image4.picture.loadfromfile(x);

       5:image5.picture.loadfromfile(x);

       end;//case

       end;//if

    end;//for

//final

end;

 

butona her tıkladığında 10 adet resim içersinden ( klasördeki )

5 tanesini image nesnelerine yerleştirecektir....

 

kolay gelsin................

 

( kodlama ve kurgu yapını biraz daha geliştirmelisin greenplover )

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "acil destek pls"

"

Acil destek pls.......... 24 Kasım 2005 13:05

 

forma 5 adet imege yerleştirilecek, elimiizde bulunan 10 resimden rast gele

5 tenesini image bileşenlerine yerleştirecek programı nasıl

yapacagım kouşunda bana detaylı bilgi verirmisiniz kodları

nasıl yazmam gerekir

 

greenplover

"

 

"

24 Kasım 2005 22:19

 

merhaba,

 

anladığım kadarı ile ;

 

kendinize random bir sayı ürettirin.

bu işlemi 5 defa yaptırın.

 

çıkan rakamlara göre

 

image1.loadfromfile('1.bmp');

image2.loadfromfile('3.bmp');

image3.loadfromfile('7.bmp');

image4.loadfromfile('10.bmp');

image5.loadfromfile('5.bmp');

 

umarım anladığım doğrudur.

 

kolay gelsin.

 

hasgüç

"

 

"

 24 Kasım 2005 15:47

merak ettim peki nasıl olacak..

Yani randomla üretilen sayılar nasıl her seferde

tekrar üretilip resimlere aktarılacak..Kodlarını tamamen nasıl acaba

 

bydomur

"

 

 

cevap:

 

bydomur arkadaşım,

merak etmişsiniz nasıl olacak diye,

 

"hasguc" arkadaşımız gereken mantığı size açıklamış gayet güzel bir biçimde.

 

kodları tamamen nasıl yazabileceğinizi bilemiyorsanız,

size kod anlatmamın gereksiz olacağını düşünüyorum...

 

balık tutmayı öğrenmeniz, daha yararınıza olacaktır......

 

merakınızın karşılığı "acizlik" olmasın...

 

kodlama ve mantık yeteneğinizi geliştiriniz...

 

sana ( istemeyerek ) kendimce hayali programı anlatmaya çalışacağım:

 

amaç: "10 tane resim içersinden 5 tanesini rastgele seçip, bu 5 tane

seçilen resmi 5 tane image nesnesine yüklemek"

( bu şekilde anladım.... )

 

forma 1 adet button, 5 adet image yerleştir.

projeni ilgili bir klasöre kaydet.

kaydettiğin klasöre de 10 adet jpeg resim koy. ( hangi resimler ise artık )

jpeg resimlerin adını da kolaylık olsun diye 1.jpg, 2.jpg, 3.jpg.. olarak

değiştir.

 

button1 onclick olayına aşağıdaki kodu yaz:

( teorik olarak yazıyorum, çalışması gerek. yazım hatalarım olabilir, düzeltin)

 

var apppath,x:string;m,r:integer;

begin

apppath:=extractfilepath(application.exename);

randomize;

for m:=1 to 5 do

    begin

    r:=trunc(random(10)+1);//sağlam olsun diye bu şekilde yazdım

    x:=apppath+''+inttostr(r)+'.jpg';

    if fileexists(x) then

       begin

       case m of

       1:image1.picture.loadfromfile(x);

       2:image2.picture.loadfromfile(x);

       3:image3.picture.loadfromfile(x);

       4:image4.picture.loadfromfile(x);

       5:image5.picture.loadfromfile(x);

       end;//case

       end;//if

    end;//for

//final

end;

 

butona her tıkladığında 10 adet resim içersinden ( klasördeki )

5 tanesini image nesnelerine yerleştirecektir....

 

kolay gelsin................

 

( kodlama ve kurgu yapını biraz daha geliştirmelisin greenplover )

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "master-detail mantığı"

"

delphi ögrenmek istiyorum ama..... 24 Kasım 2005 12:56

master-detail uygulamasının adımlarını anlatırmısınız

bu ögrenmek istedigim önemli bir bölüm

 

greenplover

"

 

cevap:

 

master-detail uygulamasını, jpeglerle anlatmam icab ediyor..

bunu şu anda yerine getiremeyeceğim, kabaca sözel olarak bahsedeceğim.

 

 

soru: Master yapı ne demektir ?

 

cevap:

Tek başına verileri içinde barındıran, ve

bu kayıtlara ilişkin başka detay bilgilerin saklanacağı

yapıya "master yapı" denir.

 

soru: Detail yapı ne demektir ?

 

cevap:

master bir yapıya ilişkin kayıtların,

alt bilgilerini tutan yapıya "detail yapı" denir.

 

soru: master-detail kabaca ne anlama gelir ?

 

cevap:

"ana-ayrıntı" anlamına gelir,

ana kayıt kümesi içerisinde, her kaydın kendisine göre başka

ayrıntı kayıtları tutuluyor demektir.

 

soru: master-detail yapısına uygulama basitçe örneği verir misiniz ?

 

cevap:

 

master yapısına örnek:

-SIRANO

-ADISOYADI

-ADRESI

 

detail yapısına örnek:

-SIRANO

-ALDIGIURUN

-URUNFIYATI

-TAKSITSAYISI

-...

 

anlamı şudur,

 

master yapısında bulunan veri tabanına müşteriler 1 defaya mahsus girilir.

detail yapıda da hangi müşteri hangi ürünleri almış verisi girilir.

 

dolayısıyla, kabaca "stok-takip-hareket" ticari program şablonu gibi geliştirilebilir.

 

burada dikkat edilecek husus şudur,

 

master ve detail yapıda "ortak bir field" alanı olması gerekmektedir.

bu iki saha birbiri ile ilişkilendirilir, ve master-detail uygulaması tasarlanır.

 

veriler şu şekilde girilmiş olsun,

 

*** MASTER YAPI ***

sırano: 1

adısoyadı: emin yılmaz

adresi: istanbul

 

sırano: 2

adısoyadı: arzu yılmaz

adresi: istanbul

 

*** DETAIL YAPI ***

sırano: 1

aldıgıurun: buzdolabı

urunfiyatı: 100000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: çamaşır makinası

urunfiyatı: 200000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: tost makinası

urunfiyatı: 500000

taksitsayisi: 5

 

sırano: 2

aldıgıurun: robot

urunfiyatı: 100000

taksitsayisi: 5

 

sırano: 2

aldıgıurun: leğen ( başka alacak bişey bulamamış aklıma bişey gelmedi )

urunfiyatı: 200000

taksitsayisi: 5

 

 

yukarıdaki şekilde kayıtlar girildiğinde şu sonuçları elde edersin,

 

"1 numaralı müşteri (eminyılmaz) hangi eşyaları satın almış ?" diye sorduğunda,

 

sana aşağıdaki listeyi verir,

 

sırano: 1

aldıgıurun: buzdolabı

urunfiyatı: 100000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: çamaşır makinası

urunfiyatı: 200000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: tost makinası

urunfiyatı: 500000

taksitsayisi: 5

 

 

"1 numaralı müşterinin kaydını master kütükten sil" dediğinde,

 

1 numaralı (eminyılmaz) adlı müşterinin tüm detaildeki sırano=1 olan

kayıtları da beraberinde silinir.

 

bu yapıyı kağıt üzerine gerekirse yazıp çizin ve ortak field yapısını

neden kullandığımızı (sirano) iyice anlayın....

 

soru: paradox ve access de bu master-detail yapıyı kullanabilir miyim ?

 

cevap:

paradox yapısında master-detail yapısını otomatik olarak kullanabilirsin.

ilk kullanışta biraz karmaşık gelebilir, mantığınız tam olarak oturduğunda,

hızlıca bağlantılar kurabilirsiniz. ilk tecrübeniz biraz zahmetli olabilir...

 

access yapısında master-detail yapısını otomatik olarak program içerisinden

kullanamazsınız. access kendi yapısı içerisinde ilişkilendirmeye dayalı

kayıtları silebilmektedir, ancak kodlama ile buna müsade etmemektedir.

 

access deki bu yapıyı kendiniz kodlama yardımı ile çözümleyebilirsiniz.

 

not: access veri tabanında master-detail uygulamalarında, ben kodlama ile,

ilişkilendirilmiş kayıtları siliyorum vs vs.. işimi görüyor..

 

kabaca genel hatları ile mantık budur.

diğer veri tabanlarında da "ilişkilendirme" uygulamaları yapılabilir...

 

bu anlattığım, belki şu anda bir kulağınızdan girip diğer kulağınızdan

çıkıyor olabilir, veya hiç bir şey anlamamış olabilir iseniz,

tavsiyem size, bir delphi kitabı alıp bire-bir uygulamalı olarak "master-detail"

uygulamaları denemesi yapmanız olacaktır.

 

aksi halde çok kızarım...

 

gerekçe: "matematik temeli olmadan, bana integral-türev anlat hadi" misali....

 

çalışmalarınızda başarılar diliyorum...

 

faydamız olmuş ise ne mutlu bize...

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "master-detail mantığı"

"

delphi ögrenmek istiyorum ama..... 24 Kasım 2005 12:56

master-detail uygulamasının adımlarını anlatırmısınız

bu ögrenmek istedigim önemli bir bölüm

 

greenplover

"

 

cevap:

 

master-detail uygulamasını, jpeglerle anlatmam icab ediyor..

bunu şu anda yerine getiremeyeceğim, kabaca sözel olarak bahsedeceğim.

 

 

soru: Master yapı ne demektir ?

 

cevap:

Tek başına verileri içinde barındıran, ve

bu kayıtlara ilişkin başka detay bilgilerin saklanacağı

yapıya "master yapı" denir.

 

soru: Detail yapı ne demektir ?

 

cevap:

master bir yapıya ilişkin kayıtların,

alt bilgilerini tutan yapıya "detail yapı" denir.

 

soru: master-detail kabaca ne anlama gelir ?

 

cevap:

"ana-ayrıntı" anlamına gelir,

ana kayıt kümesi içerisinde, her kaydın kendisine göre başka

ayrıntı kayıtları tutuluyor demektir.

 

soru: master-detail yapısına uygulama basitçe örneği verir misiniz ?

 

cevap:

 

master yapısına örnek:

-SIRANO

-ADISOYADI

-ADRESI

 

detail yapısına örnek:

-SIRANO

-ALDIGIURUN

-URUNFIYATI

-TAKSITSAYISI

-...

 

anlamı şudur,

 

master yapısında bulunan veri tabanına müşteriler 1 defaya mahsus girilir.

detail yapıda da hangi müşteri hangi ürünleri almış verisi girilir.

 

dolayısıyla, kabaca "stok-takip-hareket" ticari program şablonu gibi geliştirilebilir.

 

burada dikkat edilecek husus şudur,

 

master ve detail yapıda "ortak bir field" alanı olması gerekmektedir.

bu iki saha birbiri ile ilişkilendirilir, ve master-detail uygulaması tasarlanır.

 

veriler şu şekilde girilmiş olsun,

 

*** MASTER YAPI ***

sırano: 1

adısoyadı: emin yılmaz

adresi: istanbul

 

sırano: 2

adısoyadı: arzu yılmaz

adresi: istanbul

 

*** DETAIL YAPI ***

sırano: 1

aldıgıurun: buzdolabı

urunfiyatı: 100000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: çamaşır makinası

urunfiyatı: 200000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: tost makinası

urunfiyatı: 500000

taksitsayisi: 5

 

sırano: 2

aldıgıurun: robot

urunfiyatı: 100000

taksitsayisi: 5

 

sırano: 2

aldıgıurun: leğen ( başka alacak bişey bulamamış aklıma bişey gelmedi )

urunfiyatı: 200000

taksitsayisi: 5

 

 

yukarıdaki şekilde kayıtlar girildiğinde şu sonuçları elde edersin,

 

"1 numaralı müşteri (eminyılmaz) hangi eşyaları satın almış ?" diye sorduğunda,

 

sana aşağıdaki listeyi verir,

 

sırano: 1

aldıgıurun: buzdolabı

urunfiyatı: 100000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: çamaşır makinası

urunfiyatı: 200000

taksitsayisi: 5

 

sırano: 1

aldıgıurun: tost makinası

urunfiyatı: 500000

taksitsayisi: 5

 

 

"1 numaralı müşterinin kaydını master kütükten sil" dediğinde,

 

1 numaralı (eminyılmaz) adlı müşterinin tüm detaildeki sırano=1 olan

kayıtları da beraberinde silinir.

 

bu yapıyı kağıt üzerine gerekirse yazıp çizin ve ortak field yapısını

neden kullandığımızı (sirano) iyice anlayın....

 

soru: paradox ve access de bu master-detail yapıyı kullanabilir miyim ?

 

cevap:

paradox yapısında master-detail yapısını otomatik olarak kullanabilirsin.

ilk kullanışta biraz karmaşık gelebilir, mantığınız tam olarak oturduğunda,

hızlıca bağlantılar kurabilirsiniz. ilk tecrübeniz biraz zahmetli olabilir...

 

access yapısında master-detail yapısını otomatik olarak program içerisinden

kullanamazsınız. access kendi yapısı içerisinde ilişkilendirmeye dayalı

kayıtları silebilmektedir, ancak kodlama ile buna müsade etmemektedir.

 

access deki bu yapıyı kendiniz kodlama yardımı ile çözümleyebilirsiniz.

 

not: access veri tabanında master-detail uygulamalarında, ben kodlama ile,

ilişkilendirilmiş kayıtları siliyorum vs vs.. işimi görüyor..

 

kabaca genel hatları ile mantık budur.

diğer veri tabanlarında da "ilişkilendirme" uygulamaları yapılabilir...

 

bu anlattığım, belki şu anda bir kulağınızdan girip diğer kulağınızdan

çıkıyor olabilir, veya hiç bir şey anlamamış olabilir iseniz,

tavsiyem size, bir delphi kitabı alıp bire-bir uygulamalı olarak "master-detail"

uygulamaları denemesi yapmanız olacaktır.

 

aksi halde çok kızarım...

 

gerekçe: "matematik temeli olmadan, bana integral-türev anlat hadi" misali....

 

çalışmalarınızda başarılar diliyorum...

 

faydamız olmuş ise ne mutlu bize...

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

Cevap-bi delphi projesi veya araştırma konusu arıyorum..

selam.

buraya kod ekleyen herkes senin,benim ve diğer kodbank üyelerinin

gerektiğinde yardım alabilmeleri için çalışıyor ama kimse senin yerine düşünemez!

kodbankta listeyi aşağıya doğru çek tüm kodları incele A'dan Z'ye..

kimse burada işe yaramayan bir şeyleri gelip yazmaz..

senin işine yarayacak en iyi şey senin ihtiyacını gideren şeydir?

nasıl bir programa ihtiyacın var ya da sence insanları nasıl bir programa

ihtiyaçları var.. bunu düşün ve karar verdiğinde bize "nasıl yapacağım" diye sor

ozaman şimdi olduğundan daha fazla yardımcı olabiliriz.

 

Çalışmalarında başarılar dilerim.

Saygılarımla

 

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

 

Cevap-bi delphi projesi veya araştırma konusu arıyorum..

selam.

buraya kod ekleyen herkes senin,benim ve diğer kodbank üyelerinin

gerektiğinde yardım alabilmeleri için çalışıyor ama kimse senin yerine düşünemez!

kodbankta listeyi aşağıya doğru çek tüm kodları incele A'dan Z'ye..

kimse burada işe yaramayan bir şeyleri gelip yazmaz..

senin işine yarayacak en iyi şey senin ihtiyacını gideren şeydir?

nasıl bir programa ihtiyacın var ya da sence insanları nasıl bir programa

ihtiyaçları var.. bunu düşün ve karar verdiğinde bize "nasıl yapacağım" diye sor

ozaman şimdi olduğundan daha fazla yardımcı olabiliriz.

 

Çalışmalarında başarılar dilerim.

Saygılarımla

 

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

 

bi delphi projesi veya araştırma konusu arıyorum..

merhabalar,

delphi dersim için bi küçük bi proje veya araştırma konusuna ihtiyacım var ve fazla sürem yok.yardımcı olabilecek var mı?

bu arada ben yeni delphi öğreniyorumok fazla bilgim yok.uzun uzun araştırmaya da vaktim yok.

işime yarayabilecek bişeyler arıyorum.

umarım birileri yardımcı olabilir.

iyi günler.

 

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

 

bi delphi projesi veya araştırma konusu arıyorum..

merhabalar,

delphi dersim için bi küçük bi proje veya araştırma konusuna ihtiyacım var ve fazla sürem yok.yardımcı olabilecek var mı?

bu arada ben yeni delphi öğreniyorumok fazla bilgim yok.uzun uzun araştırmaya da vaktim yok.

işime yarayabilecek bişeyler arıyorum.

umarım birileri yardımcı olabilir.

iyi günler.

 

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

 

IP HAKKINDA(Tüm bilgisayarlara aynı anda mesaj yollamak)

Internet Adresleri

 

Internet adresleri 32-bitlik sayılardır ve noktalarla ayrılmış 4 octet (ondalık sayı olarak) olarak gösterilirler. Örnek vermek gerekirse, 128.10.2.30 internet adresi 10000000 00001010 00000010 00011110 şeklinde 32-bit olarak gösterilir. Temel problem bu bilgisayar ağı adresinin hem bilgisayar ağını ve hem de belli bir bilgisayarı tek başına gösterebilmesidir.

 

 

A Sınıfı adresler: İlk byte 0 'la 126 arasında değişir. İlk byte ağ numarasıdır. Gerisi bilgisayarların adresini belirler. Bu tip adresleme, herbiri 16,777,216 bilgisayardan oluşan 126 ağın adreslenmesine izin verir.

 

B Sınıfı adresler: İlk byte 128 'le 191 arasında değişir. İlk iki byte ağ numarasıdır. Gerisi bilgisayar adresini belirler. Bu tip adresleme, herbiri 65,536 bilgisayardan oluşan 16,384 ağın adreslenmesine izin verir.

 

C Sınıfı adresler: İlk byte 192 ile 223 arasında değişir. İlk üç byte ağ numarasıdır. Gerisi bilgisayarların adresini belirler. Bu tip adresleme, herbiri 254 bilgisayardan oluşan 2,000,000 ağın adreslenmesine izin verir.

 

127 ile başlayan adresler Internet tarafından özel amaçlarla (localhost tanımı için) kullanılmaktadır.

 

223'ün üzerindeki adresler gelecekte kullanılmak üzere D-sınıfı ve E-sınıfı adresler olarak reserve edilmiş olarak tutulmaktadır.

 

********************************************************************

Özel Adresler

 

Internet adreslemesinde 0 ve 255'in özel bir kullanımı vardır.

 255 adresi genel duyuru "broadcast" amacı ile kullanılmaktadır. Bir ağ üzerindeki tüm istasyonların duymasını istediginiz bir mesaj genel duyuru "broadcast" mesajıdir.

  Duyuru mesajı genelde bir istasyon hangi istasyon ile konuşacağını bilemediği bir durumda kullanılan bir mesajlaşma yöntemidir.

  Örneğin 192.168.1.5 bilgisayarından UDP protokolünü kullanarak

  192.168.1.255 'e gönderirseniz IP adresi 192.168.1.0 dan 192.168.1.255 e kadar olan bütün bilgisayarlar

  gönderdiğiniz mesajı alacaklardır. Bunu basit bir UPD protokolünü kullanan mesajlaşma programı örneğiyle bile

  deniyebilirsiniz. BU ÇOK ÖNEMLİ. Böylece bir ağ yönetim programı yazabilirsiniz(int cafe programı gibi)

  DÜŞÜNÜN Bİ: Bir mesaj gönderiyorsunuz ve ağa ağlı tüm bilgisayarlara aynı anda mesajınız gidiyor.

  Terminale ana makinaya bağlan diyorsunuz...terminal ana makinaya bağlanıyor. Bunu terminalin adresini

  bilmeden yapıyorsunuz...Bu özelliği A sınıfı iplerde denedim çalışıyor.(Bu işlemi yerel bir ağ üzerinde denenmiştir.[Ethernet bağlantısı])

  SİZDE DENEYİN...

 

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

 

IP HAKKINDA(Tüm bilgisayarlara aynı anda mesaj yollamak)

Internet Adresleri

 

Internet adresleri 32-bitlik sayılardır ve noktalarla ayrılmış 4 octet (ondalık sayı olarak) olarak gösterilirler. Örnek vermek gerekirse, 128.10.2.30 internet adresi 10000000 00001010 00000010 00011110 şeklinde 32-bit olarak gösterilir. Temel problem bu bilgisayar ağı adresinin hem bilgisayar ağını ve hem de belli bir bilgisayarı tek başına gösterebilmesidir.

 

 

A Sınıfı adresler: İlk byte 0 'la 126 arasında değişir. İlk byte ağ numarasıdır. Gerisi bilgisayarların adresini belirler. Bu tip adresleme, herbiri 16,777,216 bilgisayardan oluşan 126 ağın adreslenmesine izin verir.

 

B Sınıfı adresler: İlk byte 128 'le 191 arasında değişir. İlk iki byte ağ numarasıdır. Gerisi bilgisayar adresini belirler. Bu tip adresleme, herbiri 65,536 bilgisayardan oluşan 16,384 ağın adreslenmesine izin verir.

 

C Sınıfı adresler: İlk byte 192 ile 223 arasında değişir. İlk üç byte ağ numarasıdır. Gerisi bilgisayarların adresini belirler. Bu tip adresleme, herbiri 254 bilgisayardan oluşan 2,000,000 ağın adreslenmesine izin verir.

 

127 ile başlayan adresler Internet tarafından özel amaçlarla (localhost tanımı için) kullanılmaktadır.

 

223'ün üzerindeki adresler gelecekte kullanılmak üzere D-sınıfı ve E-sınıfı adresler olarak reserve edilmiş olarak tutulmaktadır.

 

********************************************************************

Özel Adresler

 

Internet adreslemesinde 0 ve 255'in özel bir kullanımı vardır.

 255 adresi genel duyuru "broadcast" amacı ile kullanılmaktadır. Bir ağ üzerindeki tüm istasyonların duymasını istediginiz bir mesaj genel duyuru "broadcast" mesajıdir.

  Duyuru mesajı genelde bir istasyon hangi istasyon ile konuşacağını bilemediği bir durumda kullanılan bir mesajlaşma yöntemidir.

  Örneğin 192.168.1.5 bilgisayarından UDP protokolünü kullanarak

  192.168.1.255 'e gönderirseniz IP adresi 192.168.1.0 dan 192.168.1.255 e kadar olan bütün bilgisayarlar

  gönderdiğiniz mesajı alacaklardır. Bunu basit bir UPD protokolünü kullanan mesajlaşma programı örneğiyle bile

  deniyebilirsiniz. BU ÇOK ÖNEMLİ. Böylece bir ağ yönetim programı yazabilirsiniz(int cafe programı gibi)

  DÜŞÜNÜN Bİ: Bir mesaj gönderiyorsunuz ve ağa ağlı tüm bilgisayarlara aynı anda mesajınız gidiyor.

  Terminale ana makinaya bağlan diyorsunuz...terminal ana makinaya bağlanıyor. Bunu terminalin adresini

  bilmeden yapıyorsunuz...Bu özelliği A sınıfı iplerde denedim çalışıyor.(Bu işlemi yerel bir ağ üzerinde denenmiştir.[Ethernet bağlantısı])

  SİZDE DENEYİN...

 

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

 

Registry'den Okuma ve Binary Yazma

{Registry'e yazdırma ve okuma ile ilgili bir proje üzerinde çalışırken

 Delphi 7.0 ile gelen Registry.pas Unit'inin yeterli olmadığını,bütün veri

 türlerini desteklemediğini gördüm.(Desteklenenler  REG_SZ (rdString),REG_EXPAND_SZ

 (rdExpandString), REG_DWORD (rdInteger) ve kısmen REG_BINARY (rdBinary))

 Maalesef Binary veri okutma üzerinde 2 gün uğraşmak zorunda kaldım.. Unit Registry

 Nümerik kaydedilen değerleri okuyor, KodBank'taki diğer  bütün örnekler ise tüm registry tiplerini okuyup yazdığını iddia edenler dahil, spesifik olarak ya Nümerik kaydedilen değerleri okuyor, ya String kaydedilen değerleri okuyor en akıllıca çözümleyenler ise  Byte dizisi olarak okutuyor ama o verileri de işlemiyordu(İşlenemez değil tabii ki)...

 

 Projeye devam edebilmek için mecburen aşağıdaki ---OkuReg---  fonksiyonunu ve ona bağlı olarak

 ---YazRegBinary--- fonksiyonunu yazdım, tam olarak yeterli olmadığının farkındayım, fonksiyon özellikle

 REG_RESOURCE_LIST ve REG_FULL_RESOURCE_DESCRIPTOR türü verileri okumakta yetersiz ayrıca Byte

 dizisi olarak kaydedilen Binary tip verileri okumak için de geliştirilmesi lazım (Çözüm belli ama yoruldum)...

 

 Ancak yine de İhtiyacım olan Veri tipini tam olarak belirleme, veri uzunluğunu bulma

 string ve Integer(REG_DWORD) kayıtları okuma, String ve nümerik kaydedilmiş Binary verileri

 okuma işlemlerini tek bir fonksiyonda topladım...İlgilenenlere  }

 

// Forma   2 Edit,1 Listbox,4 Button,2 stringgrid,1 checkbox koyun

//---Fonksiyonun kullanılışını göstermek için basit bir unit-------------------------------------

 

unit Unit1;

 

interface

 

uses

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

  Dialogs, StdCtrls, Grids,Registry;

 

// Regdegerlerini tanıtmalıyız......

type

  RegDegerleri = record

  DataTip_Str: String;  //Verinin türünü String olarak verir Ör: 'REG_DWORD'

  DataTip_Int:Integer;  //Verinin türünü Integer olarak verir 1:REG_SZ 2:REG_EXPAND_SZ vs. fonksiyondan anlaşılıyor

  Veri_Int:Integer;     //Verinin integer olarak değerini verir, String olarak kaydedilen veriler için -1 olarak dönecektir.

  Veri_Str:String;          //Verinin string olarak değerini verir, Nümerik kaydedilenler için IntToStr hali döner..

  Uzunluk: Integer;         //Verinin Registry'deki uzunluğunun kaç byte olduğunu verir

end;

 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    StringGrid1: TStringGrid;

    Button1: TButton;

    CheckBox1: TCheckBox;

    Edit2: TEdit;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    ListBox1: TListBox;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

function OkuReg(const xReg:TRegistry; RegDegerAd: string):RegDegerleri;

function YazRegBinary(const xReg:TRegistry; RegDegerAd, Veri_Str: string; StrVeyaInt:Byte):Boolean;

 

var

  Form1: TForm1;

  Reg1:TRegistry;

 

implementation

 

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var i:byte;

const

  xstr:array [0..5] of string=('Değer Ad','Veri Türü','Veri Str','Veri Int','Veri Türü Int','Uzunluk');

begin

  Reg1:=TRegistry.Create;

  Reg1.RootKey:=HKEY_CURRENT_USER;

  Reg1.OpenKey('AnahtarDeneme',True);  //İşiniz bittiğinde silerseniz iyi olur

  for i:=0 to 5 do StringGrid1.cells[i+1,0]:=xstr[i];

  ListBox1.Visible:=False;

  Button4.Caption:='Reg Değerleri Goster';

end;

//...........................................................................

procedure TForm1.Button1Click(Sender: TObject);    //Edit2'yi Binary yazdır

// Checkbox seçili ise nümerik değilse string olarak yazdır.....

begin

if CheckBox1.Checked then

   if not YazRegBinary(reg1,Edit1.Text,edit2.Text,1) then ShowMessage('Registere yazma işlemi başarısız...'

        +chr(10)+ 'Girilen verininin nümerik bir değer olduğundan emin olun')

 else else if not YazRegBinary(reg1,Edit1.Text,edit2.Text,0) then ShowMessage('Registere yazma işlemi başarısız...');

end;

//...........................................................................

procedure TForm1.Button2Click(Sender: TObject);  //Edit2'yi REG_SZ olarak yazdır

begin

  reg1.WriteString(edit1.Text, Edit2.Text);

end;

//...........................................................................

procedure TForm1.Button3Click(Sender: TObject);   //Edit2'yi REG_DWORD (Dword yani 16'lık veya 10'luk yazdır)

begin

  reg1.WriteInteger(edit1.Text,strtoint(Edit2.Text));

end;

//...........................................................................

// DenemeAnahtari içindeki tüm verileri Stringgride atiyoruz;

procedure TForm1.Button4Click(Sender: TObject);

var i:Byte;

  RegDeg:RegDegerleri;

begin

  reg1.GetValueNames(ListBox1.Items);

  if listbox1.Count>0 then

  for i:=0 to ListBox1.Count-1 do

  begin

  //Fonksiyonun kullanılışı

    StringGrid1.Cells[1,i+1]:=ListBox1.Items[i];

    StringGrid1.Cells[2,i+1]:=OkuReg(reg1,ListBox1.Items[i]).DataTip_Str;

    StringGrid1.Cells[3,i+1]:=OkuReg(reg1,ListBox1.Items[i]).Veri_Str;

    StringGrid1.Cells[4,i+1]:=inttostr(OkuReg(reg1,ListBox1.Items[i]).Veri_Int);

    StringGrid1.Cells[5,i+1]:=inttostr(OkuReg(reg1,ListBox1.Items[i]).DataTip_Int);

    StringGrid1.Cells[6,i+1]:=inttostr(OkuReg(reg1,ListBox1.Items[i]).Uzunluk);

  //veya

    regdeg:=OkuReg(reg1,ListBox1.Items[i]);

    StringGrid1.Cells[2,i+1]:=regdeg.DataTip_Str;

    StringGrid1.Cells[3,i+1]:=regdeg.Veri_Str;

 

  end;

end;

//--------------------------------------------------------------------

//--------------Veri Okuma Fonksiyonu---------------------------------

//--------------------------------------------------------------------

 

function OkuReg(const xReg:TRegistry; RegDegerAd: string):RegDegerleri;

//Code By S.KILIÇ

var

  xRegDeger:RegDegerleri;

  TipI,Uz,VeriInt:Integer;

  xDword:Dword;

  TipS,Veri:String;

  xPoint:Pointer;

begin

Veri:='';

if RegQueryValueEx(xReg.CurrentKey, PChar(RegDegerAd), nil, @TipI, nil,@Uz) = ERROR_SUCCESS then

begin //if1

  case TipI of //case 1

    0: TipS:='REG_NONE';

    1: TipS:='REG_SZ';

    2: TipS:='REG_EXPAND_SZ';

    3: TipS:='REG_BINARY';

    4: TipS:='REG_DWORD';

    5: TipS:='REG_DWORD_LITTLE_ENDIAN';

    6: TipS:='REG_LINK';

    7: TipS:='REG_MULTI_SZ';

    8: TipS:='REG_RESOURCE_LIST';

    9: TipS:='REG_FULL_RESOURCE_DESCRIPTOR';

    10: TipS:='REG_RESOURCE_REQUIREMENTS_LIST';

  end;  //case 1

  case TipI of  //case 2

    1,2,7:if Uz>0 then

            begin

              VeriInt:=-1;

              SetString(Veri,nil,Uz);

              if RegQueryValueEx(xReg.CurrentKey, PChar(RegDegerAd), nil, @TipI, PByte(Veri),@Uz)

                 = ERROR_SUCCESS then SetLength(Veri, StrLen(PChar(Veri)));

            end else Veri:='';

    3,8,9: Begin

         //String Değerleri Okutma

         GetMem(xPoint, Uz);

         if RegQueryValueEx(reg1.currentkey, pchar(Regdegerad), nil,  @TipI, xPoint,@Uz)

            = ERROR_SUCCESS then

          begin

            SetLength(Veri, Uz);

            Move(xPoint^, Veri[1], Uz);

            FreeMem(xPoint);

          end else FreeMem(xPoint);

          //Integer Değerleri Okutma

          try

            xDword:=0;

            if RegQueryValueEx(reg1.CurrentKey, PChar(Regdegerad), nil, @TipI, PByte(@xDword),@uz)

             =ERROR_SUCCESS then veriInt:=xDword else veriInt:=-1;

          except

            VeriInt:=-1;

          end;

          //Byte dizisini okutma, Geliştirilmeli

        end;

    4,5:Begin

        VeriInt:=xreg.ReadInteger(RegDegerAd);

        Veri:=inttostr(VeriInt);

      end;

 end;  //case 2

end else //if1

  begin

    TipS:='Bilinmeyen';

    TipI:=-1;

    Uz:=-1;

  end;

xRegDeger.Veri_Str:=Veri;

xRegDeger.Veri_Int:=VeriInt;

xRegDeger.DataTip_Str:=TipS;

xRegDeger.DataTip_Int:=TipI;

xRegDeger.Uzunluk:=Uz;

Result:=xRegDeger;

end;

 

//-----------------------------------------------------------------------------------------------------

//---Binary Yazdırma fonksiyonu------  StrVeyaInt=0 ise String kaydet , StrVeyaInt=1 ise nümerik kaydet

//-----------------------------------------------------------------------------------------------------

function YazRegBinary(const xReg:TRegistry; RegDegerAd, Veri_Str: string; StrVeyaInt:Byte):Boolean;

Var

 xInt:Integer;

Begin

  Result:=True;

  if StrVeyaInt=1 then //Nümerik olarak kaydedilecekse

  begin

    try xInt:= strtoint(Veri_Str); except Result:=False;  Exit; end;

    if RegSetValueEx(xreg.CurrentKey, PChar(RegDegerAd), 0, 3, @xInt , SizeOf(xInt))

       <>ERROR_SUCCESS then Result:=False;

  end  else

  if StrVeyaInt=0 then //String olarak kaydedilecekse

      if RegSetValueEx(xReg.CurrentKey, PChar(RegDegerAd), 0, 3, PChar(Veri_Str + #0), Length(Veri_Str))

       <>ERROR_SUCCESS then Result:=False else

  else Result:=False;

End;

 

 

end.

 

// Yorum ve soru için : swordtur@yahoo.com

// Unutmadan Derleyip exe halini çalıştırırsanız try except'lerden kurtulursunuz.....

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