'daki ham sensör verilerini listele Mevcut tüm ham sensör verilerini Android için bir Not uygulamasında listelemek istiyorum.Memo
Aşağıdaki kodlar geçtiğimiz yıllarda çalıştı, ancak XE8 ile çalışmıyor. Muhtemelen bir dahili derleyici hatası vardır. Tekrar çalışmak için yapabileceğim bir şey var mı yoksa alternatif bir çözüm var mı?
uses
TypInfo;
type
TOrientationSensorAccessor = class(TCustomOrientationSensor);
TLocationSensorAccessor = class(TCustomLocationSensor);
procedure TForm2.Button1Click(Sender: TObject);
var
p_location: TCustomLocationSensor.TProperty;
p_orientation: TCustomOrientationSensor.TProperty;
n, v: string;
begin
Memo1.Lines.Clear;
if Assigned(OrientationSensor1.Sensor) then
begin
if not OrientationSensor1.Sensor.Started then OrientationSensor1.Sensor.Start;
// Error (only in XE8): Incompatible types 'TCustomLocationSensor.TProperty' and 'TCustomOrientationSensor.TProperty'
// In XE7 it works.
for p_orientation in OrientationSensor1.Sensor.AvailableProperties do
begin
n := 'OrientationSensor.'+GetEnumName(TypeInfo(TCustomOrientationSensor.TProperty), integer(p_orientation)) ;
v := FloatToStr(TOrientationSensorAccessor(OrientationSensor1.Sensor).GetDoubleProperty(p_orientation));
Memo1.Lines.Values[n] := v;
end;
end;
if Assigned(LocationSensor1.Sensor) then
begin
if not LocationSensor1.Sensor.Started then LocationSensor1.Sensor.Start;
for p_location in LocationSensor1.Sensor.AvailableProperties do
begin
n := 'LocationSensor.'+GetEnumName(TypeInfo(TCustomLocationSensor.TProperty), integer(p_location)) ;
v := FloatToStr(TLocationSensorAccessor(LocationSensor1.Sensor).GetDoubleProperty(p_location));
Memo1.Lines.Values[n] := v;
end;
end;
end;
Güncelleme
Bazı deneyler:
ben "yerine" ilk açıklama yaparken (1), bu derlenir:
// for p_orientation in OrientationSensor1.Sensor.AvailableProperties do
// begin
n := 'OrientationSensor.'+GetEnumName(TypeInfo(TCustomOrientationSensor.TProperty), integer(p_orientation)) ;
v := FloatToStr(TOrientationSensorAccessor(OrientationSensor1.Sensor).GetDoubleProperty(p_orientation));
Memo1.Lines.Values[n] := v;
// end;
end;
(2) "N" ve "v" öğelerinin atanmasını söylediğimde, o da derlenecek:
for p_orientation in OrientationSensor1.Sensor.AvailableProperties do
begin
// n := 'OrientationSensor.'+GetEnumName(TypeInfo(TCustomOrientationSensor.TProperty), integer(p_orientation)) ;
// v := FloatToStr(TOrientationSensorAccessor(OrientationSensor1.Sensor).GetDoubleProperty(p_orientation));
// Memo1.Lines.Values[n] := v;
end;
end;
Ne "ne" ne ne de "n" ve "v", hatalı bölge olmadığından, hata nerede?
(3) İkinci for döngüsü açıkladığımda, yeniden derlenir. İlk for döngüsü açıklarsam, o da derlenir. Her bir for-loop çalışması, ancak kombinasyon halinde çalışmayacaklar.
5 faktör karıştırılması durumunda bu hata sadece oluyor gibi görünmektedir:
- erişimciler döngü için
- TypInfo kullanılmış.
Güncelleme Burada 2
bulabildiğim en küçük tekrarlanabilir kodudur. Herhangi bir satır yorumlanırsa, derleme:
Biraz daha ayrılmayı açıklar mısınız? Saatlerce çalıştığını anlamaya çalışıyorum. 'p_orientation'' 'TCO’nun Özel BilgilendirmeSensörü' ve diğer tarafıdır. "TypInfo" gibi alakasız şeyleri kaldırdığımda tekrar çalışır. –
Bu ifade, soruda bildirdiğinizle çelişir. –
Açıklamam, artık bir derleme değil. Kendin test edebilirsin. Bazı şeyleri açıkladım, ama sorunun nerede olduğunu bulamıyorum, bu yüzden derleyici bir böcek olduğunu farz ediyorum. –