![]() |
Merkwürdige Fehlermeldung (Compiler)
Hi,
ich benutze die Componente TBassdllPlayer und hab diesen Code geschrieben: Wenn ihr den TBassdllPlayer nicht kennt, macht nix - hab die Erklärung dran geschrieben:
Delphi-Quellcode:
Ich will also abfragen, wie lange die Musik noch läuft, und dann das Programm beenden.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin //Gesamtlänge einer Sounddatei- Aktuelle Position(=verbleibende Zeit in s)*1000 -> in ms Sleep((BassdllPlayer1.SongLength - BassdllPlayer1.Position)*1000); end; Dann kommt aber diese Fehlermeldung: Zitat:
Kann mir einer das übersetzen oder sagen, wie ich den Code oben verändern muss, damit die Meldung nicht mehr kommt ? |
Re: Merkwürdige Fehlermeldung (Compiler)
Das Ganze heisst überdeutscht etwa soviel wie:
Ein vorzeichenbehafteter und ein nicht-vorzeichenbehafteter Typ wurden kombiniert. Beide Typen wurden erweitert, .. damits klappt ;) Ich vermute mal, das SongLength ohne Vorzeichen ist und Position mit Vorzeichen. Deshalb die Meldung. |
Re: Merkwürdige Fehlermeldung (Compiler)
Hmmm...
Heißt also, dass einer von beiden ein Vorzeichen hat (+ od. -) und der andere nicht.. Oder was??? Aber seit wann hat denn die Zeit in s ein Vorzeichen, ich kenn keine negative Zeit :wink: Und wie soll die Position denn ein Vorzeichen haben? Das ist doch eine Zeitangabe zwischen 0 und SongLength, also auf jeden Fall größer als 0 !!! Und wie wurden die 'erweitert'? Ich mein ja nur, eigentlich ist es ja egal, da das Programm auch so läuft... aber es ist ja schließlich eine 'Warning', die nehme ich eigentlich immer ernst :angel2: |
Re: Merkwürdige Fehlermeldung (Compiler)
Sag doch mal wie die beiden Variablen deklariert wurden.
Es ist dem Compiler egal, was in den Variablen steht, es geht nur darum, welchen Typ sie haben. |
Re: Merkwürdige Fehlermeldung (Compiler)
Ich glaub ich hab's jetzt:
Delphi-Quellcode:
Also kann nur SongLength positive und negative Werte annehmen, vgl. Delphi Hilfe:
SongLength : Integer;
Position : Cardinal;
Delphi-Quellcode:
Hier steht's ja alles: Integer signed (- und +), Cardinal unsigned (kein Vorzeichen).
Type Range Format
--------------------------------------------------- Integer –2147483648..2147483647 signed 32-bit Cardinal 0..429496729 unsigned 32-bit Aber was hat das jetzt mit meinem Code oben zu tun ?? (ist doch auch ein Schwachsinn, die Länge eines Sounds in Integer anzugeben... Ein Sound kann doch nicht kürzer als 0 sec sein!) |
Re: Merkwürdige Fehlermeldung (Compiler)
Also ich gehe mal davon aus, dass ich diese Meldung getrost vernachlässigen kann, da SongLength eh immer positiv ist.
Aber mal allgemein zu den beiden Typen Integer und Cardinal: Eigentlich ist es doch egal, ob mit oder ohne Vorzeichen, da ohne Vorzeichen (Cardinal) ja immer positiv bedeutet. Also müsste ich doch dann beide Typen ganz normal addieren und subtrahieren können... Aber warum gibt der Compiler dann eine Fehlermeldung raus ? |
Re: Merkwürdige Fehlermeldung (Compiler)
Zitat:
das klappt ja auch alles. es ist kein fehler. eben nur eine warnung, dass du eine rechenoperation mit zwei verschiedenen typen ausführst. unter umständen könnte das zu problemen führen - in deinem fall aber nicht. zur not kannst du für die betreffende zeile ja die warnung ausschalten (ging imho mit einem compiler-schalter). aenogym |
Re: Merkwürdige Fehlermeldung (Compiler)
Jetzt hab ich's:
Das liegt nicht an der Kombination von SongLength und Position, sondern an dem Befehl Sleep(), der eine Zahl vom Typ Cardinal erwartet, aber mit SongLength auch einen Integer-Wert enthält. Wenn dieser nun negativ wäre, dann weiß er nix mit Sleep(milliseconds: Cardinal) anzufangen und gibt eine Fehlermeldung raus. Im Klartext: Das funktioniert einwandfrei:
Delphi-Quellcode:
Aber hier gibt's einen Fehler:
procedure TForm1.Button1Click(Sender: TObject);
var x, z: Integer; y: Cardinal; begin x :=-7; y := 5; z := x + y; //ergibt also -7 + 5 = -2, bei z vom Typ Integer kein Problem! end;
Delphi-Quellcode:
Das geht zwar, es gibt aber trotzdem eine Warnmeldung:
procedure TForm1.Button1Click(Sender: TObject);
var x: Integer; y, z: Cardinal; begin x :=-7; y := 5; z := x + y; //z =-2, aber ein Cardinal-Typ -> Fehlermeldung end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x: Integer; y, z: Cardinal; begin x := 2; y := 5; z := x + y; //Warnmeldung, da x auch negativ sein könnte end; Zitat:
|
Re: Merkwürdige Fehlermeldung (Compiler)
Zitat:
Delphi-Quellcode:
damit deaktivierst/aktivierst du sämtliche warnungen
{$WARNINGS OFF}
sleep(...); {$WARNINGS ON} aenogym |
Re: Merkwürdige Fehlermeldung (Compiler)
Zitat:
Warum gibt er eigentlich nicht diese Fehlermeldung raus (z.B. für den obigen Quellcode): Zitat:
|
Re: Merkwürdige Fehlermeldung (Compiler)
mag sein, aber er sagt dir in der warnungsmeldung eben, was er tut. nämlich beide operanden erweitern ;)
|
Re: Merkwürdige Fehlermeldung (Compiler)
Aber wie soll das denn gehen?
Angenommen SongLength wäre negativ, dann würde doch in Sleep() ein negativer Wert stehen. Da bringt's doch nix, wenn er den Wert milliseconds : Cardinal in einen Integer-Typ erweitert, z.B. bei Sleep(-10) hat Delphi trotzdem ein Problem! Nochmal zur Erinnerung:
Delphi-Quellcode:
procedure Sleep(milliseconds : Cardinal);
|
Re: Merkwürdige Fehlermeldung (Compiler)
Häääää?????
Das geht sogar:
Delphi-Quellcode:
Da kommt sogar nicht einmal eine Fehlermeldung - und auch keine Warnmeldung !!!!
procedure TForm1.Button1Click(Sender: TObject);
var x: Integer; begin x := -7; Sleep(x); end; Wenn ich dann auf den Button klicke, pausiert er auch. Allerdings länger als 7 ms ... (Keine Ahnung wie lange, hab einfach abgebrochen) |
Re: Merkwürdige Fehlermeldung (Compiler)
hm,
dafür habe icha uch keine erklärung. habe es ehrlich gesagt auch noch nie ausprobiert ;) |
Re: Merkwürdige Fehlermeldung (Compiler)
Moin moin,
Delphi-Quellcode:
// Edit:
Sleep((Cardinal(BassdllPlayer1.SongLength) - BassdllPlayer1.Position)*1000);
Markiere mal die Warnung und drücke die F1 Taste, da steht dann auch erklärt... |
Re: Merkwürdige Fehlermeldung (Compiler)
Ich würde dir auch Letzteres (von x000x) empfehlen, wollte es ja selber gerade vorschlagen ... aber wiedermal zu spät -.-''
Denn lieber den Fehler beheben, als nur die Meldung abzuschalten :zwinker: |
Re: Merkwürdige Fehlermeldung (Compiler)
Ich würde eine andere Lösung bevorzugen:
Delphi-Quellcode:
Abs() gibt den absoluten Wert einer Zahl als z.B. vorzeichenbehafteter Integer zurück.
Sleep((BassdllPlayer1.SongLength - abs(BassdllPlayer1.Position))*1000);
Bei positiven Zahlen ist das ja eine Positive Zahl. ;-) Ich finde es "logischer" 2 Vorzeichenbehaftete Integer zu subtrahieren, da das Ergebnis ja prinzipiel auch negativ werden kann. (Sollte nicht vorkommen, aber ...) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz