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

Programı ftp den Güncelleme

Var

  xDosyaUzunluk : LongInt;

 

function FTPDosyaAl( IdFTP : TIdFTP; SrcDosya, DesDosya:TFileName; Ftp, RemoteDir, Login, Pass : String ):Boolean;

begin // Uses IdFTP, IdFTPCommon

  Result := False;

  IdFtp.Host     := Ftp;

  IdFtp.Username := Login;

  IdFtp.Password := Pass;

  IdFtp.Passive  := True;

  IdFtp.Connect;

  If IdFtp.Connected then

  begin

    IdFtp.ChangeDir(RemoteDir);

    // Gauge'de kullanmak için

    // Dosya Uzunluğunu grlobal bir değişkene atıyoruz...

    xDosyaUzunluk := IdFtp.Size( SrcDosya );

    Try

      IdFtp.TransferType := ftBinary; // Uses IdFTPCommon

      IdFtp.Get(SrcDosya, DesDosya, True);

    Finally

      Result := True;

    end;

    IdFtp.Quit;

  end;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

  If FileExists(ExtractFilePath(Application.Exename) +'Guncelle.BAT')

    then DeleteFile(ExtractFilePath(Application.Exename) +'Guncelle.BAT');

end;

 

procedure TForm1.Guncelle();

Var

  FTPAdres,

  KaynakDizin,

  Name,

  Pass,

  KaynakDosya,

  HedefDosya      : String;

begin

  // Bilerek bu örnek için 1 MB yer ayırarak açtığım FTP sunucu adresini veriyorum...

  FTPAdres    := 'emerkez.info';

  KaynakDizin := '/programlar';

  Name        := 'delphi';

  Pass        := 'arman';

  KaynakDosya := ExtractFileName(Application.Exename);

  HedefDosya  := ChangeFileExt( ExtractFilePath(Application.Exename) + KaynakDosya, '.BAK' );

  HedefDosya  := ChangeFileExt( ExtractFilePath(Application.Exename) + KaynakDosya, '.BAK' );

 

  If FileExists(HedefDosya) AND ( MessageDlg('Hedef Dosya Mevcut, üzerine yazılsın mı ? '+#13'('+HedefDosya+')', mtInformation, [mbYes, mbCancel], 0) = mrCancel )

   then EXIT

   else DeleteFile(HedefDosya);

 

  If FTPDosyaAl( IdFtp, KaynakDosya, HedefDosya, FTPAdres, KaynakDizin, Name, Pass )

    then MessageDlg('Dosya Başarıyla Alındı'+#13#13

                  + 'Şimdi program yeniden başlatılmak üzere kapatılacaktır....',

                  mtConfirmation, [mbOk], 0)

    else MessageDlg('Dosya Alınamadı'+#13'('+KaynakDosya+')', mtError, [mbok], 0);

 

  With TStringList.Create do begin

    Add('@Echo Off' );

    Add( Format('Copy %s %s', [ChangeFileExt(Application.ExeName,'.BAK'), Application.ExeName]) );

    Add('DEL '+ChangeFileExt(Application.ExeName,'.BAK'));

    Add( Application.ExeName );

    SaveToFile( ExtractFilePath(Application.Exename)+'Guncelle.BAT' );

    Free;

  end;

  Application.Terminate;

  WinExec( PChar( ExtractFilePath(Application.Exename)+'Guncelle.BAT'), SW_Hide );

end;

 

procedure TForm1.IdFtpStatus(ASender: TObject; const AStatus: TIdStatus;

  const AStatusText: string);

begin

  StatusBar1.SimpleText := AStatusText;

end;

 

procedure TForm1.IdFtpWork(ASender: TObject; AWorkMode: TWorkMode;

  AWorkCount: Integer);

begin

  Gauge1.Progress := AWorkCount;

  Application.ProcessMessages;

end;

 

procedure TForm1.IdFtpWorkBegin(ASender: TObject; AWorkMode: TWorkMode;

  AWorkCountMax: Integer);

begin

  Gauge1.MinValue := 0;

  Gauge1.MaxValue := xDosyaUzunluk;

  Gauge1.Progress := 0;

  Gauge1.Visible  := True;

end;

 

procedure TForm1.IdFtpWorkEnd(ASender: TObject; AWorkMode: TWorkMode);

begin

  Gauge1.Progress := 0;

  Gauge1.Visible  := False;

end;

 

 

Kullanımı ise şu kadar basit

procedure TForm1.Button1Click(Sender: TObject);

begin

  Guncelle();

end;

 

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

 

[SerTurk]-  Dil Karakter Tablosu

Dil Karakter Tablosu

ISO 8859, yani resmi adıyla ISO/IEC 8859, ISO ve IEC tarafından belirlenmiş olan,

bilgisayarlarda kullanılacak 8-bit karakterlerin standardıdır.

Bu standard numaranın arkasına gelen numara takıları, farklı karakter kümelerini

ifade eder. Şu anda 16 farklı alt küme standardı vardır:

 

Kolay bi Kaynak ama elimizin altında olmasında fayada var

 

 

Almanya (de) iso-8859-1, windows-1252

Arabistan (ar) iso-8859-6

Arnavutluk (sq) iso-8859-1, windows-1252

Bulgaristan (bg) iso-8859-5

Çek Cumh.(cs) iso-8859-2

Danimarka (da) iso-8859-1, windows-1252

Eskimo Dilleri iso-8859-10

Estonya (et) iso-8859-10

Finlandiya (fi) iso-8859-1, windows-1252

Fransa (fr) iso-8859-1, windows-1252

Hırvatistan (hr) iso-8859-2

Hollanda (nl) iso-8859-1, windows-1252

İngiltere (en) iso-8859-1, windows-1252

İrlanda (ga) iso-8859-1, windows-1252

İskoçya (gd) iso-8859-1, windows-1252

İspanya (es) iso-8859-1, windows-1252

İsveç (sv) iso-8859-1, windows-1252

İtalya (it) iso-8859-1, windows-1252

İzlanda (is) iso-8859-1, windows-1252

Japonya (ja) shift_jis, iso-2022-jp, euc-jp

Litvanya (lt) iso-8859-10

Macaristan (hu) iso-8859-2

Makedonya (mk) iso-8859-5

Malta (mt) iso-8859-3

Norveç (no) iso-8859-1, windows-1252

Polonya (pl) iso-8859-2

Portekiz (pt) iso-8859-1, windows-1252

Romanya (ro) iso-8859-2

Rusya (ru) koi-8-r, iso-8859-5

Sırbistan (sr) iso-8859-5

Slovakya (sk) iso-8859-2

Slovenya (sl) iso-8859-2

Türkiye (tr) iso-8859-9, windows-1254

Ukrayna (uk) iso-8859-5

Yunanistan (el) iso-8859-7

 

 

 

Turk Coder lar zekidir iyi çalışmalar.

http://turkcoder.blogcu.com/

sertiya@yahoo.com

 

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

 

URL Label ( Web Link Basit Örnek )

Delphide henüz yeniyim. Buradan bir çok kod örneği aldım. Emeği geçen herkese

teşekkürler. Fakat bu kadar emek verilmiş programa katkıda bulunmazsam vicdanım

rahat etmeyecek :)

 

Kodbankta bu konu ile ilgili bir araştırma yaptım fakat sürekli hatalarla karşılaştım.

Acemilik başa bela. Ben de kendi çözümümü kendim buldum. Tabi Kodbank yardımı ile.

Umarım işinize yarar.

 

Biraz daha kaliteli kodlar isteyen kişiye de bir gönderme yapayım. Forma saat koymayı

Kodbank sayesinde öğrendim. Bazen çok küçük ayrıntılar bile gerekebiliyor. Özellikle

acemilere.

////////////////////////////////////////////////////////////

//uses kısmına Shellapi ekliyoruz

//labelin font rengini kafanıza göre ayarlayın. Ben kırmızı yaptım.

procedure TForm1.Label1Click(Sender: TObject);

begin

Label1.Font.Color:=clBlue; //eğer link tıklanmışsa label rengi sürekli mavi kalsın.

ShellExecute(Handle,'open',PChar('http://www.websiteadresi.com'),nil,nil,SW_SHOWMAXIMIZED);

end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,   Y: Integer);

begin

Label1.Font.Color:=clBlue;//mouse labelin üstüne gelmişse labeli mavi yap.

end;

 

procedure TForm1.Label1MouseLeave(Sender: TObject);

begin

Label1.Font.Color:=clRed; //mouse labelin üstünden ayrılmışsa rengi tekrar kırmızı yap

end;

 

end.

 

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

 

kuru temizleme programı acil!!!!!!!

arkadaşlar acil kuru temizleme programı kodları lazım yardımlarınızı bekliyorum şimdiden teşekkürler.

 

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

 

Win XP Style (CLassic or Xp Style) Öğrenme...!

Herkese merhabalar,

 

Arkadaşlar biliyorsunuz program geliştirirken en verimli xp stili

Klasiktir bizler istisnalar hariç klasikte çalışırız fakat kullanıcı

XP stilini kullanıyorsa programın sagında solunda bozulmalar farkedebilirsiniz

 

nitekim ben günlerdir araştırıyordum nasıl çözeceğim diye buldum ve

sizinle paylaşayım dedim

 

function _IsThemeActive: Boolean;

// Returns True if the user uses XP style

const

  themelib = 'uxtheme.dll';

type

  TIsThemeActive = function: BOOL; stdcall;

var

  IsThemeActive: TIsThemeActive;

  huxtheme: HINST;

begin

  Result := False;

  // Check if XP or later Version

  if (Win32Platform  = VER_PLATFORM_WIN32_NT) and

     (((Win32MajorVersion = 5) and (Win32MinorVersion >= 1)) or

      (Win32MajorVersion > 5)) then

  begin

    huxtheme := LoadLibrary(themelib);

    if huxtheme <> 0 then

    begin

      try

        IsThemeActive := GetProcAddress(huxtheme, 'IsThemeActive');

        Result := IsThemeActive;

      finally

       if huxtheme > 0 then

          FreeLibrary(huxtheme);

      end;

    end;

  end;

end

 

// KULLANIMI

 

procedure TForm1.Button1(Sender: TObject);

begin

 if _IsThemeActive then

   ShowMessage('Klasik Sistem Devre Dışı, Theme Aktiftir');

   {form boyutlarını bundan sonra şarta göre genişletirsin }

end;

 

Saygılarımla

Kaan KARATAÇ

kaank@etsyazilim.com

 

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

 

Resim Upload İşlemi

//Hepimiz çekmişiszdir veritabanına resim yükleme işinden vs. sonuçta bu resimler

//yüksek yerler kaplıyor işte bunu veritabanını şişirmeden halledeğiz . Opendialog

//ile seçilen resmi exe mizin çalıştığı yerdeki resimler klasörüne yükletiyoruz

//daha sonra bunun adresinizi veritabanına yazdırıyoruz.

 

// Formumuza 1 adet image nesnesi 1 adet button 1 adette opendialog koyalım.

 

uses'e shellapi komutunu ekleyiniz.

 

function CopyFiles(const Source,Destination: String): Boolean;

var

  SHFileOpStruct : TSHFileOpStruct;

begin

  if FileExists(Source) then

  begin

    FillChar(SHFileOpStruct,SizeOf(TSHFileOpStruct),#0);

    with SHFileOpStruct do begin

      Wnd:=Application.Handle;

      wFunc:=FO_COPY;

      fFlags:=FOF_ALLOWUNDO;

      hNameMappings:=nil;

      pFrom:=PChar(Source+#0+#0);

      pTo:=PChar(Destination+#0+#0);

    end;

    Result := ShFileOperation(SHFileOpStruct) = 0;

  end else Result := False;

end;

 

 

//Uzantıların tutulacağı değişkenler belirleniyor.

 

type

TFileInfoRec = record

Surucu, Yol, Dosya, Uzanti: String;

end;

 

//Dosyanın Yolu, uzantısı ve dosya adı belirleniyor

 

function ParseFile(AFile: String): TFileInfoRec;

begin

      with Result do

       begin

       Surucu := ExtractFileDrive(AFile);

       Yol := '' + ExtractFilePath(ExtractRelativePath(Surucu, AFile));

       Dosya := ChangeFileExt(ExtractFileName(AFile),'');

       Uzanti := ExtractFileExt(AFile);

      end;

 

end;

 

//Programın Çalıştırıldığı Yol Belirleniyor. BÖlece c:bilgisayar Yazmayacağız

 

function GetAppPath: string;

begin

  Result := ExtractFilePath(Application.ExeName);

  if Result[Length(Result)] <> '' then

   Result := Result + '';

end;

 

 

//Resim Yükleme Butonuna Basılınca Secilen Dosyayı Resimler Klasörüne yükleyecek ve Yolunu vt ye kaydedecek.

//Seçilen Resim yüklenen yer ile aynı olmasın sorun verebilir.

 

procedure Tmusteriislemleri.AdvGlowButton7Click(Sender: TObject);

var

dosyaadi,uzantisi:string;

 

begin

image1.Stretch:=true;

 

opendialog1.Execute;

 

if opendialog1.FileName<>'' then

begin

 

if not CopyFiles(opendialog1.FileName, GetAppPath+'RESIMLER') then

showmessage('Kopyalama islemi basarisiz');

 

//Kopyalamadan Sonra Dosya adı ve uzantıyı alıyoruz. Vt ye yazdırırken ve image nesnesine yüklenirken gerekli..

dosyaadi:=ParseFile(opendialog1.FileName).Dosya;

uzantisi:=ParseFile(opendialog1.FileName).uzanti;

 

//Resmi İmage nesnemize yüklüyoruz.

image1.picture.loadfromfile(GetAppPath+'RESIMLER'+dosyaadi+uzantisi);

 

 

//Veritabanına Kayıt Yapıyoruz..

dm.musquery.Edit;

dm.musquery['mus_resim']:=GetAppPath+'RESIMLER'+dosyaadi+uzantisi;

dm.musquery.Post;

end;

 

end;

 

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

 

RES Kullanimi

Alintidir...

 

delphide exe dosyaya dosya gommek

Delphi ile oluşturduğumuz exe dosya içerisine dosya gömme işlemi yapabiliriz. Bu işlemi

(*.RES) resource kullanarak yapabiliriz.

Böylece API tarafından bizim oluşturduğumuz farklı yapıdaki dosya yapıları kullanılabilir.

Bu dosyaları kaynaklarından direkt olarak (API) çağırabilir.

Aşağıda farklı yapılardaki dosyalara erişimlere örnekler vereceğiz.

 

Öncelikle Resource dosya oluşturmakla başlayalım. (*.RC) tanımlı olarak oluşturduğumuz dosyaya

”RESOURCES.RC” adını verelim. Basit bir text dosyası olarak oluşturabiliriz.

Bu dosya için bir isim, veri tipi ve dosyanın adını içerir: *)

 

sample_bmp BITMAP sample.bmp

sample_ico ICON sample.ico

sample_cur CURSOR sample.cur

sample_ani ANICURSOR sample.ani

sample_jpg JPEG sample.jpg

sample_wav WAVE sample.wav

sample_txt TEXT sample.txt

 

 

 

Yukarıda tipleri belirtilmiş kaynak dosyalar ve tipleri veriliyor. Dosyalar öncelikel .RES içerisinde ifade edilip daha sonra (derleme) işlemi ile oluşturulan Delphi (exe) dosyasına aktarılıyor.

 

“.RCdosyamızı compile ederek .RES dosyasına çevirmemiz gerekiyor. Delphi, programımızı compile ederken bizim oluşturduğumuz .RES dosyasını okur ve ona göre (dosya gömme) embedding işlemi yapar. Resource compile işlemi için (brcc32.exe) dosyasını kullanacağız. Bu dosyayı “DelphiBinklasöründe bulabilirsiniz. Komut satırından kolay bir kullanımı var:

 

C:DELPHIBIN>brcc32 resources

 

C:DELPHIBIN>brcc32 resources

Borland Resource Compiler Version 5.40

Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.

 

 

Yaptığımız dosyayı projemize tanıtmak için aşağıdaki kodu kullanabiliriz:

 

{$R resources.res}

 

 

Programımıza resource dosyalarını tanıtmak için handle lardan faydalanabiliriz:

 

Image1.Picture.Bitmap.Handle :=

LoadBitmap(hInstance, 'sample_bmp');

Icon.Handle := LoadIcon(hInstance, 'sample_ico');

Screen.Cursors[1] := LoadCursor(hInstance, 'sample_cur');

 

 

Diğer kaynakları yonetmek bir miktar daha karmaşık. JPEG dosyalar ile başlayalım. Aşağıdaki function kaynak veriyi çağırmak için TResourceStream kullanıyor ve TJPEGImage nesnesine bağlanıyor.

 

function GetResourceAsJpeg(const resname: string): TJPEGImage;

var

Stream: TResourceStream;

begin

Stream := TResourceStream.Create(hInstance, ResName, 'JPEG');

try

Result := TJPEGImage.Create;

Result.LoadFromStream(Stream);

finally

Stream.Free;

end;

end;

 

 

 

Fonksyonun kullanımına örnek aşağıdaki kodu örnek verebiliriz :

 

var

Jpg: TJPEGImage;

begin

// ...

Jpg := GetResourceAsJpeg('sample_jpg');

Image2.Picture.Bitmap.Assign(Jpg);

Jpg.Free;

// ...

end;

 

WAV uzantılı dosyalarını hafızadan çağırmak için pointer kullanmak gerekiyor. Text dosyaları için ise kaynağı string olarak çağırmamız gerekiyor. Bu işlemler için API ile TResourceStream kullanacağız.

 

function GetResourceAsPointer(ResName: pchar; ResType: pchar;

out Size: longword): pointer;

var

InfoBlock: HRSRC;

GlobalMemoryBlock: HGLOBAL;

begin

InfoBlock := FindResource(hInstance, resname, restype);

if InfoBlock = 0 then

raise Exception.Create(SysErrorMessage(GetLastError));

size := SizeofResource(hInstance, InfoBlock);

if size = 0 then

raise Exception.Create(SysErrorMessage(GetLastError));

GlobalMemoryBlock := LoadResource(hInstance, InfoBlock);

if GlobalMemoryBlock = 0 then

raise Exception.Create(SysErrorMessage(GetLastError));

Result := LockResource(GlobalMemoryBlock);

if Result = nil then

raise Exception.Create(SysErrorMessage(GetLastError));

end;

 

function GetResourceAsString(ResName: pchar; ResType: pchar): string;

var

ResData: PChar;

ResSize: Longword;

begin

ResData := GetResourceAsPointer(resname, restype, ResSize);

SetString(Result, ResData, ResSize);

end;

 

Kullanımı da aşağıdaki gibi olur:

 

var

sample_wav: pointer;

 

procedure TForm1.FormCreate(Sender: TObject);

var

size: longword;

begin

...

sample_wav := GetResourceAsPointer('sample_wav', 'wave', size);

Memo1.Lines.Text := GetResourceAsString('sample_txt', 'text');

end;

 

 

Wave dosyalarını kullanırken MMSystemuniti içerisinden API destekli sndPlaySound fonksyonunu kullanırız. Örneğin:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

sndPlaySound(sample_wav, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);

end;

 

 

Kimi kaynakları memoryden çağırarak kullanamayız. Bu kaynaklara font bilgilerini ve animated cursor örneklerini verebiliriz. Tercih edilen yöntem bu kaynakların geçici dosya olareak kaydedilip bu kaynaktan kullanılmasıdır. Aşağıda bu konu ile ilgili örnek bulunmakta:

 

procedure SaveResourceAsFile(const ResName: string; ResType: pchar;

const FileName: string);

begin

with TResourceStream.Create(hInstance, ResName, ResType) do

try

SaveToFile(FileName);

finally

Free;

end;

end;

 

 

Temp (geçici) dosya oluşturulması örneği:

 

 

function SaveResourceAsTempFile(const ResName: string;

ResType: pchar): string;

begin

Result := CreateTempFile;

SaveResourceAsFile(ResName, ResType, Result);

end;

 

 

Aşağıdaki örnek kodda oluşturulan animated cursor geçici dosyası kullanılıyor ve siliniyor. Kayıt için tani temp dosyası oluşturmak için SaveResourceAsTempFile kullanılıyor. Ve bu dosyayı kullanmak için de LoadImage fonksyonu kullanılıyor sonunda da dosya siliniyor. Ayrıca oluşacak hataların da kontrolü sağlanıyor. Bu işlemi de GetLastError ile yapıyoruz.

 

function GetResourceAsAniCursor(const ResName: string): HCursor;

var

CursorFile: string;

begin

CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR');

Result := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,

0, LR_DEFAULTSIZE or LR_LOADFROMFILE);

DeleteFile(CursorFile);

if Result = 0 then

raise Exception.Create(SysErrorMessage(GetLastError));

end;

 

Örnek kullanım:

 

Screen.Cursors[1] := GetResourceAsAniCursor('sample_ani');

Form1.Cursor := 1;

 

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

 

FindFiles Prosedürü kullanımı

selam.

normalde procedurelerin nasıl kullanılacağını açıklamak mantıklı mı bilmem ama

madem soruldu o halde açıklayayım..

bir arkadaşımız bu procedurenin component olup olmadığını ve nasıl kullanılabileceğini

soruyor..

cevap : findfiles bir component değildir ama istenirse component halinde de kullanılabilir.

arkadaşım bu procedureyi kullanmak için procedureler in tanımlandığı kısma

procedure FindFiles(StartDir, FileMask: string);

eklemelisin.

sonra bit button un altına da

FindFiles('C:windows', '*.txt');

yazarsan kod çalışır. hepsi bu.

bu yazı çözüm olmazsa programlama@redusansoft.com adresini msn olarak ekle yardımcı olmaya

çalışırım. kolay gelsin.

 

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

 

Neoturke olan haksız tepkiler ve çözüm!

Merhabalar,

 

Arkadaşlar Kodbankın amacından saptığını ve mükerrer kayıtların çoğalmasından

herkes rahatsız yalnız kimse bir çözüm üretmiyor bunu hiç düşündünüz mü

 

yeni bir üye arkadaşım " x bey yardım edermisin,acil,yardım lütfen" başlığıyla

bize geliyor şimdi bir dakikalığına kendinizi onun yerine koyun. bu sistemin

asıl kullanım amacı "Hazır Kod" göndermek ama bir çok yönlü kullanılabilir

 

Sol tarafta gönderilen topicleri görüyoruz yardım isteklerinden, kodbanka yazı

yazmayn artık tepkilerine kadar bir çok kayıt var oysaki Delphiturk yöneticisi

sayın tansu, Sol üstte Tüm Kategorilerin İçine

 

1-Testler - Çözümler

2-Sorular - Cevaplar

3-Kitap Bilgileri

4-vs.

5-vs.

 

bunları ekleseydi bu kadar tartışma olacağını sanmıyordum çözüm üretmekse

şimdi amaç birşeyler yapmaya çalışıyorum benim gibide burda arkadaşların faydalanmasını

isteyen "neoturk" adlı arkadaşın üstüne çok gelindiğini düşünüyorum ben kendisini

cigicigi.com,hackerpowers.com dan da tanıyor bu sitelerde gördüğü itibarı biliyorum

 

yani türk milleti olarak herzaman meyve veren ağacı taşlamak yerine neden

doğru şekilde ondan faydalanmayı kimse denemiyor verin ona bir alan

yazılarını koysun benimde ihtiyacım oldugunda kitap alırken yazmışsa eğer girer okurum

veya bir öğretmenim bir fakultede onun verdiği testleri öğrencilerime verebilirmiyim diye bakarım

o da mı olmadı yeni bir delphiye başladım baktım burada en çok ilgili neoturk var

Kodbank'ın soru-cevap kategorisine sorumu gönderir

 

Neoturk olarakda cevabını forumlarda veririm burada olması konunun uzamasına

DBnin şişmesine sebebiyet vereceğinden

 

Lütfen Bilgili ve Değerli Arkadaşlar, Toplumumuzun ilgi,bilgi alanı artık bu alanlardan

kayarken yeni başlayanların şevkini eskilerinde yardım hevesini kursaklarında bırakmayalım

 

Saygı ve Sevgilerimle

Kaan

 

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

 

Delphi 7de IdDecoderMIME ve IdEncoderMIME kullanımı

Memo1Deki yazıyı çözmek ve memo2de göstermek için

     

      IdDEcoderMIME1:=tIdDEcoderMIME.Create(nil);

      Memo2.Lines.Text := IddecoderMIME1.decodeString(Memo1.Lines.Text);

     

      Memo1deki yazıyı şifreleyip memo1e koymak için

     

      IdEncoderMIME1:=tIdEncoderMIME.Create(nil);

      Memo1.Lines.Text := IdencoderMIME1.ENcodeString(Memo1.Lines.Text);

 

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

 

Mail

IdMessage1:=TIdMessage.Create(nil);

  IdSMTP1:=TIdSMTP.Create(nil);

 

  With IdMessage1 do

    Begin

      CharSet:='iso-8859-1';

      Encoding:=meMIME;

      ContentType:='text/html';

      Body.Add('<b>Mon message </b>');

      From.Text:='moi@mondomaine.com';

      Recipients.EMailAddresses:='toi@tondomaine.com';

      Subject:='mon sujet';

      TIdAttachment.Create(IdMessage1.MessageParts,'tralala.pdf);

    End;

  IdSMTP1.Host:='mail.monserveur.com';

  IdSMTP1.Connect();

 

  try

    IdSMTP1.send(IdMessage1);

  finally

    IdSMTP1.Disconnect;

  End;

 

  IdMessage1.Free;

  IdSMTP1.Free;

 

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

 

Richedit yazı metnini iki yana yasla

// Bu konuya sitede cevap veren çıkmamıştı.

Pimapen_Nuri@hotmail.com

 

 

procedure TForm1.IkiYanaYasla(Nesne: TRichEdit);

const

  WM_USER                 = $400;

  EM_EXSETSEL             = (WM_USER + 55);

  EM_SETTYPOGRAPHYOPTIONS = (WM_USER + 202);

  EM_GETTYPOGRAPHYOPTIONS = (WM_USER + 203);

  TO_ADVANCEDTYPOGRAPHY   = $1;

  mZERO                   = $0;

var

  x : tparaformat;

  L : LongInt;

  cp: charrange;

begin

  x.cbSize := sizeof(x);

  if Nesne.SelLength = 0 then

  begin

    cp.cpMin := 0;

    cp.cpMax := length(Nesne.Text);

    SendMessage(Nesne.Handle, EM_EXSETSEL, mZERO, LPARAM(@cp));

  end;

  L := SendMessageA(Nesne.Handle, EM_SETTYPOGRAPHYOPTIONS, TO_ADVANCEDTYPOGRAPHY, TO_ADVANCEDTYPOGRAPHY);

  if L = 1 then

  begin

    SendMessageA(Nesne.Handle, EM_GETTYPOGRAPHYOPTIONS, mZERO, mZERO);

    SendMessage(Nesne.Handle, EM_GETPARAFORMAT, mZERO, LPARAM(@x));

    x.dwMask     := PFM_ALIGNMENT;

    x.wAlignment := PFA_JUSTIFY;

    SendMessage(Nesne.Handle, EM_SETPARAFORMAT, mZERO, lparam(@x));

  end;

  cp.cpMin := 0;

  cp.cpMax := 0;

  SendMessage(Nesne.Handle, EM_EXSETSEL, mZERO, lparam(@cp));

  Nesne.WordWrap := true;

 

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

IkiYanaYasla(RichEdit1); // memo1 de olabilir

quickreport.preview;

end;

 

procedure TForm1.FormResize(Sender: TObject);

begin

richedit1.SetBounds(+10, 10, Form1.ClientWidth - 20, Form1.ClientHeight - 20);

end;

 

Not: Quickreportta Qrrichtext in ParentRichedit1 özelliğine= Form1.richedit1 yazılmalı, aksi halde yine sola yaslı çıkacaktır.

 

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

 

Klasör ve alt klasörlerde dosya aramak ve bulunanlari bir listeye atmak

Klasör ve alt klasörlerde dosya aramak ve bulunanlari bir listeye atmak

 

{

Form1'in üzerindeki Memo1'e bulunan dosyalari ekler.

Not: Kod recursion kullanmakta. Cok fazla (Binlerce)

dosya bulundugunda Stack Overflow hatasi verebilir

}

 

 

procedure TForm1.FindFiles(StartDir, FileMask: string);

var

  SR: TSearchRec;

  DirList: TStringList;

  IsFound: Boolean;

  i: integer;

begin

  if StartDir[length(StartDir)] <> '' then

    StartDir := StartDir + '';

 

 

  IsFound :=

    FindFirst(StartDir+FileMask, faAnyFile-faDirectory, SR) = 0;

  while IsFound do begin

    Memo1.Lines.Add(StartDir + SR.Name);

    IsFound := FindNext(SR) = 0;

  end;

  FindClose(SR);

 

  DirList := TStringList.Create;

  IsFound := FindFirst(StartDir+'*.*', faAnyFile, SR) = 0;

  while IsFound do begin

    if ((SR.Attr and faDirectory) <> 0) and

         (SR.Name[1] <> '.') then

      DirList.Add(StartDir + SR.Name);

    IsFound := FindNext(SR) = 0;

  end;

  FindClose(SR);

 

  for i := 0 to DirList.Count-1 do

    FindFiles(DirList[i], FileMask);

  DirList.Free;

end;

 

// Kullanimi:

FindFiles('C:windows', '*.txt');

 

 

Ya bu findfiles bir eklenti herhalde. Kompenent yani. Ben delphi de bu kompenenti bulamadım. Arkadaşlar lütfen yardımcı olabilir misiniz? Bu komponent sonradan mı yükleniyor yoksa biz mi bulamadık?

 

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

 

MSSQL 2000 TARİH BİLGİLERİ

fuatkilinc41@hotmail.com / Altuniş Bİlgisayar ve Yazılım / Balıkesir

 

 Fast Date Ranges Without Loops In SQL Server 2000

The trick to create date ranges without loops is to use a pivot table.

How does this work? Run the code below and you will see, only create the pivot table once and run all the other code seperately

 

-- Create out Pivot table ** do this only once-- populate it with 1000 rows

CREATE TABLE NumberPivot (NumberID INT PRIMARY KEY)

 

DECLARE @intLoopCounter INT

SELECT @intLoopCounter =0

 

WHILE @intLoopCounter <=1000

BEGIN

INSERT INTO NumberPivot

VALUES (@intLoopCounter)

 

SELECT @intLoopCounter = @intLoopCounter +1

END

GO

 

--Last 10 years from today

SELECT DATEADD(yy,-numberID,GETDATE())

FROM dbo.NumberPivot

WHERE NumberID < 10

 

--Next 10 years from today

SELECT DATEADD(yy,numberID,GETDATE())

FROM dbo.NumberPivot

WHERE NumberID < 10

 

--Next 100 months from today

SELECT DATEADD(mm,numberID,GETDATE())

FROM dbo.NumberPivot

WHERE NumberID < 100

 

-- next 100 weeks from 2000-01-01

DECLARE @dtmDate DATETIME

SELECT @dtmDate = '2000-01-01 00:00:00.000'

SELECT DATEADD(wk,numberID,@dtmDate)

FROM dbo.NumberPivot

WHERE NumberID < 100

 

-- next 100 quarters from today

SELECT DATEADD(qq,numberID,GETDATE())

FROM dbo.NumberPivot

WHERE NumberID < 100

 

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

 

Bilgisayarı Hibernate Moduna almak (BİLGİSAYARI HAZIRDA BEKLETMEK) yada bilgisayarı tv gibi açıp kap

uses shellapi;

 

 

bunu kullanmadan önce ilgili bilgisayarda denetim masasına girmeliyiz oradan güç seçeneklerine girmeliyiz ve son olarak da

"Hazırda bekletmeyi Etkinleştir" isimli kutuyu işaretlemeliyiz.

 

 

 

 

ShellExecute( Handle, 'open', 'rundll32.exe', PChar( 'Powrprof.dll,SetSuspendState' ), nil, SW_SHOWNORMAL);

 

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

ShellExecute( Handle, 'open', 'rundll32.exe', PChar( 'Powrprof.dll,SetSuspendState' ), nil, SW_SHOWNORMAL);

end;

 

 

sorularınız için

mamurbey@hotmail.com

 

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

 

windowsun belirttiğiniz programın çalışmasını güvenli kip dahil olmak üzere  her şekilde yasaklaması

uses kısmına registry ekleyin

 

1 edit 1 de button ekleyin

 

mesela edit kutusuna winword.exe yazın ve oturumu kapatıp açın. göreceksinizki Microsoft Word programı çalıştırılamıyor

 

procedure TForm1.Button1Click(Sender: TObject);

var

myregistry:tregistry;

begin

myregistry:=TRegistry.Create;

myregistry.RootKey:=HKEY_CURRENT_USER;

myregistry.OpenKey('SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer',true);

myregistry.WriteInteger('DisallowRun',1);

myregistry.OpenKey('SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerDisallowRun',true);

myregistry.WriteString('veli5001',edit1.text);

myregistry.CloseKey;

myregistry.Free;

end;

 

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

 

listbox içinde sadece bilgisayarda açık olan word programlarının listelenmesi

bu kodlar, o anda bilgisayarınızda açık olan word dosyalarının isimlerini listeler. word programının classname'i "OpusApp" dir.

 

 

function EnumWindowsProc2 (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;

Var

Title : PChar;

vc:string;

cName : Array[0..63] of Char;

begin

Result := True;

if (IsWindowVisible(Wnd)) and((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or(GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and(GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin

Title:=StrAlloc(255);

GetWindowText(Wnd,Title,255);

GetClassName(wnd, cName, 64);

vc:=strpas(cName);

if (ansilowercase(vc)='opusapp')then begin

form1.listbox1.items.add(StrPas(Title));

StrDispose(Title);

end;

end;

end;

 

 

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

listbox1.Clear;

EnumWindows(@EnumWindowsProc2,0);

end;

 

 

 

 

 

 

 

işte kodların tamamı;

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

unit Unit1;

 

interface

 

uses

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

  Dialogs, ExtCtrls, StdCtrls;

 

type

  TForm1 = class(TForm)

    Timer1: TTimer;

    ListBox1: TListBox;

    procedure Timer1Timer(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

function EnumWindowsProc2 (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;

Var

Title : PChar;

vc:string;

cName : Array[0..63] of Char;

begin

Result := True;

if (IsWindowVisible(Wnd)) and((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or(GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and(GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin

Title:=StrAlloc(255);

GetWindowText(Wnd,Title,255);

GetClassName(wnd, cName, 64);

vc:=strpas(cName);

if (ansilowercase(vc)='opusapp')then begin

form1.listbox1.items.add(StrPas(Title));

StrDispose(Title);

end;

end;

end;

 

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

listbox1.Clear;

EnumWindows(@EnumWindowsProc2,0);

end;

 

 

 

end.

 

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

 

ipuçları

Şifreli bir table için programın şifre istememesi için

Table'ın Active özelliğini False yapın ve Form'un OnCreate olayına aşağıdaki kodu ekleyin

 

Session.AddPassword('şifre');

Table1.Active:=True;

 

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

 

Bir DBGridde birden fazla seçilen kayıtlara ulaşmak

Eğer gridin MultiSelect özelliği True yapılmışsa ve gridden rastgele iki veya daha fazla kayıt seçilmişse seçilen kayıtlara aşağıdaki kod yardımıyla ulaşabilirsiniz.

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var

Liste: TBookMarkList;

i: integer;

Kayit: TBookMark;

begin

Liste:=DBGrid1.SelectedRows;

for i:=0 to Liste.Count-1 do begin

Kayit:=TBookMark(Liste.Items[i]);

Table1.GotoBookmark(Kayit);

end;

end;

 

 

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

 

Table'mı yoksa Query'imi kullanmalıyım

Lokal bir veritabanı ile çalışırken (Paradox, dBase gibi) Table kullanın. Client/Server bir veritabanı (Oracle, Interbase, SQL Server, Sysbase gibi) ile çalışıyorsanız Query kullanın.

 

 

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

 

Bir tablodaki kayıtların StrinGrid bileşenine doldurulması

procedure TForm1.BitBtn1Click(Sender: TObject);

var

i,row:integer;

begin

Table1.First;

row := 0;

StringGrid1.RowCount := Table1.RecordCount;

while not Table1.EOF do

begin

for i := 0 to Table1.FieldCount-1 do

StringGrid1.Cells[i,row] := Table1.Fields[i].AsString;

Inc (row);

Table1.Next;

end;

end;

 

{Bu ipucu Abdurrahman Sinanoğlu tarafından gönderilmiştir}

 

 

 

 

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

 

Bir tablonun alanlarını (field) bulma

procedure TForm1.Button1Click(Sender: TObject);

begin

Table1.Open;

Table1.GetFieldNames(Listbox1.Items);

end;

 

{Bu ipucu Abdurrahman Sinanoğlu tarafından gönderilmiştir}

 

 

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

 

Paradox tablosuna şifre koyma

Bir paradox dosyasına şifre koymak için :

1. Database Desktop'u açın.

2. Şifre koymak istediğiniz paradox tablosunu açın.

3. Table menüsünde Restructure komutunu verin.

4. Gelen ekranda sağ üst köşedeki Table Properties kısmından Password Security'i seçin.

5. Define tuşuna basarak şifrenizi girin.

6. Yaptığınız değişiklikleri kaydedin.

 

 

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

 

Bir tablonun tüm alanları üzerinde işlem yapma

for i:=0 to Table1.FieldCount-1 do

....

 

 

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

 

 

Bir tabloyu baştan sona tarama

Table1.First;

while not Table1.EOF do

begin

...

Table1.Next;

end;

 

 

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

 

Mevcut alias'ların listesini alma

uses kısmına DBTables ekleyin. Combobox1'e mevcut listeyi almak için :

 

Session.GetDatabaseNames(Combobox1.Items);

 

 

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

 

Bir alias'taki tabloların listesini alma

Session.GetTableNames(Combobox1.Text, '', True, False, ListBox1.Items);

 

Parametreler sırasıyla veritabanının adı, filtre (sadece lokal veritabanları için), tablo dosya uzantıları olacak mı?, sistem tabloları gösterilecek mi? (sadece SQL veritabanları) ve listenin getirileceği yer.

 

 

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

 

Bir sonraki kayıt yerine 3 kayıt birden atlamak isterseniz

Table1.MoveBy(3);

 

 

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

 

Bir Paradox tablosunda en fazla kaç alan olabilir

En fazla 255 alan (field) olabilir.

 

 

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

 

BDE ile Oracle9i'yi kullanabilir miyim?

BDE artık gelişitirilmiyor. Son versiyonu 5.2 ise Oracle 8.0.4'ten 8.1.6'ya kadar destekliyor. Oracle 9i için dbExpress kullanmalısınız.

 

 

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

 

dbGo nedir?

dbGO'nun diğer bir ismi ADO. Delphi 5 Enterprise ve Delphi 6 ve sonrasında Professional ve Enterprise sürümlerinde yer alıyor. Delphi 5 Professional'a da ayrıca kurulabiliyor. Diğer bir ismi de ADO Express.

 

 

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

 

dbExpress ile hangi veritabanlarına ulaşabilirim, Paradox, dBase tablolarına erişebilirmiyim?

dbExpress şu anda DB2, Interbase, MySQL, Oracle ve Informix ile çalışabiliyor. Delphi 7 ile birlikte SQL Server 2000'de bu listeye dahil oldu.

dbExpress ile Paradox, dBase ve FoxPro tablolarını kullanamazsınız.

 

 

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

 

Geçici işlemler için tablo kullanma (memory table)

Bazen programda bilgilerinizi geçici olarak saklama ihtiyacı duyarsınız. Memory Table'lar bu iş için biçilmiş kaftan. Şu an piyasadaki en iyi memory table bileşeni kbmMemTable ve bedava. Bileşeni sitesinden indirebilirsiniz : www.components4developers.com

 

 

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

 

Paradox Alternatifleri

Paradox tek kullanıcılı programlarda pek fazla problem çıkarmazken, ağ ortamında eğer dikkatli kullanılmazsa tam bir başbelası. Ayrıca BDE'nin artık geliştirilmiyor olması ayrı bir dezavantaj. Paradox yerine çeşitli 3. parti veritabanları kullanabilirsiniz. Delphi veritabanı desteği yönünden çok geniş, ancak ben çok tutulan 2 bileşeni aşağıda belirttim.

 

- dbIsam ( www.elevatesoft.com ): Çok kullanıcı desteği var, ODBC desteği var, SQL desteği var, teknik desteği çok iyi. dbIsam parayla satılıyor, sitesinden deneme sürümünü indirip deneyebilirsiniz.

 

- Easy Table ( www.aidaim.com ) : SQL desteği var, hızlı. Easy Table da parayla satılıyor, sitesinden deneme sürümünü indirip deneyebilirsiniz.

 

NOT : Bir de bedava bir çözüm olan TurboPower FlashFiler var. İyi bir veritabanı, bedava olması ve BDE gerektirmemesi de avantajları. Sitede 3. parti bileşenler kısmında, TurboPower yazısında detayları ve linki var.

 

 

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

 

Paradox veritabanına verileri yazdığım halde kayboluyor

- Paradox tablosuna yazdığınız veriler anında dosyaya kaydedilmez. Anında kayıt olmasını istiyorsanız BDE Administrator'dan Local Share özelliğini True yapın. (BDE Administrator - Configuration - System - INIT).

 

- Eğer cachedUpdates çalışmıyorsanız, Tablonun CachedUpdates özelliği False'mu dikkat edin.

 

- Bunların ikisi de işe yaramaz ise Table/Query bileşenini silip yeni bir bileşen koyup, onu ayarlayın.

 

 

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

 

dbGrid'te bir alanın değerine göre satırı renklendirme

Aşağıdaki kodla bu işi yapabilirsiniz. NO alanının değeri 100'den küçükse satır sarı,

100 ile 200 arası ise yeşil, 200 ile 300 arası ise kırmızı olur.

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

var

MyValue: integer;

begin

if gdSelected in State then Exit;

MyValue := DBGrid1.DataSource.DataSet.FieldByName('NO').AsInt eger;

if MyValue <100 then

DBGrid1.Canvas.Brush.Color := clYellow

else

if MyValue <200 then

DBGrid1.Canvas.Brush.Color := clGreen

else

if MyValue <300 then

DBGrid1.Canvas.Brush.Color := clRed;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

 

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

 

dbExpress ile SqlTable nesnesi ile veriyi değiştiremiyorum, "can not modify read only data set" hatası veriyor

SQL Table unidirectional bir dataset'tir. Yani birden fazla kayıtı hafızadaki buffer'da tutmaz. Bunlar da First ve Next metoduyla kayıtlar arasında gezebilirsiniz. Raporlama gibi işlemler için oldukça kullanışlıdır.

 

Eğer veriyi güncellemek istiyorsanız SQL komutları : UPDATE kullanmanız lazım. Delphi Yardımda detaylı bilgiler var, inceleyebilirsiniz.

 

 

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

 

Bir tablodaki kayıt sayısını bulma

 

 

Table kullanıyorsanız: RecordCount ile, Query kullanıyorsanız Count(*) ile tablodaki toplam kayıt sayısını bulabilirsiniz. Burda dikkat etmeniz gereken SQL veritabanlarında Table bileşeni ve RecordCount komutunu kullanmayın. Çünki bu durumda tablodaki tüm veriler client'a yüklenecek, gereksiz yavaşlama ve ağ trafiği oluşacaktır.

 

Table : Table1.RecordCount;

 

Query : SELECT COUNT(*) FROM TABLO_İSMİ

 

 

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

 

Paradox'ta silinen bir kaydı kurtarabilir miyim?

Paradox'ta silinen kayıtlar geri kurtarılamıyor. Silinen kayıtların üzerine boş bilgiler yazılıp yeni bir kayıt için ayrılıyor.

 

Paradox ile çalışıyorsanız, iyi bir yedekleme sistemi kurmalısınız.

 

 

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

 

dbGrid'e checkBox eklemek

1. Forma bir TcheckBox bileşeni koyun ve visible'ını False yap. Verdiğim kodda TcheckBox'ın ismi : Dbck

2. DBGrid1DrawColumnCell olayını aşağıdaki gibi ayarlayın.

3. DBGrid1ColExit olayını aşağıdaki gibi ayarlayın.

4. DBCheck.Click olayını aşağıdaki gibi ayarlayın.

 

 

 

procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

begin

 

If (gdFocused in State) then

begin

// EXPRECORD is the name of the field to apply checkbox to

If(Uppercase(Trim(Column.FieldName)) = 'EXPRECORD' ) Then

begin

DBCk.Visible:=True;

DBCk.SetBounds(Rect.Left + DBGrid1.Left + 1,

Rect.Top + DBGrid1.Top + 1,

Rect.Right -Rect.Left,

Rect.Bottom - Rect.Top);

DBCk.Checked:=TBWorkingExpRecord.Value;

end;

end;

 

 

procedure Tform1.DBGrid1ColExit(Sender: TObject);

begin

DBCk.Visible:=False;

end;

 

procedure Tform1.DBCkClick(Sender: TObject);

begin

// Set field value in table equivalent to the check

// We used TCheckbox instead of TDBCheckbox due to null

// value handling

Try

TBWorking.Edit;

TBWorkingExpRecord.Value:=DBCk.Checked;

TBWorking.Post;

Except

On E:EDatabaseError do Showmessage(E.Message);

End;

end;

 

 

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

 

Veritabanına jpeg resimleri kaydetme/okuma

 

Veritabanına aşağıdaki kodları kullanarak TImage ile jpeg'i kaydedip, tekrar okuyabilirsiniz. TDBImage jpeg ile çalışamaz!

 

jpeg'i kaydetme :

 

 

procedure TForm1.loadPic;

var

jpeg: TJPEGImage;

Stream: TMemoryStream;

BlobField: TBlobField;

begin

BlobField := table1.DataSet.FieldByName('Bild') as TBlobField;

jpeg := TJPEGImage.Create;

try

if (Image1.Picture.Graphic is TJPegImage) then begin

jpeg.Assign (ImageFoto.Picture.Bitmap);

end;

Stream := TMemoryStream.Create;

try

jpeg.SaveToStream (Stream);

DataSourceForm.DataSet.Edit;

BlobField.LoadFromStream (Stream);

finally

Stream.Free;

end;

finally

jpeg.Free;

end;

end;

 

Veritabanındaki jpeg'i TImage'a alma

 

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);

var

MS: TMemoryStream;

J1: TJPEGImage;

begin

J1 := TJPEGImage.Create;

MS := TMemoryStream.Create;

try

TBlobField(DataSet.Fieldbyname('myBlob')).SaveToSt ream(MS);

MS.Seek(0,soFromBeginning);

with J1 do begin

PixelFormat := jf24Bit;

Scale := jsFullSize;

Grayscale := False;

Performance := jpBestQuality;

ProgressiveDisplay := True;

ProgressiveEncoding := True;

LoadFromStream(MS);

end;

if MS.Size >0 then

Image1.Picture.Assign(J1)

else

Image1.Picture.Assign(nil);

 

finally

J1.Free;

MS.Free;

end;

end;

 

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

 

Renkleri veritabanına kaydetmek

 

I. Yol : Renkleri integer tipinde bir alana kaydedebilirsiniz.

 

Veritabanına kaydetmek için : Table1.FieldByName('ColorField').AsInteger := Integer(AColor);

 

Veritabanından okumak için : AColor := TColor(Table1.FieldByName('ColorField').AsInteger) ;

 

II.Yol : StringToColor ve ColorToString döünüşümlerini yaparak string bir alana kaydedebilirsiniz.

 

 

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

 

DataModule kullanıyorum, "Access Violation" hatası alıyorum

 

Access Violation olmayan, henüz oluşturulmamış bir nesneye ulaşmak isterseniz çıkar. Mesela 10 öğeli bir dizide 11. öğeye ulaşmaya çalışırsanız, bu hata çıkar. 11. öğe yok çünki.

 

Bu hata, büyük ihtimalle ana formu datamodule'den önce create ettiğiniz için oluşuyor. Project -> View Source ile dpr dosyasını açıp, datamodule'ü en üstte taşıyın, ilk önce data module oluşturulsun.

 

 

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

 

SQL sorgusu ile tablomdan NO isimli alanı seçerken problem çıkıyor

 

Alan isimlerini verirken, NO, NOT vb. ayrılmış kelimeleri (reserved words) kullanmamalısınız. Bu kelimelerin tamamını kullandığınız veritabanının dökümanlarından öğrenebilirsiniz.

 

 

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

 

AutoInc bir alanda silinen kayıtlar için yeniden sıralama yapmak istiyorum

 

Bu hiç uygun bir yol değil. Hele ki bu auto increment alanları key olarak kullanıyorsanız, zaten AutoInc alanlara müdahele edemezsiniz.

 

Kullanıcı sıraladığında bir atlayarak gözüksün, ne farkeder. Bence pek farkeden birşey olmaz. Kullanıcı sizden bu tip isteklerde bulunuyorsa yönlendirmeniz lazım, olmaz diye. Zaten çoğu yerde göstermenize bile gerek yok. Genelde takip için başka alanlar olduğu için ben genelde bu alanları grid'te ve formda gizlerim. Öğrenciyse okul no, çalışansa sicil no vs. gibi.

 

Bu tip alanları autoinc yerine kendiniz artırıyor olsanız bile, yeniden sıralama yoluna gitmeyin. Giderseniz başınız ağrıyabilir.

 

 

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

 

Programımı hızlandırmak için neler yapabilirim

1. Sorgulama, Sıralama ve gruplama için çok kullandığın alanları indeksle. Mesela genelde kayıtlarını tarih'e göre süzüyorsan, Tarih alanını indeksle.

 

2. Sadece gerekli alanları seç. Mesela bir tabloda 15 alan var ve sana sadece 4 tanesi yetiyor ise, "SELECT *" ile tüm alanları seçmek yerine, "SELECT ALAN1, ALAN2, ALAN3, ALAN4" gibi sadece gerekli alanları seç.

 

3. BLOB alan kullanıyorsan sorguda bunları seçmemeye gayret et.

 

4. ve en önemlisi ne kadar az kayıt seçebiliyorsan o kadar iyi ve hızlı olur. Mesela fatura girişi yaparken tüm fatura tablosunu seçmek yerine sadece 1 kayıt seçebilirsin.

 

5. Eğer veritabanınız destekliyorsa mümkün olduğu kadar veritabanı bazlı çalışın, trigger ve stored procedure kullanın.

 

 

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

 

Table'daki bir blob alanın büyüklüğünü bulma

function GetBlobSize(Field: TBlobField): Longint;

begin

with TBlobStream.Create(Field, bmRead) do

try

Result := Seek(0, 2);

finally

Free;

end;

end;

 

Kullanılışı : Edit1.Text := IntToStr(GetBlobSize(Notes));

 

 

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

 

DBGrid'de Aktif Satırın İstenen Renge Boyanması

 

var

Form1: TForm1;

 

implementation

 

type

TCustomDBGridCracker = class(TCustomDBGrid); // datalink'i kullanabilmemiz için şart

 

{$R *.dfm}

 

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

with TCustomDBGridCracker(DBGrid1) do

if DataLink.ActiveRecord = Row - 1 then

Canvas.Brush.Color := clRed

else

Canvas.Brush.Color := clWhite;

DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

 

 

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

 

dBase Kullanırken Oluşan Temp Dosyalar

 

Veritabanı olarak dBase kullanıyorsanız ve _qsql000.dbf , _qsql213.dbf bunlar gibi temp dosyalar oluşabilir. Eğer tablolara query'lerle ulaşıyorsan bu tip temp tabloların oluşması normaldır. Program normal şekilde sonlandırıldığında silinmeleri gerekir. Yoksa programı kapatırken o tip dosyaları aratıp sildirebilirsiniz.

 

 

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

 

Paradox Tablosunda "index out of range" Hatası

index out of date hatası, tablodaki veri ile index arasında uyşmazlık olduğu zaman meydana çıkan bir hata. Bu durumu düzeltmek için indexi kaldırıp tekrar oluşturun.

 

Bu hatanın oluşmasına sebep olan 8 neden tespit edilmiş. Aşağıdaki linkten detaylara bakabilirsiniz :

 

http://bdn.borland.com/article/0,1410,15209,00.html

 

 

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

 

"Capability not supported" hatası

Bu mesajı genelde büyük veritabanlarından farklı özellikteki sql ifadelerini database desktop gibi bir uygulamada çalıştırmak istediğinizde karşınıza çıkar. Böyle bir durumla karşılaşmamak için uygulamanızda kullandığınız database'in toolları ile denemek istediğiniz şeyleri yapabilirsiniz (Sql Server-Query Analyzer, Oracle-Sql Plus veya 3rd parti programlar)

 

Programınız içinde BDE kullanıyorsanız Database nesnesini eksik etmeyin...

 

 

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

 

Paradox'ta Bozulan Indekslerin Düzeltilmesi

 

http://www.borland.com/devsupport/bde/files/tutil50.zip

 

dosyasını indirin. Bu Borland'ın paradox tablolarındaki problemleri düzeltmek için yayınladığı bir dll.

 

http://www.borland.com/devsupport/bde/files/tutil32d.zip

 

bu dosyayı da indirin. Bunda da hem dll'in nasıl kullanılacağını gösteren kaynak kod var, hem de exe dosya olarak direk çalışabilir hali var. Tablolarınızı kurtarıp, daha sonra bu dll ile programınıza index düzeltme seçeneği koyabilirsiniz.

 

NOT : çalıştırmadan önce yedek almayı unutmayın.

 

 

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

 

Query'de Sonuçlar Salt Okunur (Read Only) Dönüyor

 

Query nesnesinde sonuçlar salt okunur olarak döner (AdoQuery hariç!). Eğer SQL cümleciğiniz basit ise Query'nin RequestLive özelliğini True yaparak, Query'i yazma/okuma durumuna alabilirsiniz. Ancak karmaşık SQL cümlelerinde bu işe yaramayacaktır. Bunun için TUpdateSQL bileşenini kullanmalısınız.

 

 

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

 

Interbase için ODBC Driver

 

http://www.ibphoenix.com/ adresinden Main Downloads kısmına girin. ODBC kısmından IBPhoenix Open Source ODBC Driver'a tıklayın.

 

 

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

 

ADO'da Sorgu Çalışırken İptal Etme

 

1. Query'de ExecuteOptions =[eoAsyncFetchNonBlocking] yapın.

 

2. OnFetchProgressEvent olayında aşağıdaki komutu yazın.

 

DataSet.Recordset.Cancel;

 

NOT : tabii Application.ProcessMessagess komutunu vermeyi unutmayın.

 

 

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

 

View nedir ve niçin kullanılır?

view'lar bir veya birden fazla tablodan verileri çekmek için; bir SQL cümlesi ile oluşturulan sanal bir tablodur. Bu tablo veya tablolara kayıt eklendikçe, ilgili view'da kayıtları görebilirsiniz. View'daki bilgiler veritabanında depolanmaz, ilgili tablolardan alınır. Ne işe yarar:

 

1. Birden fazla tablodan kolayca veri çekmek için. Mesela Rapor oluşturmak veya acemi programcıların işini kolaylaştırmak için.

 

2. Bazı bilgileri gizlemek için. Mesela personel tablonuz var. Tüm alanlar görünsün ancak maaş kısmı görünmesin istiyorsunuz. Bu tip durumlarda faydalı olur.

 

3. Tabloyla birlikte bir takım bilgiler göstermek için kullanışlı olabilir. Mesela bazı alanları toplamı veya bu alanlardan en büyüğü, en küçüğünü göstermek gibi.

 

 

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

 

Query'deki SQL cümlesini kontrol etmek

Eğer SQL cümlesini kod ile oluşturyorsanız, bir hata durumunda oluşan SQL cümleciğini görüp, hatayı tespit etmek isteyebilirsiniz. Bu durumda kodda SQL cümlesini ekledikten sora Open/ExecSQL komutunu vermeden şu satırı yazın. Bu size Query'nin içinde oluşan SQL cümlesini gösterir.

 

ShowMessage(Query1.SQL.Text);

 

 

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

 

DBGrid'te satır numarası oluşturma

 

Bunun için kullandığınız table'da bir calculated alan oluşturun, mesela SIRANO olsun. Daha sonra Table'ın OnCalcFields olayına aşağıdaki kodu yazın:

 

Table1.FieldByName('SIRANO').AsInteger := Table1.RecNo + 1;

 

 

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

 

FireBird/Interbase veritabanı ve tabloları oluşturma

Bunun için veritabanı ile birlikte gelen IB Console programını kullanabilirsiniz. Ancak bu pek kullanışlı değildir. Piyasada bu işi yapan birçok araç var. Bunlardan en iyileri :

 

* IB Expert : www.ibexpert.com - Personal sürümü ücretsiz.

* EMS Interbase Manager : www.ems-hitech.com

 

Bu araçlar ile veritabanı, tablo, index oluşturma, kayıtları görme vs. gibi komple veritabanı yönetim işlemlerini yapabilirsiniz.

 

 

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

 

dBase ve paradox tablolarının pack edilmesi

dBase'de bir kayıtı sildiğiniz zaman fiziksel olarak silinmez, dosya da kalır. Pack işlemi silinen ama hala dosyada duran kayıtları fiziksel olarak siler ve dosyanın boyutunu küçültür.

 

Paradox'ta da kayıt silindiği zaman fiziksel olarak silinmez ancak sonraki yapılan kayıtlar, bu silinen kayıtların üzerine kaydedildiğinden paradox tablolarında, pack işlemi pek gerekli değildir.

 

dBase'de pack işlemini, Borland'ın yayınladığı kodlarla yapabilirsiniz. Şu iki dosyayı indirin :

 

http://www.borland.com/devsupport/bde/delphi_controls/table_pack/tablpack.zip

 

http://www.borland.com/devsupport/bde/delphi_controls/table_pack/packex.zip

 

 

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

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