Sayfayı Yazdır | Pencereyi Kapat

Fonksiyon bulunumadı hatası

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=1195
Tarih: 29 Kasım 2025 Saat 18:23
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Fonksiyon bulunumadı hatası
Mesajı Yazan: M-Guney
Konu: Fonksiyon bulunumadı hatası
Mesaj Tarihi: 17 Eylül 2025 Saat 17:04
Basit bi hesap makinesi yapmaya çalıştım fakat fonksiyonu bulamadı hatası ile karşılaşıyorum.


//Calculator
var
mainForm: TCLForm;
editInput: TCLEdit;
userInput: String;


function takeUserInput:String;{
  userInput = editInput.Text;
  Result = userInput;
}

void Calculate{
  userInput = takeUserInput; //editInput.Text;
  editInput.Text = IntToStr(userInput); //editInput.Text
  // ShowMessage('IntToStr(userInput)');
}

void addSembol(sembol: Char);{
  userInput = takeUserInput; //editInput.Text;
  if(sembol=='d'){
    Delete(userInput, Length(userInput), 1);
  }
  else if(sembol == '+'){
    userInput = userInput+ '+';
  }else if(sembol == '-'){
    userInput = userInput+ '-';
  }else if(sembol == '*'){
    userInput = userInput+ '*';
  }else if(sembol == '/'){
    userInput = userInput+ '/';
  }
  
  editInput.Text = userInput;
}
void setupForm;
var
calculateBtn, plusBtn, minusBtn, multipleBtn, diversionBtn :TClProButton;
{
  mainForm = TCLForm.Create(self);
  editInput = mainForm.AddNewEdit(mainForm,'editInput', 'Write to Calculate...');
  editInput.align = alTop;
  
  plusBtn = mainForm.AddNewProButton(mainForm, 'plusBtn', '+');
  plusBtn.Margins.left = 400;
  plusBtn.Margins.right = 100;
  plusBtn.Margins.Top = 50;
  plusBtn.align = alCenter;
  minusBtn = mainForm.AddNewProButton(mainForm, 'minusBtn', '-');
  minusBtn.Margins.left = 300;
  minusBtn.Margins.right = 100;
  minusBtn.Margins.Top = 50;
  minusBtn.align = alCenter;
  multipleBtn = mainForm.AddNewProButton(mainForm, 'multipleBtn', '*');
  multipleBtn.Margins.left = 200;
  multipleBtn.Margins.right = 100;
  multipleBtn.Margins.Top = 50;
  multipleBtn.align= alCenter;
  diversionBtn = mainForm.AddNewProButton(mainForm, 'diversionBtn', '/');
  diversionBtn.Margins.left = 100;
  diversionBtn.Margins.right = 100;
  diversionBtn.Margins.Top = 50;
  diversionBtn.align= alCenter;
  
  calculateBtn = mainForm.AddNewProButton(mainForm, 'calculateBtn', 'Calculate');
  
  
  mainForm.AddNewEvent(plusBtn,tbeOnClick,'addSembol(''+'')');
  mainForm.AddNewEvent(minusBtn,tbeOnClick,'addSembol(''-''');
  mainForm.AddNewEvent(multipleBtn,tbeOnClick,'addSembol(''*'')');
  mainForm.AddNewEvent(diversionBtn,tbeOnClick,'addSembol(''/'')');
 
  mainForm.AddNewEvent(calculateBtn,tbeOnClick,'Calculate');
  mainForm.AddNewEvent(calculateBtn,tbeOnEnter,'Calculate');

}

{
  setupForm;
  mainForm.run;
  
}



Cevaplar:
Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 17 Eylül 2025 Saat 17:38
Merhaba Güney, 
Daha önce foruma sorulmuş bir konunun linkini paylaşıyorum. İnceleyebilirsin. 
https://forum.clomosy.com.tr/topic1072.html" rel="nofollow - https://forum.clomosy.com.tr/topic1072.html

İyi çalışmalar. 


Mesajı Yazan: M-Guney
Mesaj Tarihi: 17 Eylül 2025 Saat 17:59
İnceledim fakat neden fonksiyon bulunamadı dediğini anlayamadım.



Mesajı Yazan: M-Guney
Mesaj Tarihi: 18 Eylül 2025 Saat 09:33
Neden çalışmadığını buldum AddNewEvent kısmındaki parametreden dolayı prosedürü bulamıyorum diyor. Parametre içermeyene bir prosedür ile deneyince herhangi bir problem yaşamadım.
  mainForm.AddNewEvent(minusBtn,tbeOnClick,'addSembol(''-'')');

Ben AddNewEvent kısmında parametreli bir şekilde prosedür çağırmak istiyorum nasıl yapabilirim.


Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 18 Eylül 2025 Saat 09:45
Clomosy’de Event Parametreleri Hakkında

tbeOnClick, tbeOnChange gibi eventler tek bir parametre ile çalışır.
Bu parametre Sender’dır ve event’i tetikleyen component’i temsil eder.
Örneğin hangi butona tıklandıysa, Sender o butonun referansını taşır.

Clomosy’de Sender kullanımı şu şekildedir:

var tiklananBtn: TClProButton;
{
  tiklananBtn = TClProButton(MyForm.clSender);
  ShowMessage(tiklananBtn.Text);
}


MyForm.clSender özelliği, en son tetiklenen event’i başlatan component’i temsil eder.

Parametre Verilememe Sebebi

Event prosedürleri, Sender parametresi ile sabitlenmiştir.
Örneğin tbeOnClick bir butona atanmışsa, Clomosy motoru prosedürü şöyle çağırır:

YourEventHandler(SenderComponent)


Bu nedenle şu kullanım desteklenmez:

AddNewEvent(btn, tbeOnClick, 'myProc(5)');


Hem Clomosy motoru hem de event imzası buna izin vermez.

Parametre Gibi Kullanmak İçin

Eğer event sırasında ek bilgiye ihtiyaç varsa clTagStr veya clTagInt kullanılabilir:

myButton.clTagStr = 'topla';

var btn: TClProButton;
btn = TClProButton(MyForm.clSender);
ShowMessage('Butonun clTagStr verisi: ' + btn.clTagStr);


Böylece event tetiklendiğinde butona özel bilgiyi clTagStr üzerinden alabilirsiniz.

Kısaca;

Clomosy’de event’lara doğrudan parametre verilemez.

MyForm.clSender ile hangi component’in tetiklendiğini öğreniriz.

Ek bilgi gerekiyorsa clTagStr ve clTagInt kullanılır.

plusBtn.CLTagStr='+';
  minusBtn.CLTagStr='-';
  multipleBtn.CLTagStr='*';
  diversionBtn.CLTagStr='/';
  mainForm.AddNewEvent(plusBtn,tbeOnClick,'addSembol');
  mainForm.AddNewEvent(minusBtn,tbeOnClick,'addSembol');
  mainForm.AddNewEvent(multipleBtn,tbeOnClick,'addSembol');
  mainForm.AddNewEvent(diversionBtn,tbeOnClick,'addSembol');

void addSembol
var
  sembol;
{
  userInput = takeUserInput; //editInput.Text;
  sembol = TCLProButton(mainForm.CLSender).CLTagStr;
  if(sembol=='d'){
    Delete(userInput, Length(userInput), 1);
  }
  else if(sembol == '+'){
    userInput = userInput+ '+';
  }else if(sembol == '-'){
    userInput = userInput+ '-';
  }else if(sembol == '*'){
    userInput = userInput+ '*';
  }else if(sembol == '/'){
    userInput = userInput+ '/';
  }
  
  editInput.Text = userInput;
}



Mesajı Yazan: Emr.Erkmn
Mesaj Tarihi: 18 Eylül 2025 Saat 09:47
https://www.docs.clomosy.com/index.php?title=ClSender " rel="nofollow - https://www.docs.clomosy.com/index.php?title=ClSender  ;
https://www.docs.clomosy.com/ClTagInt" rel="nofollow - https://www.docs.clomosy.com/ClTagInt


Mesajı Yazan: M-Guney
Mesaj Tarihi: 18 Eylül 2025 Saat 10:02
Anladım teşekkür ederim.



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net