Procedure her formda kullanamıyorum

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Procedure her formda kullanamıyorum

Mesaj gönderen naturelmania »

Arkadaşlar öncelikle kurban bayramınız mübarek olsun.
Sorunum şu: Kendi procedure'umu kendim belirlediğim bir döngüm var. Şu kodlar yardımıyla her seferinde bir sonraki veya bir önceki komponentleri seçtirip bir döngüyü bununla çalıştırabiliyorum. Fakat bu procedureda galiba bir sorun var

Kod: Tümünü seç

Procedure gdongu(sira:string);
var
p:integer;
begin
   if sira='siradaki' then
      begin
       p:=((p+1)mod 21);
       FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p)));
       FiltreBbox:= TCheckBox(Form6.FindComponent('B' + inttostr(p)));
       FiltreVbox:= TCheckBox(Form6.FindComponent('V' + inttostr(p)));
       FiltreRbox:= TCheckBox(Form6.FindComponent('R' + inttostr(p)));
       Yildizbox := TCombobox(Form6.FindComponent('yildiz' + inttostr(p)));
       Pozbox    := TEdit(Form6.FindComponent('Poz' + inttostr(p)));
      end;

   if sira='önceki' then
      begin
       p:=((p-1)mod 21);
       FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p)));
       FiltreBbox:= TCheckBox(Form6.FindComponent('B' + inttostr(p)));
       FiltreVbox:= TCheckBox(Form6.FindComponent('V' + inttostr(p)));
       FiltreRbox:= TCheckBox(Form6.FindComponent('R' + inttostr(p)));
       Yildizbox := TCombobox(Form6.FindComponent('yildiz' + inttostr(p)));
       Pozbox    := TEdit(Form6.FindComponent('Poz' + inttostr(p)));

      end;

end;
Kod olarak programın herhangi bir yerinde gdongu('siradaki') yazınca program bir sonraki komponentlere gitmesi lazımken gitmiyor?? Ayrıca bu gdongu komutunu sadece Form1 in içinde kullanabiliyorum diğer formlarda kullanamıyorum. Procedure un başlığını Private ya da Public içine de yazdım ama yine olmadı? Acaba ben nereyi eksik biliyorum ya da bu yazdıklarım yanlış mı??? :oops:
Not: Bu yazdığım procedure'u forumlarda araştırıp ordan burdan karıştırarak yazdım belki bu sebepten yanlış olabilir diye tahmin ediyorum :oops:
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Mesaj gönderen barutali »

Aynısı benim basımada gelmişti daha sonra farkettimki procedure de tanımladığım değişken adını en üsttede taımlamısım ama biri string biri integer olduğu için sorun yapıyordu.. Belki sende de böyle bişey olabilir ...

Kolay Gelsin...
amatör küme programcı :D
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Mesaj gönderen Battosai »

Kod: Tümünü seç

form1.gdongu('siradaki')
şeklinde her formunda kullanabilirsin...
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

@ Battosai arkadaşım çok sağolasın bu şekilde kullanacağım, ama henüz denemeye vaktim olmadı...

@ Lanetli arkadaşım kodu inceledim böyle bir sorun yok önerin için teşekkür ederim...

Bu arada bir sorunum daha var? Bu procedure u eğer bir başka procedure da sonra yazarsam altını çiziyor ve undeclared identifier hatası alıyorum.

Kod: Tümünü seç

procedure button1.click (sender vs vs);
begin
gdongu('siradaki'); /burası hata veriyor
end;

procedure gdongu;
begin
vs vs vs
vs
end

procedure button2.click;
begin
gdongu('siradaki'); /burada hata vermiyor
end
Acaba neden anlayamadım??? İlla ki kodun en başına mı yazmam lazım bu procedure'u??? :D
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Arkadaşlar bu yazdığım procedure tam olarak çalışmıyor? Şimdi farkettim programı durdurup "sira"'nin içeriğine baktığımda bir değer aktarılmamış olduğunu görüyorum, oysa ki döngünün içinde gdongu('siradaki') yazıyorum ve sira:= siradaki olması gerek fakat sira:=0 oluyor bir türlü değiştiremedim :oops: Acaba döngüde mi hata yapıyorum????

Kod: Tümünü seç

Procedure gdongu(sira:string); 
var 
p:integer; 
begin 
   if sira='siradaki' then 
      begin 
       p:=((p+1)mod 21); 
       FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p))); 
       FiltreBbox:= TCheckBox(Form6.FindComponent('B' + inttostr(p))); 
       FiltreVbox:= TCheckBox(Form6.FindComponent('V' + inttostr(p))); 
       FiltreRbox:= TCheckBox(Form6.FindComponent('R' + inttostr(p))); 
       Yildizbox := TCombobox(Form6.FindComponent('yildiz' + inttostr(p))); 
       Pozbox    := TEdit(Form6.FindComponent('Poz' + inttostr(p))); 
      end; 

   if sira='önceki' then 
      begin 
       p:=((p-1)mod 21); 
       FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p))); 
       FiltreBbox:= TCheckBox(Form6.FindComponent('B' + inttostr(p))); 
       FiltreVbox:= TCheckBox(Form6.FindComponent('V' + inttostr(p))); 
       FiltreRbox:= TCheckBox(Form6.FindComponent('R' + inttostr(p))); 
       Yildizbox := TCombobox(Form6.FindComponent('yildiz' + inttostr(p))); 
       Pozbox    := TEdit(Form6.FindComponent('Poz' + inttostr(p))); 

      end; 

end; 
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
procedureyi tanımladığın yer neresi ve hangi form. O kısımlarıda bi gönder istersen.
form1 demişsin ama findcomponent te form6 da arama yapmışsın.
unitin durumu biraz karşık gibi.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

merhaba sorunun bir kısmına cevap... eve bu kodu her yerden kulllanmak istiyorsan kodu ayrı bir unite alıp bunu kullanmak istediğin yerlerden uses kısmına eklersen sorunsuz çalışır. böylece form1. yazmanda gerekmez.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Mesaj gönderen akdatilla »

s.a.
p:integer;
şeklinde bir değişkeni prosedür içerisinde tanımlayarak kullanmışsın.
bu değişkeni form6nin { Public declarations }kısmına taşı.
form6nın oncreate olayına p:=0; şeklinde bir atama yaparak p'nin başlangıç değerini yükle.
prosedürüde form6nın{ Public declarations } kısmına taşı.
form1 içerisinde form6nın gdongu prosedürünü çalıştırmak için form6.gdongu('siradaki'); komutunu kullan.
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Arkadaşlar cevaplarınız için çok teşekkür ederim. delphitürkiye offline V4 'ü kullanarak bir daha arama yaparak sorunuma cevap buldum.(normal aramada çok karışık başlıklar da çıkıyordu :D )


Kod: Tümünü seç

Procedure gdongu(numara:string);
Procedure FiltreDegistir(filitre:string);
Bu iki kodu Public ve Private nin hemen üst kısmına yazdım

Kod: Tümünü seç

Procedure TForm1.gdongu(numara:string);
begin
işlemler
end;

Procedure TForm1.FiltreDegistir(filitre:string);
begin
işlemler
end;
Bunları da unit in normal kısmına yazdım...
@Lanetli kardeşim senin söylediğin de doğru çıktı. Nasıl oldu bilmiyorum kaç kere kontrol ettiğim halde bir türlü göremedim. Aynı isimde başka bir değişken daha belirlemişim o yüzden bir türlü değer aktaramıyordum :oops:
Yardımlarınız için Allah sizden razı olsun arkadaşlar...

Ayrıca Arama yapıp bulamayan arkadaşlar mutlaka offline V4 ü kullanmanızı öneririm. Bir de onunla deneyin ;)
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
tanerileri
Üye
Mesajlar: 55
Kayıt: 06 Tem 2007 11:30

Tam olarak sorunun cevabı değil ama bilgi için yazıyorum.

Mesaj gönderen tanerileri »

Perform(WM_NEXTDLGCTL, 0, 0)
Bu komut , Tag sıralamasında sonraki nesneye geçirir imleci.

Belki bu mesajı okuyan ama bu amaçla kullanmak da isteyecek kişiler olabilir diye düşündüm.

kolay gelsin.
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Arkadaşlar bu sefer inanamadığım bir şey ile karşılaştım. Bu döngüyü denemeye fırsatım olmadığı için çalışıp çalışmadığını tam olarak deneyememiştim fakat şöyle bir durum var.

Kod: Tümünü seç

FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p)));
Bu şekilde FiltreUbox'a U1.Checkbox componentini göndermeye çalışıyorum fakat yukarıdaki döngüyle bir türlü olmuyor :?
Kodu şu şekilde değiştirdim

Kod: Tümünü seç

FiltreUbox:= TCheckBox(Form6.FindComponent('U1'));
Fakat sonuç yine de aynı ???
Acaba nerede hata yapıyorum?

Programda Tam anlamıyla kullanış şeklim şöyle

Kod: Tümünü seç

Procedure gdongu(sira:string); 
var 
p:integer; 
begin 
   if sira='siradaki' then 
      begin 
       p:=((p+1)mod 21); 
       FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p))); 
       FiltreBbox:= TCheckBox(Form6.FindComponent('B' + inttostr(p))); 
       FiltreVbox:= TCheckBox(Form6.FindComponent('V' + inttostr(p))); 
       FiltreRbox:= TCheckBox(Form6.FindComponent('R' + inttostr(p))); 
       Yildizbox := TCombobox(Form6.FindComponent('yildiz' + inttostr(p))); 
       Pozbox    := TEdit(Form6.FindComponent('Poz' + inttostr(p))); 
      end; 

   if sira='önceki' then 
      begin 
       p:=((p-1)mod 21); 
       FiltreUbox:= TCheckBox(Form6.FindComponent('U' + inttostr(p))); 
       FiltreBbox:= TCheckBox(Form6.FindComponent('B' + inttostr(p))); 
       FiltreVbox:= TCheckBox(Form6.FindComponent('V' + inttostr(p))); 
       FiltreRbox:= TCheckBox(Form6.FindComponent('R' + inttostr(p))); 
       Yildizbox := TCombobox(Form6.FindComponent('yildiz' + inttostr(p))); 
       Pozbox    := TEdit(Form6.FindComponent('Poz' + inttostr(p))); 

      end; 

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

       FiltreUbox := TCheckbox(Form6.FindComponent('U1'));
       FiltreBbox := TCheckBox(Form6.FindComponent('B1'));
       FiltreVbox := TCheckBox(Form6.FindComponent('V1'));
       FiltreRbox := TCheckBox(Form6.FindComponent('R1'));
       Yildizbox   := TCombobox(Form6.FindComponent('yildiz1'));
       PozUbox    := TEdit(Form6.FindComponent('PozU1'));
       PozBbox    := TEdit(Form6.FindComponent('PozB1'));
       PozVbox    := TEdit(Form6.FindComponent('PozV1'));
       PozRbox    := TEdit(Form6.FindComponent('PozR1'));
       Tanebox    := TCombobox(Form6.FindComponent('Tane1'));

end;
Programı bu şekilde çalıştırmaya çalıştığım anda EAccessViolation with message vs vs. hata mesajı veriyor. Yani FiltreUbox'a U1.Checkbox değerini göndermiyor. Oysa ki Form6 nın içinde böyle bir bileşen var rahat rahat bulması lazım, ama programı beklemeye alıp değerleri okuduğumda [FiltreUbox:= Nil] gözüküyor???? İşin içinden çıkamadım bir türlü?
Acaba nerede hata yapıyorum?
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
form6 nın o esnada create edilmemiş olma ihtimali varmı?

form1 i mi önce create ediyorsun form6 yı mı?
muhtemelen form1 in createsindeki kodlar çalıştığı sırada form6 henüz create edilmediği için hata alıyorsun.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla