Combobox gibi kelime tamamlayıcılı arama nasıl?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
ömer faruk
Üye
Mesajlar: 97
Kayıt: 29 Eki 2003 09:34
Konum: Bursa
İletişim:

Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen ömer faruk »

S.A arkadaşlar sanırım visual basic te yapılmış programlarda gördüm arama kısmı var combobox gibi kelimeyi yazar yazmaz aşşağıdaliste çıkıyor combobox gibi ve yazmaya devam ettikçe o kelimeye en uygun değeri tamamlıyor ve aradıgımız kaydı buy şekilde çok hızlı bir şekilde buluyoruz bunu delphi de nasıl yapabilirim umarım açıklayıcı olmuştur..Şu an da konu üzerinde uğraşıyorum eger sizden önce cözersem yazarım koly gelsin....
Hakimiyet ALLAH' ındır...
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

bunu bir query ile rahatlıkla yapabilirsin.

kısaca editin onchange olayına;

Kod: Tümünü seç

qrytahakkuk.close;
qrytahakkuk.SQL.Clear;
qrytahakkuk.SQL.Add('select * from personel where sicilno like '+#39+edit1.Text+'%'+#39);
qrytahakkuk.open;
şeklinde yapabilirsin...

Yada query içindeki sql'i bir defaya mahsus hazırlayıp editin text'ini parametre olarakta gönderebilirsin...

Kolay gelsin
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Ben yapmış olduğunuz açıklamadan fazla bir şey anlamadım :( Ne yapmak istediğinizi ComboBox ta şunu yapmak istiyorum(şu özelliği eklemek istiyorum vesaire gibilerinden sorunuz ile bizi yönlendirseniz daha yardımcı olabiliriz. :wink:

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
ömer faruk
Üye
Mesajlar: 97
Kayıt: 29 Eki 2003 09:34
Konum: Bursa
İletişim:

Mesaj gönderen ömer faruk »

Bgöktaş kardeş senin dedigin gibi yapabiliyorum ama bir o harf ile başlayan kayıtları ya bir dbgrid te göstermek gerek veya başka bir yerde ama ben o şekilde istemiyorum mesela bir edit düşünün arama yapıyorsunu kelimeyi yazıp enter veya bul diyorsunuz o şekilde olmayacak enter a bas veya bul tuşu olmayacak ben ilk harfe bastıgım andan itibaren editin alttında combobox gidi liste açılacak o harf ile başlayan kayıtları gösterecek devam ettigimde ise en uygun kelime ile başlayan kayıtları listeye getirecek bende en uygununu seçip işlemimi hızlı bir şekilde yapacam bilmem anlatabildim mi... kolay gelsin
Hakimiyet ALLAH' ındır...
mcihad
Üye
Mesajlar: 283
Kayıt: 18 Tem 2003 03:28
Konum: Sivas

Mesaj gönderen mcihad »

Sen delphi 6 dan sonraki kod tamamlama özelliğine benzer bişiy istiyorsun

sql ile yapabilirsin like komutu işini görür
açılır liste olarakta listbox kullan
Bize iyilik yaraşır.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Mesaj gönderen mepc »

global alanda Lastkey değiştkeni tanımladıktan sonra
LastKey:Word;


combobox1.onchange olayına ve onkeydown olayına aşağıdaki kodları yazarsan istediğin olur.

var
Srch : string;
ix : Integer;
begin
try
Srch := combobox1.Text;
if LastKey = $08 then
begin
LastKey := 0;
Exit;
end;
LastKey := 0;
ix := combobox1.Perform(CB_FINDSTRING,-1,LongInt(PChar(Srch)));
if ix > CB_ERR then
begin
combobox1.ItemIndex := ix;
combobox1.SelStart := Length(Srch);
combobox1.SelLength := (Length(combobox1.Text) - Length(Srch));
end;

except
end;

end;


procedure TForm1.combobox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
try
LastKey:=Key;
except
end;
end;
Bilgi paylaşıldıkça güzeldir.
Kullanıcı avatarı
ömer faruk
Üye
Mesajlar: 97
Kayıt: 29 Eki 2003 09:34
Konum: Bursa
İletişim:

Mesaj gönderen ömer faruk »

S.A arkadaşlar

Teşekkürler herkeze.. istediğimi şu şekilde yaptım cxlookupcombobox la yaptım listsource unu hangi alanda arama yaptıracamsan onun datasourcuse ayarladımlistfieldnames ve keyfields names de yine aynı şekilde hangi alansa onu yaptım cxlookupcombobox un onchance olayına

Kod: Tümünü seç

datamodule1.cari_dataset.Close;
datamodule1.cari_dataset.selectsql.text:='select * from CARI_TABLE where unvan like '+#39+cxlookupcombobox1.Text+'%'+#39;
datamodule1.cari_dataset.Open; 
komutumu yazdım..dropdownllistsityle ini lsfixedlist yaptım editvalue sinide string yaptım ve oldu ..teşekkür ederim herkeze....
En son ömer faruk tarafından 10 Haz 2004 06:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Hakimiyet ALLAH' ındır...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Bkz : imzamda 3. satır ;)

Teşekkürler.
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen pma »

Kodlara Ne hikmetse Bende run time error yapıyo bende pek anlamadım daha açıklayıcı yazabilcek olan var bende comboBox ım da arama yaptırmak istiyorum

combo box ıma veritabanımdan müşteri adları geliyor

comboBox ım "A" harfini yazınca mesala (ama büyük küçük harf ayırmasın Insesitive di heralde) İsmi A la Başlayanları bıraksın İtemler de Sadece Ben seçeyim

Yardımlar İçin Teşekkürler...
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen Lord_Ares »

örnek kaldırıldı..
En son Lord_Ares tarafından 22 Nis 2014 03:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen pma »

uğraşmışsınız teşekkür ederim ama dediğim gibi bana daha çok combobox ın text ine "al" yazdığımda combobox ın itemlerin "al" ile başlayanları göstersin

combobox filtresi gibi birşey lazım bana ama bir türlü bulamıyom yabancı kaynaklarda 1-2 örnek var ama dil probleminden kendi programıma entegre edemedim

bide bu delphide comboboxta ben bişey yazmaya başlayınca otomatik olarak listesini açsa ben kendim açmasam listeyi öyle bir komut varmı acaba
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen Lord_Ares »

anladığım kadarıyla örneği incelememişsin bile zahmet edip bakmış olsaydınız, gönderdiğim örnekte comboboxa birşeyler yazmaya başladığında yazdığını veritabanında arar ve comboboxın içinde gösterir. Bu kodun güzel yanı bir kez procedure olarak tanımladığında tüm comboboxlar da tek satır ile istediğin veritabanın da arama yapabilmen.
Örneği ve kodu kaldırıyorum.
Kolay gelsin..
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen pma »

Örneğinizi İndirip İncelemiştim zaten sizin örneğinizde aradığım bulup bana gösteriyo bunda problem yok bana sadece benim aradığım gösterip diğer itemleri göstermeyen bir filtre yönetim lazım bunu comboBox ile yapılabilirmi onu araştırıyorum
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen mrmarman »

Sen yine araştırmanı yaparsın. Ben imzamdaki ilüzyona gönderme yaparak başka bir çözüm sunayım. Zor gelirse kullanmazsınız. Örnek proje ektedir.

Resim

Kod: Tümünü seç

Var
  xEditControl : TEdit;

procedure TForm1.FormShow(Sender: TObject);
begin
  DBGrid1.Visible  := False;
  DBGrid1.ReadOnly := True;
  DBGrid1.Options  := [dgTabs,dgRowSelect,dgCancelOnExit];
  ADOQuery1.Connection := ADOConnection1;
  DataSource1.DataSet  := AdoQuery1;
  DBGrid1.DataSource   := DataSource1;
  ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'
  +'Data Source='+ExtractFilePath(Application.Exename) + 'Database.mdb';
end;

// SQL Arama Fonksiyonu
procedure AramaYap( strAra: String; AdoQuery:TAdoQuery );
begin
  With AdoQuery do
  begin
    Active := False;
    SQL.Clear;
    SQL.Add('SELECT M_Name FROM DivXTurk');
    SQL.Add('WHERE 1=1');
    SQL.Add('AND M_Name like '+QuotedStr( strAra+'%' ) + ' ORDER BY M_Name' );
    Active := True;
  end;
end;

// DBGrid hazırlık...
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
  if DBGrid1.Focused
    then xEditControl.Text := DataSet.Fields[0].AsString;
end;

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
Var
  strDeger,
  strArama : String;
  iDegerX, iAramaX : Integer;
begin
  if Field.Index = 0 then
  begin
    TDBGrid(Sender).Canvas.Brush.Style := bssolid;
    TDBGrid(Sender).Canvas.FillRect(Rect);
    TDBGrid(Sender).Canvas.Brush.Style := bsClear;
    strArama := xEditControl.Text;
    strDeger := Field.AsString;
    System.Delete(strDeger, 1, Length(strArama) );
    iAramaX := Rect.Left;
    TDBGrid(Sender).Canvas.Font.Style := [fsBold];
    TDBGrid(Sender).Canvas.Font.Color := clBlack;
    iDegerX := TDBGrid(Sender).Canvas.TextWidth( strArama ) + iAramaX + 1;
    TDBGrid(Sender).Canvas.TextOut( iAramaX, Rect.Top, strArama );
    TDBGrid(Sender).Canvas.Font.Style := [];
    TDBGrid(Sender).Canvas.Font.Color := clRed;
    TDBGrid(Sender).Canvas.TextOut( iDegerX, Rect.Top, strDeger);
  end;  
end;

procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key in [vk_Return, vk_Back] then
  begin
    xEditControl.SetFocus;
    TDBGrid(Sender).Visible := False;
  end;
end;

procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  xEditControl.Text := DBGrid1.DataSource.DataSet.Fields[0].AsString;
  xEditControl.SetFocus;
  TDBGrid(Sender).Visible := False;
end;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  xEditControl := TEdit(Sender);
  xEditControl.OnExit    := xEditControlExit;
  xEditControl.OnKeyUp   := xEditControlKeyUp;
  xEditControl.OnKeyDown := xEditControlKeyDown;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  xEditControl := nil;
end;

procedure TForm1.xEditControlExit(Sender: TObject);
begin
  if NOT ( DBgrid1.Focused )
    then DBGrid1.Visible := False;
end;

procedure TForm1.xEditControlKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = vk_Down
    then begin
      DBGrid1.SetFocus;
      xEditControl.Text := DBGrid1.DataSource.DataSet.Fields[0].AsString;
    end
    else DBGrid1.Visible := False;
end;

Type TArmanGrid = Class(TDBGrid) end;

procedure TForm1.xEditControlKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  AramaYap( TEdit(Sender).text, ADOQuery1 );
  DBGrid1.Left  := TEdit(Sender).Left;
  DBGrid1.Width := TEdit(Sender).Width;
  DBGrid1.Top   := TEdit(Sender).Top + TEdit(Sender).Height;
  DBGrid1.Columns[0].Width := DBGrid1.Width-30;
  if DBGrid1.DataSource.DataSet.RecordCount < 10
    then DBGrid1.Height :=  (TArmanGrid(DBGrid1).DefaultRowHeight+2) * (DBGrid1.DataSource.DataSet.RecordCount)
    else DBGrid1.Height :=  (TArmanGrid(DBGrid1).DefaultRowHeight+2) * 10;
  DBGrid1.Visible          := True;
  DBGrid1.BringToFront;
end;
Dosya ekleri
Edit_AutoComplete_Combo.rar
Edit için AutoComplete veritabanı arama örneği
(155.07 KiB) 239 kere indirildi
Resim
Resim ....Resim
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: Combobox gibi kelime tamamlayıcılı arama nasıl?

Mesaj gönderen pma »

Çok Sağolun İşte Aradığım Kod Buydu Eliniz Dert Görmesin

Delphi Sürümünüzden mi anlamadığım birkaç kod var açıklamışsınız ama

bana lazım olan o editin olayı olayı bile yazsaydınız yeterdi zahmet etmişsiniz onu sökmem lazım kodların arasından ama arada dbgrid bağlantıların felan var kafam karıştı biraz

kodların arasında dbgrid var ama ben run time da db gridi göremedim delphi 7 kullanıyorum ben okuldaki ile aynı olsun diye

bide bu edit e özel bir kod mu yoksa edit in bir olayımı var altında liste çıkması için
Cevapla