![]() |
Selsames verhalten bei True abfrage
Habe ein problem bei mit einer simplen abfrage
Delphi-Quellcode:
if AppOwnHdcW2 = True then
begin
Delphi-Quellcode:
alle diese abfragen liefern ein False zurück obwohl die eigenschaft AppOwnHdcW2 True ist!
if (AppOwnHdcW2 = True) then
begin Nur das funktioniert
Delphi-Quellcode:
Wo ist das problem ?
if AppOwnHdcW2 then
begin gruss Emil |
Re: Selsames verhalten bei True abfrage
Das ist kein Problem von Delphi sondern ein Problem welches sich der Programmierer selbst einproggt. Wahr ist alles ungleich 0. False ist also 0. True ist in Delphi 1. Aber Wahr ist eben nicht nur 1 sondern alles ungleich 0.
Deswegen sollte man auch nie einen Boolean mit True vergleichen außer man will wirklich wissen ob der Boolean den Wert 1 hat. Zudem hat die cpu mehr zu tun wenn du auf True vergleichst anstelle nur den Boolean als Bedingung zu nehmen (weil ja sonst erst geprüft werden muss ob 2 Variablen identich sind und dann ob der vergleich wahr ist) Wenn du also AppOwnHdcW2 mal zu Byte oder Integer castest wirst du sehen das es eine Zahl ungleich 1 ist. |
Re: Selsames verhalten bei True abfrage
Ich vermute, dass AppOwnHdcW2 -1 ist. Bei LongBool ist True nämlich IIRC -1, bei Boolean 1.
|
Re: Selsames verhalten bei True abfrage
Siehe dir hierzu auch mal das hier an:
![]() |
Re: Selsames verhalten bei True abfrage
Zitat:
Wie der wert Boolean interpretiert wird ist mir wohl klar. Ich denke das ist ein bug in Delphi. Wenn ich einen Wert strikt als boolean definiere erwarte ich auch das nur auf true oder false geprüft wird und nicht auf integer oder byte werte. Dann kann ich ihn direkt als integer oder longbool deklarieren. Ja bool ist in diesen Fall -1 da aus einer VB Anwendung übergeben. Aber auch das muss eine interpreter sprache erkennen von wo der Wert übergeben wird. In VB gibt es kein 0=False 1=True da ist -1=False und 0=True. Auch wenn ich die DLL in Delphi geschriebe habe kann ich aus VB nicht einfach mal 0 oder 1 übergeben. gruss Emil |
Re: Selsames verhalten bei True abfrage
Nein, es ist kein Delphi-Fehler. Man vergleicht halt grundsätzlich nicht auf True oder False!
|
Re: Selsames verhalten bei True abfrage
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
Funktioniert!
VisChan = BASS_WINAMPVIS_ExecuteVis(PluginDir & "\" & _
lstPlugins.List(IndexNum), _ VisModules.ListIndex, _ True, _ ckOwnDcW2.value)
Delphi-Quellcode:
Funktioniert nicht!
VisChan = BASS_WINAMPVIS_ExecuteVis(PluginDir & "\" & _
lstPlugins.List(IndexNum), _ VisModules.ListIndex, _ True, _ True) Beides das selbe nur das beim obigen die Value des Controls übergeben wird. Selbst wenn jetzt der Wert von ckOwnDcW2.value(control) als -1 und 0 übergeben wird kommt es immer noch nicht mit der aussage überein 0 und 1 in Delphi da nie ein wert von 1 übergeben wird. Na es geht ja ! Ansonsten würden sich die Plugins nicht in mein GenFenster setzen. Aber seltsam ist das schon. gruss Emil |
Re: Selsames verhalten bei True abfrage
Moin Emil,
dann liegt der Fehler wohl nicht bei Delphi, sondern in der Funktion, die Du aufrufst. Dort wird dann offensichtlich auf = true geprüft, wobei dort true als -1 angesehen wird. Zitat:
Was meinst Du damit? |
Re: Selsames verhalten bei True abfrage
Zitat:
Zitat:
da der höchste wert = 0 ist. gruss Emil |
Re: Selsames verhalten bei True abfrage
Moin Emil,
Zitat:
Um Boolsche-Variablen sprechend initialisieren zu können muss man sich für einen Wert entscheiden, der für true steht, in Delphi ist das dann halt 1, in VB -1. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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-2025 by Thomas Breitkreuz