proje yardımı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
proje yardımı
Merhaba arkadaşlar. Bir çalışmada tıkandım ve bir kaç konuda yardımlarınızı istiyorum.
Çalışmamda bir adet cb1 isminde combobox var ve change bölümünde
procedure TFormSatis.cb1Change(Sender: TObject);
var
urun,aciklama : string;
parantezYeri : integer;
begin
if cb1.Text = '' then exit;
parantezYeri := pos('(',cb1.Text);
urun := leftStr(cb1.Text,parantezYeri-2);
aciklama := rightStr( leftStr(cb1.Text,length(cb1.Text) - 1), length(cb1.Text) - parantezYeri - 1);
mdiForm.tableveri.Filtered := false;
mdiForm.tableveri.Filter := '([UrunAdi]=' + quotedStr(urun) + ') and ([UrunAciklamasi]=' + quotedStr(aciklama) + ')' ;
mdiForm.tableveri.Filtered := true;
end;
kodları var.
birde gb12 isminde butonda ise
procedure TFormSatis.gb12Click(Sender: TObject);
var
deger:AnsiString;
begin
if gb12.Caption='Yeni Ekle' then
begin
deger:=inputbox('Kayıt','düğmeye isim ver','Yeni Ekle');
gb12.Caption:=deger;
formKayit:= TformKayit.Create(mdiForm);
end
else
cb1.Text := gb12.Caption;
end;
kodları bulunuyor.
Sorunuma gelirsek.
1. Kullanıcı ilk açtığında gb12.caption için ne yazarsa orada kalsın. Yani program her açıldığında yeniden ilk haline dönmesin.
2. cb1.text:=gb12.caption bir türlü çalışmıyor. yani cb1.text'i değiştiremiyorum.Bunu nasıl değiştirebilirim
3. bu değişim olduktan sonra ENTER TUŞU na basılmış olarak algılanmasını nasıl sağlayabilirim.
Yardımcı olabilirseniz sevinirim.
Çalışmamda bir adet cb1 isminde combobox var ve change bölümünde
procedure TFormSatis.cb1Change(Sender: TObject);
var
urun,aciklama : string;
parantezYeri : integer;
begin
if cb1.Text = '' then exit;
parantezYeri := pos('(',cb1.Text);
urun := leftStr(cb1.Text,parantezYeri-2);
aciklama := rightStr( leftStr(cb1.Text,length(cb1.Text) - 1), length(cb1.Text) - parantezYeri - 1);
mdiForm.tableveri.Filtered := false;
mdiForm.tableveri.Filter := '([UrunAdi]=' + quotedStr(urun) + ') and ([UrunAciklamasi]=' + quotedStr(aciklama) + ')' ;
mdiForm.tableveri.Filtered := true;
end;
kodları var.
birde gb12 isminde butonda ise
procedure TFormSatis.gb12Click(Sender: TObject);
var
deger:AnsiString;
begin
if gb12.Caption='Yeni Ekle' then
begin
deger:=inputbox('Kayıt','düğmeye isim ver','Yeni Ekle');
gb12.Caption:=deger;
formKayit:= TformKayit.Create(mdiForm);
end
else
cb1.Text := gb12.Caption;
end;
kodları bulunuyor.
Sorunuma gelirsek.
1. Kullanıcı ilk açtığında gb12.caption için ne yazarsa orada kalsın. Yani program her açıldığında yeniden ilk haline dönmesin.
2. cb1.text:=gb12.caption bir türlü çalışmıyor. yani cb1.text'i değiştiremiyorum.Bunu nasıl değiştirebilirim
3. bu değişim olduktan sonra ENTER TUŞU na basılmış olarak algılanmasını nasıl sağlayabilirim.
Yardımcı olabilirseniz sevinirim.
Re: proje yardımı
Combobox kullanım şekliniz yanlış. Caption bir nesnenin görünen ismini verebilmemiz için kullandığımız bölümdür( kısacası o nesnenin görünen etiket ismidir).
comboboxtan bilgi okuma şekliniz yanlış
aciklama := rightStr( leftStr(cb1.Text,length(cb1.Text) - 1), length(cb1.Text) - parantezYeri - 1);
comboboxtan veri okurken
ComboBox1.Items.Strings[ComboBox1.ItemIndex] şeklinde okunur. Daha iyi anlayabilmen için açıklamasını şöyle yapalım.
Combobox1.items.strigs ifadesi comboboxtaki seçilen satır içindeki bilgiyi temsil eder.
Combobox1.itemindex ifadesi ise kaçıncı satırı seçtiğini ifadeeder.
Comboboxta satır sayıları 0,1,2... diye gider. Yani sıfırıncı satır bizim en üstte gördüğümüz satırdır. Combobox1.itemindex[0] derseniz en üsttekini, Combobox1.itemindex[1] derseniz ikinci satırı seçer.
Senin koduna gelirsek cb1.text şeklinde kullanman yanlış olur o yüzden
Aşağıdaki şekilde comboboxa veri ekleyemezsiniz.
cb1.Text := gb12.Caption;
Doğrusu şu şekildedir
Combobox bilgi girişi
Enter tuşuna basıldığını anlamak içinde (bunu hangisinde yapacaksan örnekte comboboxı gösterdim). Kullanacağın nesnenin onkeypress kısmında aşağıdaki gibi kullanmalısın
kolay gelsin
comboboxtan bilgi okuma şekliniz yanlış
aciklama := rightStr( leftStr(cb1.Text,length(cb1.Text) - 1), length(cb1.Text) - parantezYeri - 1);
comboboxtan veri okurken
ComboBox1.Items.Strings[ComboBox1.ItemIndex] şeklinde okunur. Daha iyi anlayabilmen için açıklamasını şöyle yapalım.
Combobox1.items.strigs ifadesi comboboxtaki seçilen satır içindeki bilgiyi temsil eder.
Combobox1.itemindex ifadesi ise kaçıncı satırı seçtiğini ifadeeder.
Comboboxta satır sayıları 0,1,2... diye gider. Yani sıfırıncı satır bizim en üstte gördüğümüz satırdır. Combobox1.itemindex[0] derseniz en üsttekini, Combobox1.itemindex[1] derseniz ikinci satırı seçer.
Senin koduna gelirsek cb1.text şeklinde kullanman yanlış olur o yüzden
Kod: Tümünü seç
Cb1.Items.Strings[Cb1.ItemIndex] şeklinde kullanmalısın.
Aşağıdaki şekilde comboboxa veri ekleyemezsiniz.
cb1.Text := gb12.Caption;
Doğrusu şu şekildedir
Combobox bilgi girişi
Kod: Tümünü seç
cb1.items.add('gb12.Caption');
Kod: Tümünü seç
if key=13 then begin
/// yapılacak işler
end;
Re: proje yardımı
Merhaba,cobalt yazdı:Merhaba arkadaşlar. Bir çalışmada tıkandım ve bir kaç konuda yardımlarınızı istiyorum.
Çalışmamda bir adet cb1 isminde combobox var ve change bölümünde
procedure TFormSatis.cb1Change(Sender: TObject);
var
urun,aciklama : string;
parantezYeri : integer;
begin
if cb1.Text = '' then exit;
parantezYeri := pos('(',cb1.Text);
urun := leftStr(cb1.Text,parantezYeri-2);
aciklama := rightStr( leftStr(cb1.Text,length(cb1.Text) - 1), length(cb1.Text) - parantezYeri - 1);
mdiForm.tableveri.Filtered := false;
mdiForm.tableveri.Filter := '([UrunAdi]=' + quotedStr(urun) + ') and ([UrunAciklamasi]=' + quotedStr(aciklama) + ')' ;
mdiForm.tableveri.Filtered := true;
end;
kodları var.
birde gb12 isminde butonda ise
procedure TFormSatis.gb12Click(Sender: TObject);
var
deger:AnsiString;
begin
if gb12.Caption='Yeni Ekle' then
begin
deger:=inputbox('Kayıt','düğmeye isim ver','Yeni Ekle');
gb12.Caption:=deger;
formKayit:= TformKayit.Create(mdiForm);
end
else
cb1.Text := gb12.Caption;
end;
kodları bulunuyor.
Sorunuma gelirsek.
1. Kullanıcı ilk açtığında gb12.caption için ne yazarsa orada kalsın. Yani program her açıldığında yeniden ilk haline dönmesin.
2. cb1.text:=gb12.caption bir türlü çalışmıyor. yani cb1.text'i değiştiremiyorum.Bunu nasıl değiştirebilirim
3. bu değişim olduktan sonra ENTER TUŞU na basılmış olarak algılanmasını nasıl sağlayabilirim.
Yardımcı olabilirseniz sevinirim.
Öncelikle foruma soru sorduğunuz zaman program kodlarını [ code ] ve [/ code] ifadeleri arasında yazmanızda fayda var. Forum bu ifadeler arasındaki bilgileri sabit uzunluklu (Delphi'de kod yazdığınız ekranda olduğu gibi) font ile yazar ve okunmaları kolaylaşır.
Bunun dışında kullandığınız Delphi sürümünü yazmanız da alacağınız cevabı ve kodu oldukça değiştirebilir. Bu anlamda sorunuzda bunu da belirtmenizde fayda var.
Sorularınızı doğru yorumladı isem, aşağıdaki şekilde istediğinizi yapabiliyor olmanız gerekli.
1- Forum her açıldığında kapatıldığı zamanki değerin geri gelmesi için kapatıldığı zaman geri getirilmek istenilen veriyi kaybolmayacak bir yerde saklamanız gerekli. Birden fazla yöntem olmakla birlikte aklıma gelen en pratik yöntem INI dosyası kullanmak. Aşağıdaki kodları ilgili formun OnCreate() ve OnDestroy() olaylarına yazarsanız istdiğinizi elde edebilirsiniz.
OnCreate() kısmı:
Kod: Tümünü seç
uses
IniFiles;
procedure TForm1.FormCreate(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
gb12.Caption := Ini.ReadString('BASLIK', 'gb12', 'Yeni Ekle');
finally
Ini.Free();
end;
end;
Kod: Tümünü seç
procedure TForm1.FormDestroy(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
Ini.WriteString('BASLIK', 'gb12', gb12.Caption);
finally
Ini.Free();
end;
end;
ComboBox.OnChange()
Kod: Tümünü seç
procedure TForm1.cb1Change(Sender: TObject);
var
Urun, Aciklama: string;
P1, P2: Integer;
begin
if cb1.Text = EmptyStr then Exit();
P1 := Pos('(', cb1.Text);
if P1 = 0 then Exit();
P2 := Pos(')', cb1.Text);
if P2 = 0 then Exit();
Urun := Copy(cb1.Text, 1, P1-1);
Aciklama := Copy(cb1.Text, P1+1, (P2-1)-P1);
mdiForm.tableveri.Filtered := False;
mdiForm.tableveri.Filter := '([UrunAdi]=' + QuotedStr(Urun) + ') and ([UrunAciklamasi]=' + QuotedStr(Aciklama) + ')' ;
mdiForm.tableveri.Filtered := True;
end;
Button.OnClick()
Kod: Tümünü seç
procedure TForm1.gb12Click(Sender: TObject);
var
Deger: string; // <--- Deger değişkenini AnsiString olarak tanımlamayın. Bu yanlış olur.
begin
if gb12.Caption = 'Yeni Ekle' then
begin
Deger := InputBox('Kayıt','düğmeye isim ver','Yeni Ekle');
gb12.Caption := Deger;
formKayit:= TformKayit.Create(mdiForm);
end
else
begin
cb1.Text := gb12.Caption;
PostMessage(cb1.Handle, WM_CHAR, VK_RETURN, 0); // <--- [3] nolu sorunuzun cevabı bu satırdır.
end;
end;
Re: proje yardımı
Sayın Lord_Ares cevabınız için çok teşekkür ederim. Sizin dediğiniz gibi yaptığım zaman cb1 in text kısmına gb12.caption yazısını her butona basmamda tekrar tekrar aktardı. Bende tırnağı kaldırarak denedim bu seferde butona verdiğim değeri tekrar tekrar yazdırdı.
Sayın ertank sizede cevabınız için teşekkür ederim. Delphi 7 kullanıyorum (Umarım bahsettiğiniz budur).Forumda yeni olduğumdan dolayı kod yazmanın nasıl olacağını bilmiyordum, bunuda öğrendim 1.teşekkür , ini dosyasını öğrendim ve uyguladım 2. teşekkür buradan, comboboxun csDropDown veya csSimple olaylarını öğrendim ve dediğiniz gibi bu değerlerin dışında bir değermiş bunu değiştirdim şimdi işler hale geldi 3. teşekkürde buradan. 
Siz değerli ustalara vakit ayırdığınız için tekrar teşekkür ediyorum. Lakin enter tuşlanmış gibi algılanmasını yapamadım. Bir kaç değişik şekilde denedim Lord_Ares'in dediği gibi eğer basılırsa istediğim değilde işlemden sonra entere program bassın.
Birde burada başka bir sorun ile karşılaştım. biz gb12.caption u cb1.text e yazdırdık fakat form açık olduğu için veri tablosundan yeni veri alışı yapamadığı için yazdırılan ürünü tanımıyor. Formu aç kapa yaptıramıyorum çünkü işlem öncesinde forma veri girişi yapılmış olabilir. Bu durumda cb1 e tanınmış yeni veriyi nasıl alabiliriz.
Sizleri yormaz isem Rave Report 5.0 da bir rav dosyası oluşturdum ama bir türlü saat ve tarih atayamadım. Tarihi Sum(CalText) in Display Type kısmını dtDateTimeFormat seçerek elde ediyorum ama 30.12.1899 tarihini atıyor. Bu neden olabilir veya başka bir çözüm varmıdır?
Kod: Tümünü seç
cb1.items.add('gb12.Caption');
Kod: Tümünü seç
cb1.items.add(gb12.Caption);
Sayın ertank sizede cevabınız için teşekkür ederim. Delphi 7 kullanıyorum (Umarım bahsettiğiniz budur).Forumda yeni olduğumdan dolayı kod yazmanın nasıl olacağını bilmiyordum, bunuda öğrendim 1.teşekkür , ini dosyasını öğrendim ve uyguladım 2. teşekkür buradan, comboboxun csDropDown veya csSimple olaylarını öğrendim ve dediğiniz gibi bu değerlerin dışında bir değermiş bunu değiştirdim şimdi
Kod: Tümünü seç
cb1.text:=gb12.Caption

Siz değerli ustalara vakit ayırdığınız için tekrar teşekkür ediyorum. Lakin enter tuşlanmış gibi algılanmasını yapamadım. Bir kaç değişik şekilde denedim Lord_Ares'in dediği gibi eğer basılırsa istediğim değilde işlemden sonra entere program bassın.
Birde burada başka bir sorun ile karşılaştım. biz gb12.caption u cb1.text e yazdırdık fakat form açık olduğu için veri tablosundan yeni veri alışı yapamadığı için yazdırılan ürünü tanımıyor. Formu aç kapa yaptıramıyorum çünkü işlem öncesinde forma veri girişi yapılmış olabilir. Bu durumda cb1 e tanınmış yeni veriyi nasıl alabiliriz.
Sizleri yormaz isem Rave Report 5.0 da bir rav dosyası oluşturdum ama bir türlü saat ve tarih atayamadım. Tarihi Sum(CalText) in Display Type kısmını dtDateTimeFormat seçerek elde ediyorum ama 30.12.1899 tarihini atıyor. Bu neden olabilir veya başka bir çözüm varmıdır?
Re: proje yardımı
Rave Report 5.0 da tarih ve saat atamayı yaptım. Benden başka kullanan varmı bilmem ama belki birilerine faydası olur. Nasıl yaptığımı yazayım. projeye bir datatext ekledim ve datafield özelliğinden data text editör kısmını açtım. report variables kısmından dateshort u seçerek insört report var'a tıkladım kaydettim sonuç istediğim gibi olmuş 

Re: proje yardımı
Arkadaşlar projem neredeyse tamam ama biraz daha yardım lazım. Bir text içerisindeki veriyi tabloda arattırıyorum ve buluyorum, bulunan verinin olduğu kolonun üç yanındaki kolunda aynı satırda bulunan veriyi başka bir text e aldırmam gerek. Örneğin arama yapılacak text1 e 175×15 jant yazıyorum araya bastığımda text2 ye seri numarasını yazmasını istiyorum. Birkaç deneme yaptım beceremedim. delphi 7 ve access kullanıyorum. Yardımcı olabilirmisiniz?
Re: proje yardımı
175x15 jant anladığım kadarıyla bir access veri tabanı içindeki bir tablonun alanında kayıtlı. Adı nedir acaba?
Ekranda Acess veri tabanı bilgilerini göstermek için hangi bileşeni kullanıyorsunuz? Örneğin ADOQuery olabilir mi?
Ekranda Acess veri tabanı bilgilerini göstermek için hangi bileşeni kullanıyorsunuz? Örneğin ADOQuery olabilir mi?
Re: proje yardımı
ertank hocam ilk defa delphi kullanıyorum. Boyumdan büyük bir işe kalkışmışım anladım.
Sizinde dediğiniz gibi access veri tabanı kullanıyorum. bir çok tablom var arama yapmak istediğim tablo adı "STOK" ve stokadi alanında arama yaparak buluyorum, stokserino alanındaki veriyi text2 ye yazdırmaya çalışıyorum. Form üzerinde ADOTable ve DataSource kullanıyorum fakat bunların bağlantıları başka bir tabloya. Yani bu arama ile ilgili herhangi bir sorgulamam yok.
Sizinde dediğiniz gibi access veri tabanı kullanıyorum. bir çok tablom var arama yapmak istediğim tablo adı "STOK" ve stokadi alanında arama yaparak buluyorum, stokserino alanındaki veriyi text2 ye yazdırmaya çalışıyorum. Form üzerinde ADOTable ve DataSource kullanıyorum fakat bunların bağlantıları başka bir tabloya. Yani bu arama ile ilgili herhangi bir sorgulamam yok.
Re: proje yardımı
Database kullanıldığı için ve database tablo alanı içinde arama yaptırıp bilgiyi bulduğunuz için aşağıdaki şekilde verileri okuyabilirsiniz. Hangi Form üzerindeki ADOTable veya ADOQuery bileşenini kullanıyorsanız aşağıdaki ADOTable1 adını siz uygun şekilde değiştirerek kendi uygulamanız içine yazarsınız.
Kod: Tümünü seç
Text1.Caption := ADOTable1.FieldByName('stokadi').AsString;
Text2.Caption := ADOTable1.FieldByName('stokserino').AsString;
Re: proje yardımı
ertank hocam ben bunu anlamadım malesef ve sorunumu yanlış ifade ettiğimi düşünüyorum.ertank yazdı:Database kullanıldığı için ve database tablo alanı içinde arama yaptırıp bilgiyi bulduğunuz için aşağıdaki şekilde verileri okuyabilirsiniz. Hangi Form üzerindeki ADOTable veya ADOQuery bileşenini kullanıyorsanız aşağıdaki ADOTable1 adını siz uygun şekilde değiştirerek kendi uygulamanız içine yazarsınız.
Kod: Tümünü seç
Text1.Caption := ADOTable1.FieldByName('stokadi').AsString; Text2.Caption := ADOTable1.FieldByName('stokserino').AsString;
Form üzerinde text1.text ve text2.text var text1.text içerisine 175×15 yazıyorum ve ara butonuna basıyorum. Sonrasında 175×15 in seri nosu olan '1751501' i text2.text e yazdırmasını istiyorum.
Tabloadı:STOK, Tablo Kolonlarıİ:1-sirano 2-stokadi 3-stokmiktari 4-stokserino
Re: proje yardımı
Ara Butonu altındaki kodu paylaşabilir misiniz?
Kullandığınız Text1 ve Text2 TEdit türevi bileşenler midir?
Kullandığınız Text1 ve Text2 TEdit türevi bileşenler midir?
Re: proje yardımı
ertank hocam aşağıdaki kod yazılı ama illa buna bağlı kalmayabiliriz.
Ve tahmin ettiğiniz gibi text1 ve text 2 Tedittir.
Ve tahmin ettiğiniz gibi text1 ve text 2 Tedittir.
Kod: Tümünü seç
procedure TForm4.araClick(Sender: TObject);
var
ara:variant;
begin
ara:=STOK.Lookup('stokadi',text1.Text,'stokserino');
if VarIsNull(ara) Then
ShowMessage('Kayıt Bulunamadı')
else
text2.text:=ara[2];
end;
Re: proje yardımı
Aşağıdaki şekilde deneyebilir misiniz?
Kod: Tümünü seç
procedure TForm4.araClick(Sender: TObject);
begin
if not STOK.Locate('stokadi', [Text1.Text], []) then
ShowMessage('Kayıt Bulunamadı')
else
Text2.Text := STOK.FieldByName('stokserino').AsString;
end;
Re: proje yardımı
