Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Selsames verhalten bei True abfrage (https://www.delphipraxis.net/90160-selsames-verhalten-bei-true-abfrage.html)

EWeiss 12. Apr 2007 15:26


Selsames verhalten bei True abfrage
 
Habe ein problem bei mit einer simplen abfrage

Delphi-Quellcode:
if AppOwnHdcW2 = True then
begin
Delphi-Quellcode:
if (AppOwnHdcW2 = True) then
begin
alle diese abfragen liefern ein False zurück obwohl die eigenschaft AppOwnHdcW2 True ist!

Nur das funktioniert

Delphi-Quellcode:
if AppOwnHdcW2 then
begin
Wo ist das problem ?

gruss Emil

SirThornberry 12. Apr 2007 15:33

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.

3_of_8 12. Apr 2007 15:41

Re: Selsames verhalten bei True abfrage
 
Ich vermute, dass AppOwnHdcW2 -1 ist. Bei LongBool ist True nämlich IIRC -1, bei Boolean 1.

Matze 12. Apr 2007 16:04

Re: Selsames verhalten bei True abfrage
 
Siehe dir hierzu auch mal das hier an: Über den Umgang mit Boolean.

EWeiss 12. Apr 2007 16:38

Re: Selsames verhalten bei True abfrage
 
Zitat:

Zitat von Matze
Siehe dir hierzu auch mal das hier an: Über den Umgang mit Boolean.

Das muss ich mir nicht antun
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

mkinzler 12. Apr 2007 16:40

Re: Selsames verhalten bei True abfrage
 
Nein, es ist kein Delphi-Fehler. Man vergleicht halt grundsätzlich nicht auf True oder False!

EWeiss 12. Apr 2007 16:47

Re: Selsames verhalten bei True abfrage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler
Nein, es ist kein Delphi-Fehler. Man vergleicht halt grundsätzlich nicht auf True oder False!

Beispiel:
Delphi-Quellcode:
            VisChan = BASS_WINAMPVIS_ExecuteVis(PluginDir & "\" & _
                      lstPlugins.List(IndexNum), _
                      VisModules.ListIndex, _
                      True, _
                      ckOwnDcW2.value)
Funktioniert!

Delphi-Quellcode:
            VisChan = BASS_WINAMPVIS_ExecuteVis(PluginDir & "\" & _
                      lstPlugins.List(IndexNum), _
                      VisModules.ListIndex, _
                      True, _
                      True)
Funktioniert nicht!

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

Christian Seehase 12. Apr 2007 18:29

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:

Zitat von EWeiss
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.

Den Satz habe ich nicht ganz verstanden.
Was meinst Du damit?

EWeiss 12. Apr 2007 18:37

Re: Selsames verhalten bei True abfrage
 
Zitat:

Zitat von Christian Seehase
Moin Emil,

Zitat:

Zitat von EWeiss
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.

Den Satz habe ich nicht ganz verstanden.
Was meinst Du damit?

damit meinte ich diese aussage

Zitat:

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.
Wenn ich aus VB '-1 oder 0' für boolean sende kann in Delphi niemals der wert '1 = true' eintreten
da der höchste wert = 0 ist.

gruss Emil

Christian Seehase 12. Apr 2007 18:54

Re: Selsames verhalten bei True abfrage
 
Moin Emil,

Zitat:

Zitat von EWeiss
Wenn ich aus VB '-1 oder 0' für boolean sende kann in Delphi niemals der wert '1 = true' eintreten

und deshalb prüft man nie auf = true ;-)

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 13:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz