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

 

neoturk: Forum - "sağa dayalı edit"

"

Merhaba Arkadaslar 29 Kasım 2005 18:34

 

Edit.text := '123,452.55'   edit'a seklinde bir deger atıyorum ancak

bunun saga yanısık olmasını istiyorum ama bir turlu beceremedim.

Kod Bankasındaki saga dayalı yazdırma seklindeki koduda denedim olmadı,

TeditMask kullanımdım, formatını

!999999;1; seklinde yaptım olmadı.

Rica etsem bir yardımda bulunurmusunuz.Tesekkurler.

 

lalecan

"

 

cevap:

 

merhaba,

 

normal edit nesnesinin tüm kalıtsal özelliklerini içeren

komponent kodu aşağıdadır.

 

kodu olduğu gibi "alignment.pas" olarak kaydet.

(delphinin kurulu olduğu dizin altında,

imports klasörü vardır. onun içine kaydet)

 

daha sonra component menüsüne gir ( ana menüden )

( File Edit View Run "Component" )

 

install component seç.

 

git imports klasörü içerisindeki "alignment.pas" dosyasını seç.

 

"samples" altına kurulacaktır komponentin.

 

sağa sola ortaya dayalı istediğin gibi kullan.

 

"samples" yazan yeri değiştirerek varsa kendi palet ismini de belirtebilirsin. dağınıklık olmaz.........

 

Kolay gelsin.............

 

( sigaram bitti krize girdim ! kahretsin sinirleniyorum ! )

 

neoturk_

 

 

 

unit alignment;

 

interface

 

uses

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

Dialogs,

  StdCtrls;

 

type

  TJustaEdit = class(TEdit)

  private

    { Private declarations }

     fAlignment : TAlignment;

  protected

    { Protected declarations }

    procedure SetAlignment(Value: TAlignment);

  public

    { Public declarations }

     procedure createParams(var Params : TCreateParams); override;

  published

    { Published declarations }

     property Alignment: TAlignment read FAlignment write SetAlignment

      default taLeftJustify;

  end;

 

procedure Register;

 

implementation

procedure TJustaEdit.CreateParams(var Params : TCreateParams);

var

  x : Longint;

begin

  inherited CreateParams(Params);

  case fAlignment of

    tarightjustify: x := es_right;

    taleftjustify : x := es_left;

    tacenter      : x := es_center;

  end;

  params.style := params.style or x;

 

 

end;

procedure TJustaEdit.SetAlignment;

begin

   if FAlignment <> Value then

  begin

    FAlignment := Value;

    RecreateWnd;

  end;

end;

procedure Register;

begin

  RegisterComponents('Samples', [TJustaEdit]);

end;

 

end.

 

 

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

sayın xxnt03; oncelikle yardımın icin tesekkur ederim.. 30 Kasım 2005 16:36

 

Soyledigin gibi, asagıdaki compenenti install ettim ama bana

programi calistirirken bana hata verdi,

soyleki,

 

"[Fatal Error] CariKart.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU)"

 

simdi, programi calistiramiyorum, bunun icin ne yapabilirim, yardımcı olurmusun..

 

Tesekkurler.

Kolay gelsin..

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

 

 

merhaba,

 

"[Fatal Error] CariKart.dpr(1): Unit not found: 'System.pas' or binary equivalents (DCU,DPU)"

 

bu hatanın kaynağı, muhtemelen delphi kütüphanen zarar gördüğü için.

 

system.pas dosyası bulunamaması ve beraberinde "dcu,dpu" dosyalarının

bulunamaması anlamına geliyor ki, delphiyi tekrardan kurman gerekiyor.

 

zayıf bir ihtimal ama environment paths ayarları ile oynamış isen kütüphane

dosyalarını yine göremeyeceksindir.

 

yanlışlıkla delphiye system klasörlerini mi uçurdun naptin ?...

 

projene zarar gelmez.....

 

verdiğim komponent kodu doğrudur, test ettim %100 çalışıyor.

 

projenin yedeğini bir klasöre al, delphiyi tamamen kaldır yeniden kur.

 

sorun çözülecektir...

 

kolay gelsin...

 

neoturk_

 

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

 

"

DElphinin Tools menüsünden Environment Options menüsünü tıkla.

açılan pencede Library kısmına geç.. Browsing Path kısmınn karşısındaki

buttonu tıkla açılan pencereden Grayed items denote

invalid Path kısmına yeni eklediğin kompanentin sourcelerinin bulunduğu

klasörün yolunu yaz. add ile ekle...

eklediğin kompanentler çalışacaktır..

iyi çalışmalar.....

aslanm

"

 

 

neoturk: Forum - "MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR..."

Şimdi Form11 Diye Bir Müşteri Kayıt Formum Var Burada Formda ...

 

1 Edit

15 Adet Dbedit

Nesneleri Var .

 

1 Table

1 Datasource1

 

Ben Form11 Üzerinde Edit1 OnExit Yordamına Şunu Yazıyorum...

Table1.insert;

 

Kaydet Butonunada Onclik Yordamınada ..

 

Table1.post;

 

Yazıyorum...

 

bu kayıt işlemini başka nasıl yaptırabilirim....

Yardımcı olabilirseniz sevinirim...

 

sahinmaster

"

 

cevap:

 

merhaba,

 

sorunu biraz daha açıklarsan daha iyi yardımcı olurum,

tam olarak amacını anlayamadım,

 

edit1 hücresini terk ettiği anda bilgileri kaydetmek istiyorsun sanırım.

 

edit nesnesini de dbedit olarak ayarlamalısın,

otomatik olarak bu tip hücreler terk edildiğinde

db dosyasına otomatik yazılırlar.

( extra olarak tekrar post işlemi yaptırmana gerek yok)

 

normal edit nesnesinin içeriğini onexit olayına yazıp,

girilen bilgiyi post ettirmek istiyor isen şayet,

 

edit1 nesnesinin on exit olayına şunu yazabilirsin:

 

(access kullandığını varsayıyorum)

adotable1.edit;

adotable1.fields.fieldbyname('ADI').asstring:=edit1.text;

adotable1.post;

( hücre terk edilirken bu bilgiyi db ye yazmış olursun )

 

adotable1.insert yerine, adotable1.append kullanmanı öneriyorum.

append = en son satıra ekler.

insert = araya ekler.

 

kolay gelsin.....

 

saygılarımla_

 

neoturk_

 

 

 

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

Kardeş Merhaba KArdeş Olay Şu Şimdi....

 

Bir Projem Var .. Ana Formda Müşteri Kayıt Butonunu Tıklıyom. Form11 Açılıyor.

 

Form11 Üzerinde

 

1 Adet Edit1

15 Adet Dbedit

Nesneleri Var .

 

Kayıt İçinde :

1 Table1

1 Datasource1 Nesneleri Var Databas Olarak Paradox Kullanıyorum ...

 

Form11 Açıldığında Kürsür İlk Olarak Edit1 e Geliyor. Şu Anna Kadar Databas Kayıt İşlemi Yapmayacak . Ancak Ender Tuşuna veya Tab Tuşuna Barak Edit1 Den Ayrıldığımda Databas Kayıt Durumuna Geçecek Bende DBEdit1 Den Başlarakar EDEdit'ler İçine Bilgileri Gireceğim.

 

Ve Buradada Kaydet Butonuna Basarsam Databas İçine Girdiğim Biligileri Kayıt Edecek.

 

ŞAYET Kaydet Değilde Vazgeç Butonuna Basarsam Hiç Bir Şey Kayıt Etmeden Form11 Kapatacak.

 

KArdeş Olay bu .. Derdimi Anlatabilmişimdir İşallah.

Yardımcı olabilirsen sevinirim...

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

 

 

merhaba,

 

pekala.........

 

anladığımı yazıyorum:

"edit1 hücresinden TAB ya da ENTER tuşu ile

ayrıldığında veri tabanına, KAYDET derseniz

kayıt yapacak, VAZGEÇ derseniz hiç bir kayıt eklemeyecek..."

 

peki....

 

teorik yazıyorum,

 

form11 üzerinde 2 tane button yerleştirmiş olduğunu varsayıyorum.

( button1 = kaydet, button2=vazgeç olsun )

 

form11 üzerindeki edit1 hücresinin "onenter" eventine(olayına) aşağıdaki kodu yaz

 

procedure TForm1.Edit1Enter(Sender: TObject);

begin

edit1.tag:=0;//tab veya entere basılmamış say

table1.disablecontrols;//tabloyu pasif hale getir (seçimlik, sana kalmış )

button1.enabled:=false;//kaydet düğmesini pasif yap

button2.enabled:=false;//vazgeç düğmesini pasif yap

end;

 

 

aynı şekilde form11 in edit1 hücresinin onkeypress olayına aşağıdaki kodu yaz:

 

procedure TForm11.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if (ord(key)=13) or (ord(key)=9) then

        begin

        key:=#0;

        edit1.tag:=1;//tab veya entere basılmış say

        end;

//final

end;

 

 

aynı şekilde form11 in edit1 hücresinin onexit olayına aşağıdaki kodu yaz:

 

procedure TForm11.Edit1onexit(Sender: TObject);

begin

if edit1.tag=1 then //tab veya entere basılmış ise

   begin

        table1.enablecontrols;//tabloyu aktif hale getir (seçimlik, sana kalmış )

        button1.enabled:=true;//kaydet düğmesini aktif yap

        button2.enabled:=true;//vazgeç düğmesini aktif yap

   end;

end;

 

 

giriş-çıkışlar ve tablo yönetimi tamam....

 

buton1 cliğine şunu yaz: ( kaydet )

 

begin

table1.edit; //değişiklikler yapılmış olabilir, edit moduna geçiyoruz

table1.post; //verileri kaydet, güncelle, üzerine yaz

end;

 

 

buton2 cliğine şunu yaz: ( vazgeç )

 

begin

table1.cancel; //iptal et

end;

 

not: dbedit kullanımlarında dikkatli olmalısın. yaptığın değişiklikler

otomatik olarak kaydediliyor çünkü.... bu yüzden bazen "vazgeç" tuşu ve cancel mantığı problem oluşturabilir...

 

umarım sorunun hallolmuştur ?......

 

daha başka ne yapmam gerekiyorsa söyle........

 

kolay gelsin........

 

neoturk_

 

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

 

neoturk: Forum - "MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR..."

"

MERHABA ARKADAŞLAR YARDIMA İHTİYACIM VAR... 29 Kasım 2005 09:57

 

Merhaba Arkadaşlar Kolay gelsin... Ben Bir Konu Hakkında Fikriniz Almak İstiyorum...

 

Şimdi Form11 Diye Bir Müşteri Kayıt Formum Var Burada Formda ...

 

1 Edit

15 Adet Dbedit

Nesneleri Var .

 

1 Table

1 Datasource1

 

Ben Form11 Üzerinde Edit1 OnExit Yordamına Şunu Yazıyorum...

Table1.insert;

 

Kaydet Butonunada Onclik Yordamınada ..

 

Table1.post;

 

Yazıyorum...

 

bu kayıt işlemini başka nasıl yaptırabilirim....

Yardımcı olabilirseniz sevinirim...

 

sahinmaster

"

 

cevap:

 

merhaba,

 

sorunu biraz daha açıklarsan daha iyi yardımcı olurum,

tam olarak amacını anlayamadım,

 

edit1 hücresini terk ettiği anda bilgileri kaydetmek istiyorsun sanırım.

 

edit nesnesini de dbedit olarak ayarlamalısın,

otomatik olarak bu tip hücreler terk edildiğinde

db dosyasına otomatik yazılırlar.

( extra olarak tekrar post işlemi yaptırmana gerek yok)

 

normal edit nesnesinin içeriğini onexit olayına yazıp,

girilen bilgiyi post ettirmek istiyor isen şayet,

 

edit1 nesnesinin on exit olayına şunu yazabilirsin:

 

(access kullandığını varsayıyorum)

adotable1.edit;

adotable1.fields.fieldbyname('ADI').asstring:=edit1.text;

adotable1.post;

( hücre terk edilirken bu bilgiyi db ye yazmış olursun )

 

adotable1.insert yerine, adotable1.append kullanmanı öneriyorum.

append = en son satıra ekler.

insert = araya ekler.

 

kolay gelsin.....

 

saygılarımla_

 

neoturk_

 

 

 

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

Kardeş Merhaba KArdeş Olay Şu Şimdi....

 

Bir Projem Var .. Ana Formda Müşteri Kayıt Butonunu Tıklıyom. Form11 Açılıyor.

 

Form11 Üzerinde

 

1 Adet Edit1

15 Adet Dbedit

Nesneleri Var .

 

Kayıt İçinde :

1 Table1

1 Datasource1 Nesneleri Var Databas Olarak Paradox Kullanıyorum ...

 

Form11 Açıldığında Kürsür İlk Olarak Edit1 e Geliyor. Şu Anna Kadar Databas Kayıt İşlemi Yapmayacak . Ancak Ender Tuşuna veya Tab Tuşuna Barak Edit1 Den Ayrıldığımda Databas Kayıt Durumuna Geçecek Bende DBEdit1 Den Başlarakar EDEdit'ler İçine Bilgileri Gireceğim.

 

Ve Buradada Kaydet Butonuna Basarsam Databas İçine Girdiğim Biligileri Kayıt Edecek.

 

ŞAYET Kaydet Değilde Vazgeç Butonuna Basarsam Hiç Bir Şey Kayıt Etmeden Form11 Kapatacak.

 

KArdeş Olay bu .. Derdimi Anlatabilmişimdir İşallah.

Yardımcı olabilirsen sevinirim...

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

 

 

merhaba,

 

pekala.........

 

anladığımı yazıyorum:

"edit1 hücresinden TAB ya da ENTER tuşu ile

ayrıldığında veri tabanına, KAYDET derseniz

kayıt yapacak, VAZGEÇ derseniz hiç bir kayıt eklemeyecek..."

 

peki....

 

teorik yazıyorum,

 

form11 üzerinde 2 tane button yerleştirmiş olduğunu varsayıyorum.

( button1 = kaydet, button2=vazgeç olsun )

 

form11 üzerindeki edit1 hücresinin "onenter" eventine(olayına) aşağıdaki kodu yaz

 

procedure TForm1.Edit1Enter(Sender: TObject);

begin

edit1.tag:=0;//tab veya entere basılmamış say

table1.disablecontrols;//tabloyu pasif hale getir (seçimlik, sana kalmış )

button1.enabled:=false;//kaydet düğmesini pasif yap

button2.enabled:=false;//vazgeç düğmesini pasif yap

end;

 

 

aynı şekilde form11 in edit1 hücresinin onkeypress olayına aşağıdaki kodu yaz:

 

procedure TForm11.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if (ord(key)=13) or (ord(key)=9) then

        begin

        key:=#0;

        edit1.tag:=1;//tab veya entere basılmış say

        end;

//final

end;

 

 

aynı şekilde form11 in edit1 hücresinin onexit olayına aşağıdaki kodu yaz:

 

procedure TForm11.Edit1onexit(Sender: TObject);

begin

if edit1.tag=1 then //tab veya entere basılmış ise

   begin

        table1.enablecontrols;//tabloyu aktif hale getir (seçimlik, sana kalmış )

        button1.enabled:=true;//kaydet düğmesini aktif yap

        button2.enabled:=true;//vazgeç düğmesini aktif yap

   end;

end;

 

 

giriş-çıkışlar ve tablo yönetimi tamam....

 

buton1 cliğine şunu yaz: ( kaydet )

 

begin

table1.edit; //değişiklikler yapılmış olabilir, edit moduna geçiyoruz

table1.post; //verileri kaydet, güncelle, üzerine yaz

end;

 

 

buton2 cliğine şunu yaz: ( vazgeç )

 

begin

table1.cancel; //iptal et

end;

 

not: dbedit kullanımlarında dikkatli olmalısın. yaptığın değişiklikler

otomatik olarak kaydediliyor çünkü.... bu yüzden bazen "vazgeç" tuşu ve cancel mantığı problem oluşturabilir...

 

umarım sorunun hallolmuştur ?......

 

daha başka ne yapmam gerekiyorsa söyle........

 

kolay gelsin........

 

neoturk_

 

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

 

neoturk: Forum - "Delphi7 'de Fasnet kontrolleri yok"

"

Delphi7 'de Fasnet kontrolleri yok 28 Kasım 2005 21:32

 

Değerli delphi kullanıcıları. Benim gene size bir sorum olacak.

Ben delphi7 kullanıyorum. Ama Fasnet kontrollerini bir türlü bulamadım.

Nasıl alabilirim. Lütfen yardım edin.

 

yi çalışamalar)

 

delphiibo

"

 

cevap:

 

ESKİ CEVABIMDAN ALINTIDIR:

 

"

DELPHI 6 daki   NMHTTP1   DELPHI 7 de  Hangi Compunent  Bugün 14:00

 

Herkese Merhabalar

 

Bu sitteden çok şey öğrendim Emeği geçen herkesten Allah Razı olsun.

 

Buraya Yine bir soru sormak için geldim.Bilen bir arkadaşım varsa

rica edecem.Ben önceden Delphi6 ile çalışıyordum.Bir mesaj gönderme

programı vardı.Hatta o program burada da var.

 

Delphi 7 ye geçince çalışmaz oldu.Çünkü bazı Compunentler çalışmıyor

 

Ben şimdi Bu delpi 6 daki NMHTTP Compunenti Delphi7de Ne ? idhttp ye

bakıyorum.Orada get pos yok.

Bu delphi 7 de Nasıl değişiklik yapacam konusunda bir bilgisi olan varmı acaba.

Şimdiden teşekkürler.

 

Mert_

"

 

cevap:

 

alıntıdır: ( nmstrm hakkında genel )

"

Written by neoturk - 02.01.2004

 

1.Internet programcılığı ile uğraşıyor isek ( bu trojan veya her neyse fark etmez )

kesinlikle ve kesinlikle DOSYA TRANSFERİ olayının %100 sorunsuz olarak

çözülmesi gerekiyor. Çünkü bağlantı sağlanmasında bir problem yok,

ancak er ya da geç dosya transfer olayına ihtiyaç duyulacak!

Bunun için bu konunun bizzat çözümlenmesi ve kendi mantığımıza göre işleme

geçmesi gerekiyor.

 

2.Delphi olsun CBuilder olsun, bu programlama dillerinde dosya transfer

işini gören NMSTRM adlı komponent (paket) serisi var. Hemen hemen

tüm programcılar bu komponentleri kullanırlar.

( Çok önemli dip not: Okuduğum birçok delphi kitabında

(okumadığımı yok denecek kadar parmakla gösterebilirim) dosya transfer örneklerini

nedense hep nmstrm komponentleri üzerinde anlatırlar.

Oradaki örneklerde dosya transferleri çalışır. Oturur yazarsın ve her şeyin

çalıştığını görünce bir şeyler öğrendiğini sanırsın.. doğrudur..

ama Level2'ye geçtiğinde NMSTRM komponentlerinin yetersiz

olduğunu ben dahil deneyimli coderler er geç fark etmişlerdir

Bu nedenle oturup adam gibi kodunu kendin yazmalısın..

( icq gibi, paltalk gibi.. )

 

3.Örnek trojanlar incelendiğinde nedense çoğunda dosya transfer olayının

nasıl yapıldığı gösterilmemiştir. Bunu gösteren tek örnek trojan kodu LATINUS

trojanıdır. ( tek tük bazı trojanlarda da mevcut ancak tarihi eser

kalıntılarıyla dolu ve çalışmayan kod parçacıklarıdır )

 

4.Latinus trojanındaki dosya transfer işlemi Multi-File yöntemini

destekleyen şekilde transfere müsaade ediyor, ama kullanımı pek etkin değil..

denedim kullandım çalıştırdım ama etkin değil.. hangi dosyanın ne zaman

vardığı, nereye gittiği Allah kerim.. gidiyor dosyalar ve direkt temp

klasörüne kopyası çıkartılıyor.. kodu yazan adam biraz kulağını

SAĞ'dan göstermiş.. welhasıl pek verimli bir kod değil…

 

5.Dosya göndermek gerçekten önemli bir konu, nedenine gelince,

coderlerin %99'u ( abartmıyorum ) nmstrm komponentini kullanırlar

ve kullanacaklardır. Oturup sıfırdan kodunu yazması inan kasıyor

işin komik yanı da network içinden dışarıya bağlantı yapıldığında

nmstrm componentleri dosya transferlerini yapamıyor..

bunu ya bilerek es geçtiler ya da unuttular..

çünkü bizim daha önceki yazdığımız tüm versiyonlarda nmstrm komponentlerini

kullanmıştım. O yüzden network-dialup arasındaki dosya transferleri

olmuyordu. ( network içinden evdeki pcye bağlantı örneğinde olduğu gibi )

( ama msn veya icq bunu gayet güzel yapıyor değil mi ? )

 

6.Çok ince bir nuans daha var, tcp/ip ( socketler ) üzerinden dosya

göndereceğimiz zaman 2 seçeneğimiz var. Block ve None-Block seçimiblock

işlemli socketlerde bir sonraki gelen veri paketi cache socket belleğinde

tutulur. Aktif olan veri dosyaya yazıldıktan sonra cache socket belleğinden

alır ve böylece işlemler devam eder.. ( winsock topolojisi ). none-block seçimi

yaparsak cache bellekte veri tutulmaz. Gelen veri direkt işlenir. İşlenen bir

veri sırasında şayet ikinci bir veri paketi gelirse bu paket boşa gide çünkü

cache bellekte tutulmazburada şöyle bir sorun var, winsock cache bellek

dolar elbetbu durumda da aynen 3ün 1ini alırızbu sorunun düzeltilmesi

konusundaki bazı profesyonel yaklaşımları birkaç programda görmüştüm..

bunlardan en etkini de bildiğimiz icq ve msn dosya transferleri

 

7.Benim amacım cache belleğin dolmasına müsaade etmeden ping-pong

( paketi aldım-sonrakini gönder) mantığına göre veri paketlerini sırayla

göndermek. ( icqdaki file send speed olayı, 1-5 arası hız seçimi vardı

hatırlarsan.. olayın özü burada yani… )

 

......

 

"

 

delphi7 de nmstrm komponent serisi yok...

 

bir şekilde kodlama ile bunu yapmak zorundasınız,

veya diğer bir seçenek, indy nesnelerini kullanmanızı tavsiye ediyorum...

 

kolay gelsin.....

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "Delphi7 'de Fasnet kontrolleri yok"

"

Delphi7 'de Fasnet kontrolleri yok 28 Kasım 2005 21:32

 

Değerli delphi kullanıcıları. Benim gene size bir sorum olacak.

Ben delphi7 kullanıyorum. Ama Fasnet kontrollerini bir türlü bulamadım.

Nasıl alabilirim. Lütfen yardım edin.

 

yi çalışamalar)

 

delphiibo

"

 

cevap:

 

ESKİ CEVABIMDAN ALINTIDIR:

 

"

DELPHI 6 daki   NMHTTP1   DELPHI 7 de  Hangi Compunent  Bugün 14:00

 

Herkese Merhabalar

 

Bu sitteden çok şey öğrendim Emeği geçen herkesten Allah Razı olsun.

 

Buraya Yine bir soru sormak için geldim.Bilen bir arkadaşım varsa

rica edecem.Ben önceden Delphi6 ile çalışıyordum.Bir mesaj gönderme

programı vardı.Hatta o program burada da var.

 

Delphi 7 ye geçince çalışmaz oldu.Çünkü bazı Compunentler çalışmıyor

 

Ben şimdi Bu delpi 6 daki NMHTTP Compunenti Delphi7de Ne ? idhttp ye

bakıyorum.Orada get pos yok.

Bu delphi 7 de Nasıl değişiklik yapacam konusunda bir bilgisi olan varmı acaba.

Şimdiden teşekkürler.

 

Mert_

"

 

cevap:

 

alıntıdır: ( nmstrm hakkında genel )

"

Written by neoturk - 02.01.2004

 

1.Internet programcılığı ile uğraşıyor isek ( bu trojan veya her neyse fark etmez )

kesinlikle ve kesinlikle DOSYA TRANSFERİ olayının %100 sorunsuz olarak

çözülmesi gerekiyor. Çünkü bağlantı sağlanmasında bir problem yok,

ancak er ya da geç dosya transfer olayına ihtiyaç duyulacak!

Bunun için bu konunun bizzat çözümlenmesi ve kendi mantığımıza göre işleme

geçmesi gerekiyor.

 

2.Delphi olsun CBuilder olsun, bu programlama dillerinde dosya transfer

işini gören NMSTRM adlı komponent (paket) serisi var. Hemen hemen

tüm programcılar bu komponentleri kullanırlar.

( Çok önemli dip not: Okuduğum birçok delphi kitabında

(okumadığımı yok denecek kadar parmakla gösterebilirim) dosya transfer örneklerini

nedense hep nmstrm komponentleri üzerinde anlatırlar.

Oradaki örneklerde dosya transferleri çalışır. Oturur yazarsın ve her şeyin

çalıştığını görünce bir şeyler öğrendiğini sanırsın.. doğrudur..

ama Level2'ye geçtiğinde NMSTRM komponentlerinin yetersiz

olduğunu ben dahil deneyimli coderler er geç fark etmişlerdir

Bu nedenle oturup adam gibi kodunu kendin yazmalısın..

( icq gibi, paltalk gibi.. )

 

3.Örnek trojanlar incelendiğinde nedense çoğunda dosya transfer olayının

nasıl yapıldığı gösterilmemiştir. Bunu gösteren tek örnek trojan kodu LATINUS

trojanıdır. ( tek tük bazı trojanlarda da mevcut ancak tarihi eser

kalıntılarıyla dolu ve çalışmayan kod parçacıklarıdır )

 

4.Latinus trojanındaki dosya transfer işlemi Multi-File yöntemini

destekleyen şekilde transfere müsaade ediyor, ama kullanımı pek etkin değil..

denedim kullandım çalıştırdım ama etkin değil.. hangi dosyanın ne zaman

vardığı, nereye gittiği Allah kerim.. gidiyor dosyalar ve direkt temp

klasörüne kopyası çıkartılıyor.. kodu yazan adam biraz kulağını

SAĞ'dan göstermiş.. welhasıl pek verimli bir kod değil…

 

5.Dosya göndermek gerçekten önemli bir konu, nedenine gelince,

coderlerin %99'u ( abartmıyorum ) nmstrm komponentini kullanırlar

ve kullanacaklardır. Oturup sıfırdan kodunu yazması inan kasıyor

işin komik yanı da network içinden dışarıya bağlantı yapıldığında

nmstrm componentleri dosya transferlerini yapamıyor..

bunu ya bilerek es geçtiler ya da unuttular..

çünkü bizim daha önceki yazdığımız tüm versiyonlarda nmstrm komponentlerini

kullanmıştım. O yüzden network-dialup arasındaki dosya transferleri

olmuyordu. ( network içinden evdeki pcye bağlantı örneğinde olduğu gibi )

( ama msn veya icq bunu gayet güzel yapıyor değil mi ? )

 

6.Çok ince bir nuans daha var, tcp/ip ( socketler ) üzerinden dosya

göndereceğimiz zaman 2 seçeneğimiz var. Block ve None-Block seçimiblock

işlemli socketlerde bir sonraki gelen veri paketi cache socket belleğinde

tutulur. Aktif olan veri dosyaya yazıldıktan sonra cache socket belleğinden

alır ve böylece işlemler devam eder.. ( winsock topolojisi ). none-block seçimi

yaparsak cache bellekte veri tutulmaz. Gelen veri direkt işlenir. İşlenen bir

veri sırasında şayet ikinci bir veri paketi gelirse bu paket boşa gide çünkü

cache bellekte tutulmazburada şöyle bir sorun var, winsock cache bellek

dolar elbetbu durumda da aynen 3ün 1ini alırızbu sorunun düzeltilmesi

konusundaki bazı profesyonel yaklaşımları birkaç programda görmüştüm..

bunlardan en etkini de bildiğimiz icq ve msn dosya transferleri

 

7.Benim amacım cache belleğin dolmasına müsaade etmeden ping-pong

( paketi aldım-sonrakini gönder) mantığına göre veri paketlerini sırayla

göndermek. ( icqdaki file send speed olayı, 1-5 arası hız seçimi vardı

hatırlarsan.. olayın özü burada yani… )

 

......

 

"

 

delphi7 de nmstrm komponent serisi yok...

 

bir şekilde kodlama ile bunu yapmak zorundasınız,

veya diğer bir seçenek, indy nesnelerini kullanmanızı tavsiye ediyorum...

 

kolay gelsin.....

 

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

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

 

neoturk: Forum - "Edit Server"

"

Edit Server 28 Kasım 2005 20:58

 

Arkadaşlar hep soru sorup sizleride rahatsız ediyorum ama affedin.

Bu seferki sorum şöyle.Program açıldığı zaman mail atıyo.

Programda şöyle bi kod var

NMSMTP1.PostMessage.ToAddress.Text := 'hackman_76@hotmail.com';

Şimdi ben delphide başka bi program yazıp bu kodu nasıl deyiştirebilirim.

yani mailin hackman_76@hotmail.com değilde sonradan programla yazavağım adrese

gelsesini nasıl sağlayabilirimimdiden teşekkürler.

 

MK-Programing

"

 

cevap:

 

merhaba,

 

sorunu tam olarak anlamadım,

 

hazır kaynak kod elinde mevcut ise;

istediğin mail adresini oraya belirtebilirsin.

 

exe halindeki bir dosyanın içerisinde böyle bir string geçiyor ise

( hex editör ile baktıysan veya gördüysen )

tekrar hex editör ile [ 10 karakter @ hotmail. com ] şeklinde

düzeltmen gerek. eksik ya da fazla olmamalı.. aksi halde

mantıksal hata verebilir...

( boşluk bırakılırsa bile hataya sebebiyet verebilir )

(hackman_76 --> 10 karakter uzunluğunda olduğu için)

 

kolay gelsin....

 

saygılarımla_

 

neoturk_

 

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

 

neoturk: Forum - "Edit Server"

"

Edit Server 28 Kasım 2005 20:58

 

Arkadaşlar hep soru sorup sizleride rahatsız ediyorum ama affedin.

Bu seferki sorum şöyle.Program açıldığı zaman mail atıyo.

Programda şöyle bi kod var

NMSMTP1.PostMessage.ToAddress.Text := 'hackman_76@hotmail.com';

Şimdi ben delphide başka bi program yazıp bu kodu nasıl deyiştirebilirim.

yani mailin hackman_76@hotmail.com değilde sonradan programla yazavağım adrese

gelsesini nasıl sağlayabilirimimdiden teşekkürler.

 

MK-Programing

"

 

cevap:

 

merhaba,

 

sorunu tam olarak anlamadım,

 

hazır kaynak kod elinde mevcut ise;

istediğin mail adresini oraya belirtebilirsin.

 

exe halindeki bir dosyanın içerisinde böyle bir string geçiyor ise

( hex editör ile baktıysan veya gördüysen )

tekrar hex editör ile [ 10 karakter @ hotmail. com ] şeklinde

düzeltmen gerek. eksik ya da fazla olmamalı.. aksi halde

mantıksal hata verebilir...

( boşluk bırakılırsa bile hataya sebebiyet verebilir )

(hackman_76 --> 10 karakter uzunluğunda olduğu için)

 

kolay gelsin....

 

saygılarımla_

 

neoturk_

 

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

 

neoturk: Forum - "xxnt03 hocamın dikkatine..."

"

xxnt03 hocamın dikkatine... 28 Kasım 2005 19:40

 

hocam vermiş olduğun kodu bu şekilde düzenledim program çalışıyor

ama ilgili kayıtları listboxta göstermiyor...

 

procedure listbox_icinde_ara(l1aciklama:tlistbox;aranan:string;var sonuc:Tstringlist);

var m:integer;x:string;

begin

sonuc.clear;

for m:=0 to l1aciklama.items.count-1 do

    begin

    x:=l1aciklama.items[m];

    if x=aranan then sonuc.add(inttostr(m+1)+'-'+x);

    end;

end;

 

 

procedure Tanaform.BitBtn28Click(Sender: TObject);

 

var tx:tstringlist;

begin

tx:=tstringlist.create;

tx.clear;listbox_icinde_ara(l1aciklama,'DISKET',tx);

l1aciklama.items.assign(tx);

end;

 

memolipascal

"

 

cevap:

 

merhaba,

 

önceki kodlamamda ufak bir hatam oldu gözümden kaçırdım,

tlistbox:listbox yazmışım, ( hızlı cevap verdiğim için )

listbox:Tlistbox olarak yer değişecek. zaten sen de değiştirmişsin,

tekrar düzeltiyorum,

 

 

{************** büyük harfe çeviren fonksiyon **************************}

function bh(x:string):string;

var m:integer;t1,t2:string;

begin

t1:='';t2:='';x:=trim(x);

for m:=1 to length(x) do

    begin

    if x[m]='ğ' then t2:='Ğ' else

    if x[m]='ü'then t2:='Ü' else

    if x[m]='ş'then t2:='Ş' else

    if x[m]='i'then t2:='İ' else

    if x[m]='ö'then t2:='Ö' else

    if x[m]='ç'then t2:='Ç' else

    if x[m]='ı'then t2:='I' else

       t2:=uppercase(x[m]);

    t1:=t1+t2;

    end;

bh:=t1;

end;

 

{********** belirtilen listbox içerisinde arama yapar ***********}

procedure listbox_icinde_ara(listbox:tlistbox;aranan:string;var sonuc:Tstringlist;aramamodu:byte);

var m:integer;x:string;

begin

sonuc.clear;

aranan:=bh(aranan);

for m:=0 to listbox.items.count-1 do

    begin

    x:=bh(listbox.items[m]);

    case aramamodu of

    1:if x=aranan then sonuc.add(inttostr(m+1)+'-'+x);

    2: if pos(aranan,x)>0 then sonuc.add(inttostr(m+1)+'-'+x);

    end;//case

    end;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

var tx:tstringlist;

begin

tx:=tstringlist.Create;

listbox_icinde_ara(listbox1,'DISKET',tx,2);

memo1.text:=tx.text;

//veya listbox9.items.assign(tx);

tx.Free;

end;

 

arama modu diye bi parametre ekledim,

1 dersen "DISKET" ile başlayanları listeler

2 dersen "DISKET" içerenleri listeler.

 

şu anda kodu test ettim ve %100 olarak çalışıyor.

 

önceki kodlamamdan kaynaklı "Tlistbox:listbox" ibaresi hızlı yazdığım için

hatalıydı. daha sonra farkettim...

 

şimdi durum OK_

 

kolay gelsin..

 

saygılarımla_

 

neoturk_

 

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

"

çok teşekkür ederim hocam

 

memolipascal

 

"

 

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

 

rica ederim....

 

ne demek..................

 

neoturk_

 

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

 

neoturk: Forum - "xxnt03 hocamın dikkatine..."

"

xxnt03 hocamın dikkatine... 28 Kasım 2005 19:40

 

hocam vermiş olduğun kodu bu şekilde düzenledim program çalışıyor

ama ilgili kayıtları listboxta göstermiyor...

 

procedure listbox_icinde_ara(l1aciklama:tlistbox;aranan:string;var sonuc:Tstringlist);

var m:integer;x:string;

begin

sonuc.clear;

for m:=0 to l1aciklama.items.count-1 do

    begin

    x:=l1aciklama.items[m];

    if x=aranan then sonuc.add(inttostr(m+1)+'-'+x);

    end;

end;

 

 

procedure Tanaform.BitBtn28Click(Sender: TObject);

 

var tx:tstringlist;

begin

tx:=tstringlist.create;

tx.clear;listbox_icinde_ara(l1aciklama,'DISKET',tx);

l1aciklama.items.assign(tx);

end;

 

memolipascal

"

 

cevap:

 

merhaba,

 

önceki kodlamamda ufak bir hatam oldu gözümden kaçırdım,

tlistbox:listbox yazmışım, ( hızlı cevap verdiğim için )

listbox:Tlistbox olarak yer değişecek. zaten sen de değiştirmişsin,

tekrar düzeltiyorum,

 

 

{************** büyük harfe çeviren fonksiyon **************************}

function bh(x:string):string;

var m:integer;t1,t2:string;

begin

t1:='';t2:='';x:=trim(x);

for m:=1 to length(x) do

    begin

    if x[m]='ğ' then t2:='Ğ' else

    if x[m]='ü'then t2:='Ü' else

    if x[m]='ş'then t2:='Ş' else

    if x[m]='i'then t2:='İ' else

    if x[m]='ö'then t2:='Ö' else

    if x[m]='ç'then t2:='Ç' else

    if x[m]='ı'then t2:='I' else

       t2:=uppercase(x[m]);

    t1:=t1+t2;

    end;

bh:=t1;

end;

 

{********** belirtilen listbox içerisinde arama yapar ***********}

procedure listbox_icinde_ara(listbox:tlistbox;aranan:string;var sonuc:Tstringlist;aramamodu:byte);

var m:integer;x:string;

begin

sonuc.clear;

aranan:=bh(aranan);

for m:=0 to listbox.items.count-1 do

    begin

    x:=bh(listbox.items[m]);

    case aramamodu of

    1:if x=aranan then sonuc.add(inttostr(m+1)+'-'+x);

    2: if pos(aranan,x)>0 then sonuc.add(inttostr(m+1)+'-'+x);

    end;//case

    end;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

var tx:tstringlist;

begin

tx:=tstringlist.Create;

listbox_icinde_ara(listbox1,'DISKET',tx,2);

memo1.text:=tx.text;

//veya listbox9.items.assign(tx);

tx.Free;

end;

 

arama modu diye bi parametre ekledim,

1 dersen "DISKET" ile başlayanları listeler

2 dersen "DISKET" içerenleri listeler.

 

şu anda kodu test ettim ve %100 olarak çalışıyor.

 

önceki kodlamamdan kaynaklı "Tlistbox:listbox" ibaresi hızlı yazdığım için

hatalıydı. daha sonra farkettim...

 

şimdi durum OK_

 

kolay gelsin..

 

saygılarımla_

 

neoturk_

 

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

"

çok teşekkür ederim hocam

 

memolipascal

 

"

 

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

 

rica ederim....

 

ne demek..................

 

neoturk_

 

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

 

neoturk: Forum - "Firebird/Server-Client"

"

Firebird/Server-Client 28 Kasım 2005 19:14

 

Sorumuz event alert iyle ilgili;

Önce FDB ve bağlantılarla ilgili yapılanları yazayım:

IBXxpert tarafında

Server: Remote

server  name : 10.0.0.7

Modemde (e-con) virtual server 3050 tcp 10.0.0.7 makinemizin ip si işlemi yapıldı.

Prtotokol : TCP/IP

Server Version : Firebird 1.5

Database File :C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

alias: 10.0.0.7:C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

 

İstanbul'dan makine ip 10.0.0.0 yerine modem ip si ile bağlandı. modem ip virtual server ile makine ip sine yönlendirildi.ibexpert le bağlanıldı.

82.115.57.222:C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

Aynı anda bizde yukarıdaki işlem le bağlandık.

 

Denetim masası güvenlik duvarından adnan adında 3050 port (bağlantı noktası) açıldı.

Yerel makineler sunucupaylaşımadıdatabase yolu ile bağlandı.

Ana makina : C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB ile bağlandı.

IBDatabase connection local olarak.

Terminal ise;

PcHAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

database editor ;

Connection : Remote

Server : Pc (Sunucu adı -> yani bilgisayar adı)

Protokol :NamedPipe

Database :HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

PcHAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

 

Bu şekil bir bağlantı çalışıyor.

İki tarafta da FB.Server kurulu.

serverdeki ve terminaldeki programda ibevents1 var.

 

Trigger ismi:EKLEME_VAR o da object inspectorden IBEvents in strings ine eklendi.

 

procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: String;

  EventCount: Integer; var CancelAlerts: Boolean);

begin

ShowMessage('Stok Listesinde: "' + EventName +

  '", Hareket Adedi: ' + IntToStr(EventCount));

IBDataSet1.Close;

 

IBDataSet1.Open;

end;

BİZİM SORUMUZ ŞU

Lokal durumda sorun yok çalışıyor. Ancak internet bağlantısında kilitlenme oluyor.

Terminal makinede IBEvents i autoregister TRUE yaparsak, kilitlenme oluyor. Eğer terminal makinede Autoregister False olursa problem yok.

 

Her iki tarafta çok güzel çalışıyor. Ama terminal veri girişlerinde anlık değişmeleri göremiyor. Refresh yapması lazım.

 

Acaba bu kilitlenme neden yapabilir???

 

menderes

"

 

cevap:

 

merhaba,

 

teknik detayınız için teşekkür ederim.

 

sorunuza tam olarak cevap veremeyeceğim...

 

IBserver modelini ben de local network üzerinde denemiştim

ve çalıştırmıştım. Remote olarak herhangi bir denemem olmamıştı.

 

konuya uzak da alıntı bir cevabımı yazıyorum:

 

"

Bugün 15:17

online bağlantı yaparak 2 bilgisayarın veri tabanlarını tek bir

alanda tutmak

 

Arakadaşlar olayın genel özetini açıklayım 2 kullanıcı başka illerde

olup ikiside tek  veri tabanını kullanarak bu programda girdikleri

yeni biligileri ve düzeltmeleri anında görmek istemektedirler bu olayı

bazı arkadaşlar Statik IP vererek server a digerleride bu IP direk bağlanarak

bunu yapabileceklerini söylediler ama tam olarak nasıl yapılacağı konusunda

bilgim olmadığı için bu konuda yönelme yapamadım.

 

mertgenc

"

 

cevap:

 

güzel sorunuz için teşekkür ediyorum....

 

Bu konuda 6 ay önce kurumlar arası ortak bir veritabanı sorgulama

ve kayet ekleme modülünü tcp/ip üzerinden yapmıştım.

tecrübelerimi aktarmak istiyorum:

 

 

**********

YÖNTEM - 1

**********

tcp/ip (socket programming) üzerinden yapmaya karar verir iseniz şayet,

sistem gereksinimleriniz şunlar olacaktır:

 

1. ana veri tabanının bulunduğu bir pc ve bu pc ye internet üzerinden

   erişim sağlayacak static bir IP numarası ve izin verilmiş bir port

   ( fw programlarına da izin verilmesi icab ediyor server üzerinde )

 

2. veri tabanı olarak ben access kullanmıştım, performansı fena değil.

 

3. client pc lere sizin yazacağınız local programınız ve pclerin internet bağlantısı

   olmak zorundadır.

 

ben böyle bir programı yazdığımda, istekleri yerine getiriyordu,

ama şu sorunlarla karşılaşmıştım, daha sonra ilave yamalarla oldukça

detaylı ( mecburen ) ilave kodlarla süslemiştim.

 

karşılaştığım problemler:

 

1. ilk başta bağlantı olayını toz pembe görmüştüm,

   ancak daha sonra gereksiz kişilerin de bu IP ye ve porta

   saldırı yaptıklarında sistemin devre dışı kaldığını ( çuvalladığını )

   farkettim. Dolayısıyla "ban"lama sistemi ekledim ve

   sistem otomatik olarak atıyorum 10 kere bağlanıp kopmuşsa,

   veya gereksiz flood çekiliyorsa kafadan "ban"lıyordu, ve

   o IP yi devre dışı bırakıyordu. bir nevi mantıksal ve yazılımsal fw

   sistemi gibiydi. bu mantığı programa belirttikten sonra rahatladı durum.

 

2. her önüne gelen kişi client programınız ile bağlanamamalı.

   çünkü o zaman işlemler ve hatlar karışabiliyor.

   bu sorunu da "kullanıcı ismi" ve "yetki şifresi" giriş yöntemi ile

   düzenledim ve faydasını gördüm. dolayısıyla client programınız

   dışarıya izinsiz dağıtıldığında bile, kullanıcı adı ve şifresi doğru

   girilmediği sürece ( server üzerine ) kafadan ban listesine o ip yi

   ve akabinde belli bir tekrardan sonra o kişinin tüm haklarını ( hangi

   IP den bağlanırsa bağlansın ) ban listesine alıyordum.

   bu da durumu düzeltti bir nevi

 

3. bazen hatların yoğun olmasından dolayı, client-server arasındaki veri kümeleri

   eksik gidebiliyor veya gaibe gidebiliyor. bu durumda da client programınızı

   son derece hatalara karşı korumalı yazmalısınız. derin düşünüp, gereken

   işlemin gerçekten yaptırılıp yaptırmadığını tekrardan server üzerinden

   öğrenmeniz gerekiyor. aksi halde client programınız "işleminiz yapılıyor

   lütfen bekleyiniz" mesajı ile sonsuz döngüde bekler ve donar kalır...

   (sebebi bilinmeyen bir nedenden ötürü komut yerine getirilememiş olabiliyor )

 

4. server programınızı son derece dikkatli ve esnek kodlamanız gerekmektedir.

   ilk başta veri tabanı yönetimsel araçlarınızı ve alt fonksiyonlarınızı

   kusursuz olarak çalıştığından emin olun. daha sonra client bağlantıları

   ve bunların yönetimlerini ele alın.

 

5. verilerin servere yazılması ve aktarılması ister mesaj yönetmiyle, isterseniz

   dosya gönderme yöntemi ile yaptırabilirsiniz. ben her ikisini de kullanmıştım.

   ve işlem karmaşıklığına izin vermemiştim. giden veri paketi nereye gideceğini

   hangi yere yazılacağını biliyor ve karşılıklı olarak paslaşıyorlardı.

   (işlemi yaptım-tamam-sıradaki emir nedir vs.)

 

6. client programınız uzaktan sorgu çektiğinde, server programı sorgu sonuç

   listesini yeni bir access dosyası olarak yazıyor, ve bu access dosyasını da

   client programı alıp, kendi local pc sinde dbgird üzerine yapıştırıyordu.

   dolayısıyla herşey çok güzel halloluyordu.

   (beni kızdıran kitapların bir çoğunda bu yöntemi html olarak web sayfası

   üzerinde listelettiriyorlardı ama ne kadar gereksiz olduğunu siz de anlayacaksınız

   ve saçma sapan 1000lerce kaydın tek bir sayfada gösterilmesinin ve hiç bir hakimiyet

   kurulamamasının vereceği gülünç duruma düşmemeniz için,

   söylediğim gibi sorgu sonuç listesini client programınız local pc ye indirsin,

   ve dbgrid üzerinde local olarak sql ile sorgularına yine devam ettirsin.)

 

7. kabaca karşılaşacağınız problemler bunlar olacaktır.

   gerekli kod detaylarını şu an için veremeyeceğim. kabaca anlatmaya çalıştım.

 

8. tcp/ip yöntemi bu işler için çok verimli DEĞİLDİR. çuvallamaya müsaid bir yapıdır.

   ( çok kullanıcı olduğu zaman )

 

 

socket programlama ve işlemlerin karmaşıklığını hizaya getirmek zordur........

 

**********

YÖNTEM - 2

**********

 

sorduğunuz sorunun cevabı tam olarak "COM" ( common object module)

yöntemine girer. Bunu mutlaka günün birinde kullanacaksınız.

 

henüz tam verimiyle kullanmadım, bu yüzden bunun eğitimini alıyorum.

 

amaç, uzaktan veri tabanı modellerine bağlanmak, sorgulamak, veri kaydetmek vs...

 

toparlanmış haline de "DOTNET"(.NET) diyoruz....

 

seçim sizindir...................

 

tcp/ip konusunda böyle bir çalışmaya başlamanızı öneriyorum.

 

Çok şey öğreneceksiniz emin olun ....

 

"alt tabandan gelmiş bir eğitim en mükemmel eğitimdir"

 

pek yardımım olamadım, ama nacizane tecrübelerimi aktarmak istedim.....

 

kolay gelsin...........

 

 

saygılarımla_

 

neoturk [xxnt03@lycos.co.uk ]

 

 

"

İlginiz ve sabrınız için çok teşekkür ederim.Bu konuyu 4-5 foruma yazdım.

Sadece başka bir forumda daha cevap yazılmış ama o veritabanları yolunun

burada verilmemesi gibi bir şey yazmış üzüldüm tabi.Fakat Sizin yazınızla

onore oldum. Delphi Türk e bu arada tekrar teşekkür ederim.

 

Aslında bizim ana sorun serverde veya terminalde yapılan veri

değişikliklerinden tüm terminallerin anında haber alması.

Yani kimse ilgili değişikliği görmek için ilgili tableyi manuel

olarak açıp kapatmasın. Tabiki illa yukarıda yazdığımız gibi olacak diye

bir şey yok başka alternatifler de olabilir.

 

menderes

"

 

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

 

neoturk: Forum - "Firebird/Server-Client"

"

Firebird/Server-Client 28 Kasım 2005 19:14

 

Sorumuz event alert iyle ilgili;

Önce FDB ve bağlantılarla ilgili yapılanları yazayım:

IBXxpert tarafında

Server: Remote

server  name : 10.0.0.7

Modemde (e-con) virtual server 3050 tcp 10.0.0.7 makinemizin ip si işlemi yapıldı.

Prtotokol : TCP/IP

Server Version : Firebird 1.5

Database File :C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

alias: 10.0.0.7:C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

 

İstanbul'dan makine ip 10.0.0.0 yerine modem ip si ile bağlandı. modem ip virtual server ile makine ip sine yönlendirildi.ibexpert le bağlanıldı.

82.115.57.222:C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

Aynı anda bizde yukarıdaki işlem le bağlandık.

 

Denetim masası güvenlik duvarından adnan adında 3050 port (bağlantı noktası) açıldı.

Yerel makineler sunucupaylaşımadıdatabase yolu ile bağlandı.

Ana makina : C:HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB ile bağlandı.

IBDatabase connection local olarak.

Terminal ise;

PcHAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

database editor ;

Connection : Remote

Server : Pc (Sunucu adı -> yani bilgisayar adı)

Protokol :NamedPipe

Database :HAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

PcHAYSOFT_YZLHaysoft_CLSdataDENEME.FDB

 

Bu şekil bir bağlantı çalışıyor.

İki tarafta da FB.Server kurulu.

serverdeki ve terminaldeki programda ibevents1 var.

 

Trigger ismi:EKLEME_VAR o da object inspectorden IBEvents in strings ine eklendi.

 

procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: String;

  EventCount: Integer; var CancelAlerts: Boolean);

begin

ShowMessage('Stok Listesinde: "' + EventName +

  '", Hareket Adedi: ' + IntToStr(EventCount));

IBDataSet1.Close;

 

IBDataSet1.Open;

end;

BİZİM SORUMUZ ŞU

Lokal durumda sorun yok çalışıyor. Ancak internet bağlantısında kilitlenme oluyor.

Terminal makinede IBEvents i autoregister TRUE yaparsak, kilitlenme oluyor. Eğer terminal makinede Autoregister False olursa problem yok.

 

Her iki tarafta çok güzel çalışıyor. Ama terminal veri girişlerinde anlık değişmeleri göremiyor. Refresh yapması lazım.

 

Acaba bu kilitlenme neden yapabilir???

 

menderes

"

 

cevap:

 

merhaba,

 

teknik detayınız için teşekkür ederim.

 

sorunuza tam olarak cevap veremeyeceğim...

 

IBserver modelini ben de local network üzerinde denemiştim

ve çalıştırmıştım. Remote olarak herhangi bir denemem olmamıştı.

 

konuya uzak da alıntı bir cevabımı yazıyorum:

 

"

Bugün 15:17

online bağlantı yaparak 2 bilgisayarın veri tabanlarını tek bir

alanda tutmak

 

Arakadaşlar olayın genel özetini açıklayım 2 kullanıcı başka illerde

olup ikiside tek  veri tabanını kullanarak bu programda girdikleri

yeni biligileri ve düzeltmeleri anında görmek istemektedirler bu olayı

bazı arkadaşlar Statik IP vererek server a digerleride bu IP direk bağlanarak

bunu yapabileceklerini söylediler ama tam olarak nasıl yapılacağı konusunda

bilgim olmadığı için bu konuda yönelme yapamadım.

 

mertgenc

"

 

cevap:

 

güzel sorunuz için teşekkür ediyorum....

 

Bu konuda 6 ay önce kurumlar arası ortak bir veritabanı sorgulama

ve kayet ekleme modülünü tcp/ip üzerinden yapmıştım.

tecrübelerimi aktarmak istiyorum:

 

 

**********

YÖNTEM - 1

**********

tcp/ip (socket programming) üzerinden yapmaya karar verir iseniz şayet,

sistem gereksinimleriniz şunlar olacaktır:

 

1. ana veri tabanının bulunduğu bir pc ve bu pc ye internet üzerinden

   erişim sağlayacak static bir IP numarası ve izin verilmiş bir port

   ( fw programlarına da izin verilmesi icab ediyor server üzerinde )

 

2. veri tabanı olarak ben access kullanmıştım, performansı fena değil.

 

3. client pc lere sizin yazacağınız local programınız ve pclerin internet bağlantısı

   olmak zorundadır.

 

ben böyle bir programı yazdığımda, istekleri yerine getiriyordu,

ama şu sorunlarla karşılaşmıştım, daha sonra ilave yamalarla oldukça

detaylı ( mecburen ) ilave kodlarla süslemiştim.

 

karşılaştığım problemler:

 

1. ilk başta bağlantı olayını toz pembe görmüştüm,

   ancak daha sonra gereksiz kişilerin de bu IP ye ve porta

   saldırı yaptıklarında sistemin devre dışı kaldığını ( çuvalladığını )

   farkettim. Dolayısıyla "ban"lama sistemi ekledim ve

   sistem otomatik olarak atıyorum 10 kere bağlanıp kopmuşsa,

   veya gereksiz flood çekiliyorsa kafadan "ban"lıyordu, ve

   o IP yi devre dışı bırakıyordu. bir nevi mantıksal ve yazılımsal fw

   sistemi gibiydi. bu mantığı programa belirttikten sonra rahatladı durum.

 

2. her önüne gelen kişi client programınız ile bağlanamamalı.

   çünkü o zaman işlemler ve hatlar karışabiliyor.

   bu sorunu da "kullanıcı ismi" ve "yetki şifresi" giriş yöntemi ile

   düzenledim ve faydasını gördüm. dolayısıyla client programınız

   dışarıya izinsiz dağıtıldığında bile, kullanıcı adı ve şifresi doğru

   girilmediği sürece ( server üzerine ) kafadan ban listesine o ip yi

   ve akabinde belli bir tekrardan sonra o kişinin tüm haklarını ( hangi

   IP den bağlanırsa bağlansın ) ban listesine alıyordum.

   bu da durumu düzeltti bir nevi

 

3. bazen hatların yoğun olmasından dolayı, client-server arasındaki veri kümeleri

   eksik gidebiliyor veya gaibe gidebiliyor. bu durumda da client programınızı

   son derece hatalara karşı korumalı yazmalısınız. derin düşünüp, gereken

   işlemin gerçekten yaptırılıp yaptırmadığını tekrardan server üzerinden

   öğrenmeniz gerekiyor. aksi halde client programınız "işleminiz yapılıyor

   lütfen bekleyiniz" mesajı ile sonsuz döngüde bekler ve donar kalır...

   (sebebi bilinmeyen bir nedenden ötürü komut yerine getirilememiş olabiliyor )

 

4. server programınızı son derece dikkatli ve esnek kodlamanız gerekmektedir.

   ilk başta veri tabanı yönetimsel araçlarınızı ve alt fonksiyonlarınızı

   kusursuz olarak çalıştığından emin olun. daha sonra client bağlantıları

   ve bunların yönetimlerini ele alın.

 

5. verilerin servere yazılması ve aktarılması ister mesaj yönetmiyle, isterseniz

   dosya gönderme yöntemi ile yaptırabilirsiniz. ben her ikisini de kullanmıştım.

   ve işlem karmaşıklığına izin vermemiştim. giden veri paketi nereye gideceğini

   hangi yere yazılacağını biliyor ve karşılıklı olarak paslaşıyorlardı.

   (işlemi yaptım-tamam-sıradaki emir nedir vs.)

 

6. client programınız uzaktan sorgu çektiğinde, server programı sorgu sonuç

   listesini yeni bir access dosyası olarak yazıyor, ve bu access dosyasını da

   client programı alıp, kendi local pc sinde dbgird üzerine yapıştırıyordu.

   dolayısıyla herşey çok güzel halloluyordu.

   (beni kızdıran kitapların bir çoğunda bu yöntemi html olarak web sayfası

   üzerinde listelettiriyorlardı ama ne kadar gereksiz olduğunu siz de anlayacaksınız

   ve saçma sapan 1000lerce kaydın tek bir sayfada gösterilmesinin ve hiç bir hakimiyet

   kurulamamasının vereceği gülünç duruma düşmemeniz için,

   söylediğim gibi sorgu sonuç listesini client programınız local pc ye indirsin,

   ve dbgrid üzerinde local olarak sql ile sorgularına yine devam ettirsin.)

 

7. kabaca karşılaşacağınız problemler bunlar olacaktır.

   gerekli kod detaylarını şu an için veremeyeceğim. kabaca anlatmaya çalıştım.

 

8. tcp/ip yöntemi bu işler için çok verimli DEĞİLDİR. çuvallamaya müsaid bir yapıdır.

   ( çok kullanıcı olduğu zaman )

 

 

socket programlama ve işlemlerin karmaşıklığını hizaya getirmek zordur........

 

**********

YÖNTEM - 2

**********

 

sorduğunuz sorunun cevabı tam olarak "COM" ( common object module)

yöntemine girer. Bunu mutlaka günün birinde kullanacaksınız.

 

henüz tam verimiyle kullanmadım, bu yüzden bunun eğitimini alıyorum.

 

amaç, uzaktan veri tabanı modellerine bağlanmak, sorgulamak, veri kaydetmek vs...

 

toparlanmış haline de "DOTNET"(.NET) diyoruz....

 

seçim sizindir...................

 

tcp/ip konusunda böyle bir çalışmaya başlamanızı öneriyorum.

 

Çok şey öğreneceksiniz emin olun ....

 

"alt tabandan gelmiş bir eğitim en mükemmel eğitimdir"

 

pek yardımım olamadım, ama nacizane tecrübelerimi aktarmak istedim.....

 

kolay gelsin...........

 

 

saygılarımla_

 

neoturk [xxnt03@lycos.co.uk ]

 

 

"

İlginiz ve sabrınız için çok teşekkür ederim.Bu konuyu 4-5 foruma yazdım.

Sadece başka bir forumda daha cevap yazılmış ama o veritabanları yolunun

burada verilmemesi gibi bir şey yazmış üzüldüm tabi.Fakat Sizin yazınızla

onore oldum. Delphi Türk e bu arada tekrar teşekkür ederim.

 

Aslında bizim ana sorun serverde veya terminalde yapılan veri

değişikliklerinden tüm terminallerin anında haber alması.

Yani kimse ilgili değişikliği görmek için ilgili tableyi manuel

olarak açıp kapatmasın. Tabiki illa yukarıda yazdığımız gibi olacak diye

bir şey yok başka alternatifler de olabilir.

 

menderes

"

 

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

 

neoturk: Forum - "listboxta istenen kaydı listelemede sorun...!"

"

selam hocam ya ben vermiş olduğun kodu programa uyarlayamadım...

 

 

sorun şu ..:

 

procedure listbox_icinde_ara(Tlistbox:listbox;aranan:string;

var sonuc:Tstringlist);

 

buradaki listbox  nedir diyor ?  hata veriyor.  listbox yazan yere kendi listbox

isimlerimide yazdım fakat olmadı ..

 

 

kodları ayrıntılı olarak yazarsan çok sevinirim.  şu

an kafam durmuş bir durum ve moralimde çok bozuldu ya

2 gün oldu aynı sorunla uğraşıyorum.

 

 

acaba kodlarda eksiklik mi var ? yardımlarını bekliyorum

 

saygılarımla...

 

vermiş olduğun kod aşağıda:

 

***********

Yöntem - 1

***********

 

> listbox1 içerisindeki tüm adı "neoturk" olanların listesinin çıkartılması

 

 

procedure listbox_icinde_ara(Tlistbox:listbox;aranan:string;

var m:integer;x:string;

begin

sonuc.clear;

for m:=0 to listbox.items.count-1 do

    begin

    x:=listbox.items[m];

    if x=aranan then sonuc.add(inttostr(m+1)+'-'+x); //büyük küçük harfe duyarlı

                                                     //bu kısmı düzenleyiniz.

                                                     //büyükharfe çeviren fonksiyon desteği ekleyiniz.

                                                     //bu şekilde taratma yapınız

                                                     //örnek buyukharf(x)=buyukharf(aranan) then ......

    end;

end;

 

 

kullanımı:

 

button1 onclick:

 

var tx:tstringlist;

begin

tx:=tstringlist.create;

tx.clear;listbox_icinde_ara(listbox1,'neoturk',tx);

showmessage(tx.text);// sıra numaralarıyla beraber bulunan kayıtları listeleyecek

//bu sonuç listesini isterseniz başka bir listboxa atamak isterseniz

//listbox2.items.assign(tx); şeklinde kullanabilirsiniz.

end;

 

memolipascal

"

 

cevap:

 

merhaba,

 

önceki kodlamamda ufak bir hatam oldu gözümden kaçırdım,

tlistbox:listbox yazmışım, ( hızlı cevap verdiğim için )

listbox:Tlistbox olarak yer değişecek. zaten sen de değiştirmişsin,

tekrar düzeltiyorum,

 

 

{************** büyük harfe çeviren fonksiyon **************************}

function bh(x:string):string;

var m:integer;t1,t2:string;

begin

t1:='';t2:='';x:=trim(x);

for m:=1 to length(x) do

    begin

    if x[m]='ğ' then t2:='Ğ' else

    if x[m]='ü'then t2:='Ü' else

    if x[m]='ş'then t2:='Ş' else

    if x[m]='i'then t2:='İ' else

    if x[m]='ö'then t2:='Ö' else

    if x[m]='ç'then t2:='Ç' else

    if x[m]='ı'then t2:='I' else

       t2:=uppercase(x[m]);

    t1:=t1+t2;

    end;

bh:=t1;

end;

 

{********** belirtilen listbox içerisinde arama yapar ***********}

procedure listbox_icinde_ara(listbox:tlistbox;aranan:string;var sonuc:Tstringlist;aramamodu:byte);

var m:integer;x:string;

begin

sonuc.clear;

aranan:=bh(aranan);

for m:=0 to listbox.items.count-1 do

    begin

    x:=bh(listbox.items[m]);

    case aramamodu of

    1:if x=aranan then sonuc.add(inttostr(m+1)+'-'+x);

    2: if pos(aranan,x)>0 then sonuc.add(inttostr(m+1)+'-'+x);

    end;//case

    end;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

var tx:tstringlist;

begin

tx:=tstringlist.Create;

listbox_icinde_ara(listbox1,'DISKET',tx,2);

memo1.text:=tx.text;

//veya listbox9.items.assign(tx);

tx.Free;

end;

 

arama modu diye bi parametre ekledim,

1 dersen "DISKET" ile başlayanları listeler

2 dersen "DISKET" içerenleri listeler.

 

şu anda kodu test ettim ve %100 olarak çalışıyor.

 

önceki kodlamamdan kaynaklı "Tlistbox:listbox" ibaresi hızlı yazdığım için

hatalıydı. daha sonra farkettim...

 

şimdi durum OK_

 

kolay gelsin..

 

saygılarımla_

 

neoturk_

 

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

 

neoturk: Forum - "listboxta istenen kaydı listelemede sorun...!"

"

selam hocam ya ben vermiş olduğun kodu programa uyarlayamadım...

 

 

sorun şu ..:

 

procedure listbox_icinde_ara(Tlistbox:listbox;aranan:string;

var sonuc:Tstringlist);

 

buradaki listbox  nedir diyor ?  hata veriyor.  listbox yazan yere kendi listbox

isimlerimide yazdım fakat olmadı ..

 

 

kodları ayrıntılı olarak yazarsan çok sevinirim.  şu

an kafam durmuş bir durum ve moralimde çok bozuldu ya

2 gün oldu aynı sorunla uğraşıyorum.

 

 

acaba kodlarda eksiklik mi var ? yardımlarını bekliyorum

 

saygılarımla...

 

vermiş olduğun kod aşağıda:

 

***********

Yöntem - 1

***********

 

> listbox1 içerisindeki tüm adı "neoturk" olanların listesinin çıkartılması

 

 

procedure listbox_icinde_ara(Tlistbox:listbox;aranan:string;

var m:integer;x:string;

begin

sonuc.clear;

for m:=0 to listbox.items.count-1 do

    begin

    x:=listbox.items[m];

    if x=aranan then sonuc.add(inttostr(m+1)+'-'+x); //büyük küçük harfe duyarlı

                                                     //bu kısmı düzenleyiniz.

                                                     //büyükharfe çeviren fonksiyon desteği ekleyiniz.

                                                     //bu şekilde taratma yapınız

                                                     //örnek buyukharf(x)=buyukharf(aranan) then ......

    end;

end;

 

 

kullanımı:

 

button1 onclick:

 

var tx:tstringlist;

begin

tx:=tstringlist.create;

tx.clear;listbox_icinde_ara(listbox1,'neoturk',tx);

showmessage(tx.text);// sıra numaralarıyla beraber bulunan kayıtları listeleyecek

//bu sonuç listesini isterseniz başka bir listboxa atamak isterseniz

//listbox2.items.assign(tx); şeklinde kullanabilirsiniz.

end;

 

memolipascal

"

 

cevap:

 

merhaba,

 

önceki kodlamamda ufak bir hatam oldu gözümden kaçırdım,

tlistbox:listbox yazmışım, ( hızlı cevap verdiğim için )

listbox:Tlistbox olarak yer değişecek. zaten sen de değiştirmişsin,

tekrar düzeltiyorum,

 

 

{************** büyük harfe çeviren fonksiyon **************************}

function bh(x:string):string;

var m:integer;t1,t2:string;

begin

t1:='';t2:='';x:=trim(x);

for m:=1 to length(x) do

    begin

    if x[m]='ğ' then t2:='Ğ' else

    if x[m]='ü'then t2:='Ü' else

    if x[m]='ş'then t2:='Ş' else

    if x[m]='i'then t2:='İ' else

    if x[m]='ö'then t2:='Ö' else

    if x[m]='ç'then t2:='Ç' else

    if x[m]='ı'then t2:='I' else

       t2:=uppercase(x[m]);

    t1:=t1+t2;

    end;

bh:=t1;

end;

 

{********** belirtilen listbox içerisinde arama yapar ***********}

procedure listbox_icinde_ara(listbox:tlistbox;aranan:string;var sonuc:Tstringlist;aramamodu:byte);

var m:integer;x:string;

begin

sonuc.clear;

aranan:=bh(aranan);

for m:=0 to listbox.items.count-1 do

    begin

    x:=bh(listbox.items[m]);

    case aramamodu of

    1:if x=aranan then sonuc.add(inttostr(m+1)+'-'+x);

    2: if pos(aranan,x)>0 then sonuc.add(inttostr(m+1)+'-'+x);

    end;//case

    end;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

var tx:tstringlist;

begin

tx:=tstringlist.Create;

listbox_icinde_ara(listbox1,'DISKET',tx,2);

memo1.text:=tx.text;

//veya listbox9.items.assign(tx);

tx.Free;

end;

 

arama modu diye bi parametre ekledim,

1 dersen "DISKET" ile başlayanları listeler

2 dersen "DISKET" içerenleri listeler.

 

şu anda kodu test ettim ve %100 olarak çalışıyor.

 

önceki kodlamamdan kaynaklı "Tlistbox:listbox" ibaresi hızlı yazdığım için

hatalıydı. daha sonra farkettim...

 

şimdi durum OK_

 

kolay gelsin..

 

saygılarımla_

 

neoturk_

 

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

 

neoturk: Forum - "msn messenger"

"

Messengerda bize gönderilen iletinin içeriğini delphide yapacağımız bir

programla kontrol edebilirmiyiz

yani eğer mesajın içinde küfür vs varsa mesaj bize ulaşmıyacak ve karşı

tarafa otomatik olarak

 

'iletinizin içinde "s*****m" kelimesi geçtiği için mesajınız iletilemedi'

 

diye mesaj gönderecek

bana bu iş biraz zor gibi geliyor

bu konuda fikri olan arkaşların mesajlarını bekliyorum

 

shafack

"

 

cevap:

 

merhaba,

 

piyasada dolaşan hazır msn dlllerini kullanan kodlar mevcuttur,

 

gelen giden mesaja müdahale edilebilmekte ve auto-mesaj yönlendirmesi yapılabilmektedir.

 

kaynak olarak herhangi bir site gösteremiyorum,

 

aratır iseniz bulabilirsiniz.

 

port dinleme ile bu iş olmaz. msn bu konuda ayrı bir mantık kullanıyor.

( xml destekli http protokolü kullanıyor )

( tcp yi dosya gönderme ve alma işlemleri için kullanıyor )

 

 

kolay gelsin....

 

saygılarımla_

 

neoturk_

 

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

 

neoturk: Forum - "msn messenger"

"

Messengerda bize gönderilen iletinin içeriğini delphide yapacağımız bir

programla kontrol edebilirmiyiz

yani eğer mesajın içinde küfür vs varsa mesaj bize ulaşmıyacak ve karşı

tarafa otomatik olarak

 

'iletinizin içinde "s*****m" kelimesi geçtiği için mesajınız iletilemedi'

 

diye mesaj gönderecek

bana bu iş biraz zor gibi geliyor

bu konuda fikri olan arkaşların mesajlarını bekliyorum

 

shafack

"

 

cevap:

 

merhaba,

 

piyasada dolaşan hazır msn dlllerini kullanan kodlar mevcuttur,

 

gelen giden mesaja müdahale edilebilmekte ve auto-mesaj yönlendirmesi yapılabilmektedir.

 

kaynak olarak herhangi bir site gösteremiyorum,

 

aratır iseniz bulabilirsiniz.

 

port dinleme ile bu iş olmaz. msn bu konuda ayrı bir mantık kullanıyor.

( xml destekli http protokolü kullanıyor )

( tcp yi dosya gönderme ve alma işlemleri için kullanıyor )

 

 

kolay gelsin....

 

saygılarımla_

 

neoturk_

 

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

 

neoturk: Forum - "Tlistview hakkinda bir soru.."

Tlistview hakkinda bir soru..

28 Kasım 2005 17:05

 

Arkadaslar, yapmakta oldugum program icin  TListView ile bu goruntuyu

elde etmem gerekiyor. Yalniz sekildekinin aksine disket surucu ve cdrom

gibi cikarilabilir suruculerin goruntulenmemesini istiyorum.

Kapasite ve bos kapasite icin diskfree,disksize komutlarindan baska

hangi komutlar kullanilabilir?

Yardimlariniz icin tesekkurler.

 

Not: Yardim edecek arkadaslar mumkunse hem diskfree hem de diger olasi komutlari soyleyebilirler mi?

 

bloodfloweur

"

 

listview nesnesinde imageleri kullanmak istiyor isen,

bir adet image list ekle ve forma yerleştir.

imageindex değerlerini döngü ile listview nesnesine kodlama ile

aktaracaksın. şu anda buna ilişkin bir kod gönderemiyorum.

( cd arşivime bakmam lazım )

 

 

eski programımda kullandığım disk kapasiteleri ve boş yer miktarlarına

ilişkin kod örnekleri aşağıdadır. kendine göre düzenleyeceksin.

( pc info adlı programımda aşağıdaki kodlarımı kullandım,

genel değişkenlerle bağlantılı olduğu için sadece function kodlarını belirttim.

kullandığım kodlama ve mantığa bakarak kendine göre düzenleyebilirsin )

 

 

//written by neoturk 2005

{*************** drivers info **********************}

function get_driversinfo(sender:Tobject):string;

const mb=1024*1024;

var

    n:integer;x:string;

    tx:tstringlist;

    dfree,used,total:string;

begin

tx:=tstringlist.Create;

for n:=3 to 10 do

begin

if directoryexists(chr(64+n)+':') then //c:

   begin

   x:='Drive '+chr(64+n)+': ';

   total:='Total: '+formatfloat('#,',trunc(disksize(n)/mb))+' MB';

   dfree:='Free : '+formatfloat('#,',trunc(diskfree(n)/mb))+' MB';

   used :='Used : '+formatfloat('#,',trunc(disksize(n)/mb)-trunc(diskfree(n)/mb))+' MB';

   tx.Add(x);

   tx.Add(total);

   tx.Add(dfree);

   tx.Add(used);

   end;

end;

//final

result:=tx.Text;

end;

 

 

{*************** drivers info **********************}

function get_driversinfo(sender:Tobject):string;

const mb=1024*1024;

var

    n:integer;x:string;

    tx:tstringlist;

    dfree,used,total:string;

begin

tx:=tstringlist.Create;

for n:=3 to 10 do

begin

if directoryexists(chr(64+n)+':') then //c:

   begin

   x:='Drive '+chr(64+n)+': ';

   total:='Total: '+formatfloat('#,',trunc(disksize(n)/mb))+' MB';

   dfree:='Free : '+formatfloat('#,',trunc(diskfree(n)/mb))+' MB';

   used :='Used : '+formatfloat('#,',trunc(disksize(n)/mb)-trunc(diskfree(n)/mb))+' MB';

   tx.Add(x);

   tx.Add(total);

   tx.Add(dfree);

   tx.Add(used);

   end;

end;

//final

result:=tx.Text;

end;

 

 

 

aşağıda listview örneklerini göreceksin.

 

ESKİ YAZIMDAN ALINTIDIR:

 

"

size birkaç sorum olacaktı

 

ben bi remote admin tool yapıyorum.Bayaa bi ilerledim.

Pano okuyup,yazma,klitleme...

pc biligisi alma...

dosya arama...

program çalıştırma...

chat...

uygulama gösterme kapatma

pencere gösterme maximize,minimize...

döküman yazdırma...

gibi birçok işlem yaptırabiliyorum ama takıldığım birkaç nokta var.

 

1_)Dosya yöneticisi yapamadım.yani 1 listview var ve 2 columnu

var.Dosya,kalasör adı ve boyutu die.

windows dosya ve klasörleri nasıl bu listviewda gösaterilir ve serverdan

clientte yollanır.Çünkü server client arası string işlem görürken tlistview

nasıl gönderilmeli

 

2Aynı şekilde Registry editörde takılıyorum.1combobox(drivelar

için),1listbox(anahtarlar için),1 listview yine 2 columnlu(1.column

ad,2.column veri).Yine fonksiyonel olmasını istiyorum.Serverdan cliennte

gelmeli yine.

 

3Nt Servisler üzerine yine 1 listview kullanmalıyım.msconfig teki nt

servisleri gibi bişi olmalı.

 

4Dosya gönderimi ile ilgili yazınızı okudum.ve uyguladım herşey okey fakat

app kapatılmadan dosya kullanılamıyor.

 

Bu konularda yardımcı olursanız sevinirim.iyi günler

"

 

cevap:

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

 

merhaba, bu konu hakkında bana birkaç mail geldi, burada bilgim dahilinde

yanıt vermeye çalışacağım,

 

uğraş alanım socket programlama olduğu için epeyce bişeyler yazabilirim,

ama vaktim ne kadar müsaid olursa o kadar yazabilirim, bir de aynı şeyleri

tekrarlamaktan kaçınacağım.

 

cevap1-2-3:

 

KURAL: Her türlü dosya transferini bir şekilde functionel hale getirmelisin,

örneğin ben şöyle kullanıyorum,

 

procedure Tform1.sendfiletoserver(sender:Tobject;terminalno:integer;sourcefile,targetfolder:string);

 

içeriğini kendime göre yazdığım için buraya paste etmedim,

 

kullanım mantığı şu şekilde yapıyorum,

sendfiletoserver(sender,1,'c:deneme.txt','c:windowstest.txt');

şeklinde kullandığım zaman dosya gönderme işlemini yapıyor.

önce sağlıklı olarak dosya gönderme olayını yapabilmelisin.

 

bu kısmı aştıktan sonra,

"..uyguladım herşey okey fakat app kapatılmadan dosya kullanılamıyor" diye

sormuşsun,

nedeni şu, ben o örneği kabaca anlattığım için açık olan dosyayı fileclose

yaptırmadım. bunu kendin koda manuel olarak söyletebilirsin.

yani dosya gönderme işlemi tamamlandıktan sonra server tarafı da client tarafı da

fileclose(dosyahandlesi) ile dosyayı kapatsın. sorun olmayacaktır.

 

bu kısmı da aştıktan sonra, ( dosya transfer olayı OK kabul ediyorum ),

 

her türlü dosyayı karşıya gönderebilir ve alabilirsin. bunu multy şekilde de

yaptırabilirsin hatta. ben epeyce abartı denemeler filan da yaptıydım.

kullandığım ve test ettiğim deneyimlerim şu şekilde olmuştu:

 

1) bire bir dosya gönderiyordum

2) dosyayı N adet parçaya böldürüp o kadar port üzerinden aynı anda send ediyordum

3) dosyayı zipleyip gönderiyordum upload tamamlandıktan sonra server bunu unzip yapıyordu

4) dosyayı N adet parçalara bölüp hepsini ayrı ayrı zipleyip aynı eş zamanlı N adet porttan

(o anda create edilmiş socketler ) gönderip server side kısmında hepsini unzip yapıp merge

yaptırıyordum.

5) aynı anda multy bu işlemleri N adet dosya için yaptırıyordum. hız son derece iyiydi.

(normal dosya transferine göre)

 

bunları pratikte denemen senin yararına olacaktır diye düşünüyorum arkadaşım,

epeyce socket programming konusuna ısınmış olursun.

 

gelelim listview olaylarına,

 

öncelikle, static listview tanımlamalarından kaçınmalısın,

yani şöyle,

2 kolonlu static olarak sabit çivi gibi listviewlerini tutma formda.

bırak içi boş kalsın. kolonlarını dinamik olarak kendisi düzenlesin,

 

ben şu şekilde kullanıyorum, diyelimki elimde bir .txt dosyası var ve içeriği,

 

name;size;attirbute;datetime

test.txt;1234;ah;01.08.2005

test2.txt;2356;ahrs;01.08.2005

.....

 

şeklinde bir text dosyası olsun.

( bu tür text dosyalarını genellikle findfiles procedurleriyle dosyaya

yazdırırken kendin dinamik oluşturuyorsundur zaten ! oluşturmuyorum deme )

 

daha sonra bu dosyanın ilk 1. satırını listviewin kolonlarına atama yapacaksın

böylece otomatik kolon isimleri dosyadan alınmış olacak. ne kadar şık dimi !

ben böyle kullanıyorum. 2.satır ve dosyanın sonuna kadar hemen okutup listview nesnesine

aktarıyorum. ( not: 1000 den fazla kayıtlar için listview nesnesi bira şişer )

 

dolayısıyla, önce listviewi her zaman sıfırlaman gerekiyor,

kodu da şu şekilde kullanabilirsin,

 

//listview2 kolonlarını sil

   listview2.Clear;

   while (listview2.Columns.Count>0) do listview2.Column[0].Destroy;

//dosyalistesi tstring nesnesinden elemanları yerleştir

xcaption:=dosyalistesi.strings[0]; //1.SATIRı aldım

xcaptionx.text:=getlines(xcaption,';');//1.SATIRI ; lerle ayırdım Tstringliste aktardım ( xcaptionx dedim)

//kolonların titlelerini otomatik yazdırıyorum

        for m:=0 to xcaptionx.count-1 do

                begin

                listview2.Columns.Add();

                listview2.Column[m].caption:=xcaptionx.Strings[m];

                listview2.Column[m].Width:=100;

                end;

//geri kalan satırları ekletiyorum

        for m:=1 to dosyalistesi.count-1 do

                begin

                listview2.items.Add();

                listview2.items[m-1].caption:= ... //buraları ayırdığın kelimelerle otomatik dolduracak

                listview2.items[m-1].subitems.add('...'); //

                listview2.items[m-1].subitems.add('...'); //

                end;

bu kodu sana kabaca fikir vermek için kullandım, kodu yorumlarsan kendin manuel kendine

uyarlayabilirsin. neyi nasıl yapacam deme yani.... bazı kısımların tanımlı olduğunu

farzettim. ( tstringlist tanımlamaların kelime ayraç procedurun vs ... )

 

 

";" sembolüne göre karakterleri parçalayan functionum şu şekilde benim,

 

{*********************** getlines ************************}

function getlines(x:string;apostrof:string):string;

var m,n,acount:integer;x2:string;tg:Tstringlist;

begin

//apostrof miktarını öğren

acount:=0;

n:=length(x);

for m:=1 to n do if x[m]=apostrof then inc(acount);

//apostrofları ayır

tg:=tstringlist.Create;

n:=acount;

if n>1 then

        begin

        for m:=1 to n do

                begin

                x2:=copy(x,1,pos(apostrof,x)-1);

                //form1.memo1.lines.add(inttostr(pos(apostrof,x))+apostrof);

                tg.add(trim(x2));

                //form1.memo1.lines.add(x2);

                x2:=copy(x,pos(apostrof,x)+1,9999);

                //showmessage('ok');

                x:=x2;

                end;

        tg.add(trim(x));

        end

        else tg.text:='';

for m:=1 to n do tg.Add('');

result:=tg.text;

tg.free;

//final

end;

 

kullanımı:

 

tempx.text:=getlines('cümle',';');

'cümle'nin ; lerle ayrılmış tüm kelimelerini Tstringlist olarak tanımladığım

tempx nesnesine aktarıyorum.

 

client tarafında dosyanın nasıl gönderildiğinin kabaca kodu aşağıdaki gibi:

 

fsrc := FileOpen(sourcefile,fmOpenRead);

fsize := FileSeek(fsrc,0,2);

FileSeek(fSrc,0,0);//başa konumlan

memo1.lines.add(inttostr(fsize)+' byte...');

memo1.lines.add('uploading...');

bytesent:=0;

sendfilegate1:=true;

size:=fsize;

sayac:=0;

while size>0 do

begin

application.ProcessMessages;

if (sendfilegate1) then//ping-pong

        begin

        len := FileRead(fSrc,buffer,sizeof(buffer));

        clientsocket1.Socket.SendBuf(buffer,len);//upload

        bytesent:=bytesent+len;

        size:=size-len;

        sendfilegate1:=false;//pong iste

        inc(sayac);

        end;

end;

fileclose(fsrc); //işte gönderilmiş dosyayı kapattım

 

kabaca dosya gönderme kodu bu. ping-ping olayını önceki yazılarımda anlatmıştım.

 

dosya göndermede bir başka teknik de şudur,

 

1)

serversocket1.Socket.SendStreamThenDrop(TFileStream.Create('c:deneme.txt', fmOpenRead or fmShareDenyWrite));

2)

fstrm:=TFileStream.Create('path+filename', fmOpenRead or fmShareDenyWrite);

serversocket1.Socket.connections[0].sendstreamthendrop(fstrm);

serversocket1.Open;

 

bu yöntem de çalışır. ama byte bazında veri kaybı oluyor bazen. yani sağlıklı olarak bazen göndermeyebiliyor.

ama ping-pong yönteminden daha hızlıdır. bu işi kendisi yapıyor zaten. ama dediğim gibi

bazen veri paket kayıpları olabiliyor. gerek windowstan gerek networkden...

 

bi de üst üste socketler açılarak multy dosya gönderme olayları filan var,

bu da epeyce kastırıyo. şu anda anlatcak durumda değilim mazur gör..

 

başka aklıma bişi gelmiyo...

 

aslında konu çok da ne bilim yazmak işime gelmiyo açıkçası...

 

bi de, nmstrm komponentleri xp de çalışmıyor bunu da biliyorsundur zaten.

hani oradaki uploadfile nesneleri filan var. onlar xp de yemiyor bilirsiniz.

bu yüzden herşey kodlamayla yapılacak. e bu da farkı ortaya koyuyor zaten.

iyi kodlama iyi teknik = başarılı bir ürün

 

hepinize çalışmalarınızda başarılar dilerim,

sağlıcakla kalın iyi günler,

 

"Türk Coderler her zaman zeki ve güçlüdür"

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

 

 

ESKİ YAZIMDAN ALINTIDIR:

 

"

size birkaç sorum olacaktı

 

ben bi remote admin tool yapıyorum.Bayaa bi ilerledim.

Pano okuyup,yazma,klitleme...

pc biligisi alma...

dosya arama...

program çalıştırma...

chat...

uygulama gösterme kapatma

pencere gösterme maximize,minimize...

döküman yazdırma...

gibi birçok işlem yaptırabiliyorum ama takıldığım birkaç nokta var.

 

1_)Dosya yöneticisi yapamadım.yani 1 listview var ve 2 columnu

var.Dosya,kalasör adı ve boyutu die.

windows dosya ve klasörleri nasıl bu listviewda gösaterilir ve serverdan

clientte yollanır.Çünkü server client arası string işlem görürken tlistview

nasıl gönderilmeli

 

2Aynı şekilde Registry editörde takılıyorum.1combobox(drivelar

için),1listbox(anahtarlar için),1 listview yine 2 columnlu(1.column

ad,2.column veri).Yine fonksiyonel olmasını istiyorum.Serverdan cliennte

gelmeli yine.

 

3Nt Servisler üzerine yine 1 listview kullanmalıyım.msconfig teki nt

servisleri gibi bişi olmalı.

 

4Dosya gönderimi ile ilgili yazınızı okudum.ve uyguladım herşey okey fakat

app kapatılmadan dosya kullanılamıyor.

 

Bu konularda yardımcı olursanız sevinirim.iyi günler

"

 

cevap:

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

 

merhaba, bu konu hakkında bana birkaç mail geldi, burada bilgim dahilinde

yanıt vermeye çalışacağım,

 

uğraş alanım socket programlama olduğu için epeyce bişeyler yazabilirim,

ama vaktim ne kadar müsaid olursa o kadar yazabilirim, bir de aynı şeyleri

tekrarlamaktan kaçınacağım.

 

cevap1-2-3:

 

KURAL: Her türlü dosya transferini bir şekilde functionel hale getirmelisin,

örneğin ben şöyle kullanıyorum,

 

procedure Tform1.sendfiletoserver(sender:Tobject;terminalno:integer;sourcefile,targetfolder:string);

 

içeriğini kendime göre yazdığım için buraya paste etmedim,

 

kullanım mantığı şu şekilde yapıyorum,

sendfiletoserver(sender,1,'c:deneme.txt','c:windowstest.txt');

şeklinde kullandığım zaman dosya gönderme işlemini yapıyor.

önce sağlıklı olarak dosya gönderme olayını yapabilmelisin.

 

bu kısmı aştıktan sonra,

"..uyguladım herşey okey fakat app kapatılmadan dosya kullanılamıyor" diye

sormuşsun,

nedeni şu, ben o örneği kabaca anlattığım için açık olan dosyayı fileclose

yaptırmadım. bunu kendin koda manuel olarak söyletebilirsin.

yani dosya gönderme işlemi tamamlandıktan sonra server tarafı da client tarafı da

fileclose(dosyahandlesi) ile dosyayı kapatsın. sorun olmayacaktır.

 

bu kısmı da aştıktan sonra, ( dosya transfer olayı OK kabul ediyorum ),

 

her türlü dosyayı karşıya gönderebilir ve alabilirsin. bunu multy şekilde de

yaptırabilirsin hatta. ben epeyce abartı denemeler filan da yaptıydım.

kullandığım ve test ettiğim deneyimlerim şu şekilde olmuştu:

 

1) bire bir dosya gönderiyordum

2) dosyayı N adet parçaya böldürüp o kadar port üzerinden aynı anda send ediyordum

3) dosyayı zipleyip gönderiyordum upload tamamlandıktan sonra server bunu unzip yapıyordu

4) dosyayı N adet parçalara bölüp hepsini ayrı ayrı zipleyip aynı eş zamanlı N adet porttan

(o anda create edilmiş socketler ) gönderip server side kısmında hepsini unzip yapıp merge

yaptırıyordum.

5) aynı anda multy bu işlemleri N adet dosya için yaptırıyordum. hız son derece iyiydi.

(normal dosya transferine göre)

 

bunları pratikte denemen senin yararına olacaktır diye düşünüyorum arkadaşım,

epeyce socket programming konusuna ısınmış olursun.

 

gelelim listview olaylarına,

 

öncelikle, static listview tanımlamalarından kaçınmalısın,

yani şöyle,

2 kolonlu static olarak sabit çivi gibi listviewlerini tutma formda.

bırak içi boş kalsın. kolonlarını dinamik olarak kendisi düzenlesin,

 

ben şu şekilde kullanıyorum, diyelimki elimde bir .txt dosyası var ve içeriği,

 

name;size;attirbute;datetime

test.txt;1234;ah;01.08.2005

test2.txt;2356;ahrs;01.08.2005

.....

 

şeklinde bir text dosyası olsun.

( bu tür text dosyalarını genellikle findfiles procedurleriyle dosyaya

yazdırırken kendin dinamik oluşturuyorsundur zaten ! oluşturmuyorum deme )

 

daha sonra bu dosyanın ilk 1. satırını listviewin kolonlarına atama yapacaksın

böylece otomatik kolon isimleri dosyadan alınmış olacak. ne kadar şık dimi !

ben böyle kullanıyorum. 2.satır ve dosyanın sonuna kadar hemen okutup listview nesnesine

aktarıyorum. ( not: 1000 den fazla kayıtlar için listview nesnesi bira şişer )

 

dolayısıyla, önce listviewi her zaman sıfırlaman gerekiyor,

kodu da şu şekilde kullanabilirsin,

 

//listview2 kolonlarını sil

   listview2.Clear;

   while (listview2.Columns.Count>0) do listview2.Column[0].Destroy;

//dosyalistesi tstring nesnesinden elemanları yerleştir

xcaption:=dosyalistesi.strings[0]; //1.SATIRı aldım

xcaptionx.text:=getlines(xcaption,';');//1.SATIRI ; lerle ayırdım Tstringliste aktardım ( xcaptionx dedim)

//kolonların titlelerini otomatik yazdırıyorum

        for m:=0 to xcaptionx.count-1 do

                begin

                listview2.Columns.Add();

                listview2.Column[m].caption:=xcaptionx.Strings[m];

                listview2.Column[m].Width:=100;

                end;

//geri kalan satırları ekletiyorum

        for m:=1 to dosyalistesi.count-1 do

                begin

                listview2.items.Add();

                listview2.items[m-1].caption:= ... //buraları ayırdığın kelimelerle otomatik dolduracak

                listview2.items[m-1].subitems.add('...'); //

                listview2.items[m-1].subitems.add('...'); //

                end;

bu kodu sana kabaca fikir vermek için kullandım, kodu yorumlarsan kendin manuel kendine

uyarlayabilirsin. neyi nasıl yapacam deme yani.... bazı kısımların tanımlı olduğunu

farzettim. ( tstringlist tanımlamaların kelime ayraç procedurun vs ... )

 

 

";" sembolüne göre karakterleri parçalayan functionum şu şekilde benim,

 

{*********************** getlines ************************}

function getlines(x:string;apostrof:string):string;

var m,n,acount:integer;x2:string;tg:Tstringlist;

begin

//apostrof miktarını öğren

acount:=0;

n:=length(x);

for m:=1 to n do if x[m]=apostrof then inc(acount);

//apostrofları ayır

tg:=tstringlist.Create;

n:=acount;

if n>1 then

        begin

        for m:=1 to n do

                begin

                x2:=copy(x,1,pos(apostrof,x)-1);

                //form1.memo1.lines.add(inttostr(pos(apostrof,x))+apostrof);

                tg.add(trim(x2));

                //form1.memo1.lines.add(x2);

                x2:=copy(x,pos(apostrof,x)+1,9999);

                //showmessage('ok');

                x:=x2;

                end;

        tg.add(trim(x));

        end

        else tg.text:='';

for m:=1 to n do tg.Add('');

result:=tg.text;

tg.free;

//final

end;

 

kullanımı:

 

tempx.text:=getlines('cümle',';');

'cümle'nin ; lerle ayrılmış tüm kelimelerini Tstringlist olarak tanımladığım

tempx nesnesine aktarıyorum.

 

client tarafında dosyanın nasıl gönderildiğinin kabaca kodu aşağıdaki gibi:

 

fsrc := FileOpen(sourcefile,fmOpenRead);

fsize := FileSeek(fsrc,0,2);

FileSeek(fSrc,0,0);//başa konumlan

memo1.lines.add(inttostr(fsize)+' byte...');

memo1.lines.add('uploading...');

bytesent:=0;

sendfilegate1:=true;

size:=fsize;

sayac:=0;

while size>0 do

begin

application.ProcessMessages;

if (sendfilegate1) then//ping-pong

        begin

        len := FileRead(fSrc,buffer,sizeof(buffer));

        clientsocket1.Socket.SendBuf(buffer,len);//upload

        bytesent:=bytesent+len;

        size:=size-len;

        sendfilegate1:=false;//pong iste

        inc(sayac);

        end;

end;

fileclose(fsrc); //işte gönderilmiş dosyayı kapattım

 

kabaca dosya gönderme kodu bu. ping-ping olayını önceki yazılarımda anlatmıştım.

 

 

dosya göndermede bir başka teknik de şudur,

 

1)

serversocket1.Socket.SendStreamThenDrop(TFileStream.Create('c:deneme.txt', fmOpenRead or fmShareDenyWrite));

2)

fstrm:=TFileStream.Create('path+filename', fmOpenRead or fmShareDenyWrite);

serversocket1.Socket.connections[0].sendstreamthendrop(fstrm);

serversocket1.Open;

 

bu yöntem de çalışır. ama byte bazında veri kaybı oluyor bazen. yani sağlıklı olarak bazen göndermeyebiliyor.

ama ping-pong yönteminden daha hızlıdır. bu işi kendisi yapıyor zaten. ama dediğim gibi

bazen veri paket kayıpları olabiliyor. gerek windowstan gerek networkden...

 

bi de üst üste socketler açılarak multy dosya gönderme olayları filan var,

bu da epeyce kastırıyo. şu anda anlatcak durumda değilim mazur gör..

 

başka aklıma bişi gelmiyo...

 

aslında konu çok da ne bilim yazmak işime gelmiyo açıkçası...

 

bi de, nmstrm komponentleri xp de çalışmıyor bunu da biliyorsundur zaten.

hani oradaki uploadfile nesneleri filan var. onlar xp de yemiyor bilirsiniz.

bu yüzden herşey kodlamayla yapılacak. e bu da farkı ortaya koyuyor zaten.

iyi kodlama iyi teknik = başarılı bir ürün

 

hepinize çalışmalarınızda başarılar dilerim,

sağlıcakla kalın iyi günler,

 

"Türk Coderler her zaman zeki ve güçlüdür"

 

saygılarımla_

 

neoturk [ xxnt03@lycos.co.uk ]

 

 

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

 

"

Cevaplara tesekkurler. Ama ne yazik ki hicbirisi ihtiyacimi karsilamiyor.

Program hala ayni noktada tikali. Ayrıca trojan yapmaya falan calismiyorum

ve suruculerin boyutlarini bulabiliyorum.

 

bloodfloweur

"

 

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

 

 

merhaba.......

 

sorunuza karşılık, yukarıdaki yazıları copy/paste yapmıştım.

elbette trojan yapmaya çalışmıyorsunuz,

ben size menüyü sundum, içinden işinize yarar kodları kendi lehinize çevirmenizi bekliyordum...

 

sorunuzda bahsi geçen jpeginize baktığım için

size bu şekilde bir ayrıntılı alıntı "tlistview" içeren yazıları yazdım.

 

hala aynı noktada takılıyorsanız kusura bakmayın ama kodlama becerinize kızmak zorunda kalacağım.....

 

nedenine gelince:

 

-hala aynı noktada takılı olmanızın nedeni nedir? bunu belirtmemişsiniz!

-suruculerin boyutlarını alıyorsanız, bunları listview üzerinde

çok rahat görüntüleyebilirsiniz. toplam boyut boş boyut vs vs vs !

-imagelist kullanın demiştim size, hala üzerinde bir araştırma yapmıyorsanız ve kullanmaya çaba sarfetmiyorsanız gerçekten kızacağım artık.

imaglist kullanarak listview üzerinde system ikonları dahil ( disk-disket-cdrom-vb ) boş yer dolu yer gösteren bu "programınızı" yazabilirsiniz artık !

 

kalkıp hazır komponenti kullandığını söylüyorsun, ama şunuunu o komponent yapmasın diyorsun, hem de bunu nasıl yaparız diyorsun.

 

nasıl bir çelişkidir bu anlamadım ??........

 

verdiğim kodları kendi lehine çevirmesini öğren artık.

 

kalkıp size trojan yazın demiyoruz !

 

içinden tlistview'i nasıl kullandığıma dikkat et olayın inceliklerini kavra demeye çalışıyoruz !

 

 

hala hangi konuda takılısın anlamış değilim sabah sabah ya ..... !!!

 

sana kızmıyorum ! yanlış anlama !!

 

çelişkili soru ve cevabına kızıyorum !

 

kolay gelsin..........

 

 

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