Sayfayı Yazdır | Pencereyi Kapat

Sürekli Devam Eden Runtime 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=620
Tarih: 08 Ocak 2025 Saat 20:12
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Sürekli Devam Eden Runtime Hatası
Mesajı Yazan: Enes_Akyüz
Konu: Sürekli Devam Eden Runtime Hatası
Mesaj Tarihi: 25 Haziran 2024 Saat 15:08
var
MyForm: TCLForm;
CompassImg,DirectionImg: TClProImage;
GetTimer: TClTimer;
CompassXLabel,CompassYLabel,CompassZLabel : TclLabel;

void GetCompass;
var
currentYHeading,currentXHeading,currentZHeading: Double;
rotationAngle: Double;
{
if (not MyForm.FormOrientationSensor.Sensor == nil)
{
currentYHeading = MyForm.FormOrientationSensor.Sensor.HeadingY;
currentXHeading = MyForm.FormOrientationSensor.Sensor.HeadingX;
currentZHeading = MyForm.FormOrientationSensor.Sensor.HeadingZ;

CompassXLabel.Text = 'X : '+FloatToStr(Abs(currentXHeading));
CompassYLabel.Text = 'Y : '+FloatToStr(Abs(currentYHeading));
CompassZLabel.Text = 'Z : '+FloatToStr(Abs(currentZHeading));

}

CompassImg.RotationAngle = currentYHeading;

}

{
MyForm = TCLForm.Create(Self);

MyForm.SetFormBGImage(' https://clomosy.com/demos/compassbg.png" rel="nofollow - https://clomosy.com/demos/compassbg.png' );
CompassXLabel = MyForm.AddNewLabel(MyForm,'CompassXLabel','--');
CompassXLabel.Align = alBottom;
CompassXLabel.Margins.Bottom= 30; 
CompassXLabel.Height = 50;
CompassXLabel.Width = 150;

CompassYLabel = MyForm.AddNewLabel(MyForm,'CompassYLabel','--');
CompassYLabel.Align = alBottom;
CompassYLabel.Margins.Bottom= 20; 
CompassYLabel.Height = 50;
CompassYLabel.Width = 150;

CompassZLabel = MyForm.AddNewLabel(MyForm,'CompassZLabel','--');
CompassZLabel.Align = alBottom;
CompassZLabel.Margins.Bottom= 10; 
CompassZLabel.Height = 50;
CompassZLabel.Width = 150;

CompassImg = MyForm.AddNewProImage(MyForm,'CompassImg');
clComponent.SetupComponent(CompassImg,'{"Align" : "Center","Width":350,"Height":350,"ImgUrl":" https://clomosy.com/demos/compass2.png" rel="nofollow - https://clomosy.com/demos/compass2.png ", "ImgFit":"yes"}');

DirectionImg = MyForm.AddNewProImage(MyForm,'DirectionImg');
clComponent.SetupComponent(DirectionImg,'{"Align" : "Center","Width":350,"Height":350,"ImgUrl":" https://clomosy.com/demos/compass_arrow2.png" rel="nofollow - https://clomosy.com/demos/compass_arrow2.png ", "ImgFit":"yes","MarginBottom":100,"MarginRight":28}');

MyForm.FormOrientationSensorType = ostHeading;
MyForm.FormOrientationSensor.Active = True;

GetTimer = MyForm.AddNewTimer(MyForm, 'GetTimer', 500);
GetTimer.Enabled = True;
MyForm.AddNewEvent(GetTimer, tbeOnTimer, 'GetCompass');
 
MyForm.Run;
}
Bilgisayar üzerinden, Clomosylearn uygulaması ile açıldığında sürekli RUNTİME hatası alıyorum.
Kodlarım yukarıda belirttiğim gibi. Hata kodu aşağıda yer alıyor.



Cevaplar:
Mesajı Yazan: BilalCndn
Mesaj Tarihi: 25 Haziran 2024 Saat 16:12
Merhaba Enes,

FormOrientationSensor mobil cihazlarda var olan bir sensör. Windows bilgisayarlarda bulunmadığı için çalışmıyor. Koda baktığımız zaman timer a bağlı void içerisinde if ile Orientation Sensorden veri gelip gelmediği kontrol ederek verileri değişkene alıp aynı zamanda label içerisine yazmışsın. Burada bir sıkıntı yok çünkü sensörden veri gelmiyorsa if içerisine girmiyor. Fakat if dışında 'CompassImg.RotationAngle = currentYHeading;' satırı var. Bu satırda alamadığımız Y değerini kullanarak Image nesnesinin RotationAngle değerini değiştirmeye çalışıyoruz. Değer olmadığı için de hata alıyoruz. Hatanın sürekli devam etmesinin sebebi de timer içerisinde tekrar tekrar aynı kodun çalışmasından kaynaklanıyor. Çözüm için bu satırı if içerisine alabilirsin. Bu sayede eğer ki sensörden veri alamazsa bile hata vermez.

void GetCompass;
var
  currentYHeading,currentXHeading,currentZHeading: Double;
  rotationAngle: Double;
{
  if (not MyForm.FormOrientationSensor.Sensor == nil)
  {
  currentYHeading = MyForm.FormOrientationSensor.Sensor.HeadingY;
  currentXHeading = MyForm.FormOrientationSensor.Sensor.HeadingX;
  currentZHeading = MyForm.FormOrientationSensor.Sensor.HeadingZ;
  
  CompassXLabel.Text = 'X : '+FloatToStr(Abs(currentXHeading));
  CompassYLabel.Text = 'Y : '+FloatToStr(Abs(currentYHeading));
  CompassZLabel.Text = 'Z : '+FloatToStr(Abs(currentZHeading));
  
  CompassImg.RotationAngle = currentYHeading;
  }
}

Sorunun çözüme ulaşıp ulaşmadığı ile ilgili geri dönüşünü bekliyorum.
İyi çalışmalar diliyorum.


-------------
Bilal Candan

Atiker Yazılım Veri İşlem A.Ş.
Software Developer

[email protected]



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