Autor |
Beitrag |
Snippy
      
Beiträge: 61
|
Verfasst: So 19.01.03 20:40
HI!
Ich möchte gerne das eine Aktion ausgeführt wird, wenn in bestimmtes Radiobutton gedrückt ist!
Aber mit "if radiobutton1.checked := true then
begin" funzt das nicht! Dann kommt immer : Type of expression must be Boolean"
Wie kann ich das anders machen???
THX
_________________ Carpe Diem!
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: So 19.01.03 20:51
Snippy hat folgendes geschrieben: | HI!
if radiobutton1.checked := true then
|
Quelltext 1:
| if radiobutton1.checked = true then |
= statt := , du willst ja keine Zuweisung
mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: So 19.01.03 20:52
Mit := weist du einer Variable einen Wert zu und machst keinen Vergleich.
Quelltext 1:
| If RadioBox1.Checked = true then |
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: So 19.01.03 21:14
|
|
Snippy 
      
Beiträge: 61
|
Verfasst: So 19.01.03 21:14
Argh!
Auf welche Ideen Noobs wie ich doch immer kommen!
Vielen Dank!
_________________ Carpe Diem!
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: So 19.01.03 21:16
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 19.01.03 21:24
@torstenheinze: entschuldige die harten Worte, aber das ist Unsinn. Selbstverständlich funktioniert die Abfrage:
Quelltext 1:
| RadioBox1.Checked = true |
Sowohl bei einem RadioButton als auch bei einer Checkbox. Was man beim Namen "RadioBox" wohl dazu sagen soll, denn ich weiß nicht, was von beidem das sein soll.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: So 19.01.03 21:35
is ja ok, aber bei mir gab es da manchmal fehler, darum verwende ich immer die die icjh geschrieben hab.
als ich das alserstes mal versucht hab (deine methode) da gab es ein fehler und ich hab mich auch höllisch gewundert, aber egal, es futzen beide, um so besser
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 19.01.03 22:15
Sorry nochmal. Bin heute nicht so gut drauf ...  ?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: So 19.01.03 22:55
Hallo,
die Abfrage if (RadioButton1.Checked=true) then kann man sich schenken.
if RadioButton1.Checked then tut das gleiche.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: So 19.01.03 22:58
Ok, Peter Lustig

|
|
FR399Y
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 27.01.03 20:18
Zitat: | If not (RadioBox1.Checked) then |
funktioniert das auch bei nem text edit oder spin edit ?
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mo 27.01.03 20:37
FR399Y hat folgendes geschrieben: | funktioniert das auch bei nem text edit oder spin edit ? |
Nur bei Variablen / Eingeschaften die ein Boolean Wert zurückgeben.
Gruß
TINO
|
|
FR399Y
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 27.01.03 21:12
ok haette ich mir auch denken können
aber wie macht man das den?
mit ner if-then abfrage ist doof da dann ja der anfangs wert ausgegrenzt werden muss ..
zb 0 aber mit dieser kann man ja auch was machen
und nen leer zeichen sagt er ja gleitkomma fehler...
wie ist der befehl ne veränderung in nem text oder spin edit zu testen bzw. zu erfassen?
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mo 27.01.03 22:26
Peter Lustig hat folgendes geschrieben: | @torstenheinze: entschuldige die harten Worte, aber das ist Unsinn. Selbstverständlich funktioniert die Abfrage:
Quelltext 1:
| RadioBox1.Checked = true | |
Es ist nicht gewiss, ob sie funktioniert. Wenn man nur mit Delphi-Funktionen und Komponenten arbeitet dürfte es bei der Gleichsetzung mit True zu keinerlei Probleme führen. Nutzt man hingegen API Funktionen, so kann das Ganze nach hinten los gehen. Das hat folgenden Grund:
In Delphi gilt:
Quelltext 1: 2:
| False = Boolean(0) True = Boolean(1) |
In der Theorie gilt jedoch:
Quelltext 1: 2:
| False = Boolean(0) True <> Boolean(0) |
Wenn nun eine API-Funktion einen Wert ungleich 0 zurückliefert und in der Delphi Import-Deklaration mit Boolean als Rückgabewert gearbeitet wird, so kann es vorkommen, dass nicht unbedingt Boolean(1) zurückgeliefert werden muss.
Was passiert, wenn eine Funktion z.B. Boolean(10) zurückliefert, und man diesen Wert dann mit True gleich setzt, kann man sich denken:
Quelltext 1: 2: 3: 4: 5:
| var b: Boolean; begin b := APIFunktion('irgendwas'); if b = True then ... end; |
Das ganze wird während des Programmsablaufs dann so aussehen:
Quelltext 1:
| if Boolean(10) = Boolean(1) then ... |
Wie man sieht, wird diese Bedingung nie Wahr.
Schreibt man hingegen die verkürzte Form ohne die Gleichsetzung, so macht der Compiler eine Abfrage nach ungleich Boolean(0) daraus und die Bedingung wird Wahr.
if b then ...wird zu
Quelltext 1:
| if Boolean(10) <> Boolean(0) then ... |
Auf der sicheren Seite ist man also, wenn man
if b then und if not b then schreibt.
_________________ Ist Zeit wirklich Geld?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 27.01.03 22:40
Vorneweg: da ich mich auf eine Checkbox / einen Radiobutton bezog, erscheint mir die ganze Abhandlung ziemlich am Thema vorbei.
Nun zum eigentlichen:
Soweit ich weiß, ist auch in der Theorie ein Boolean eine 1bit-Variable. Etwas anderes macht absolut keinen Sinn. Boolean ist nunmal ein Wahrheitswert.
Damit kann Boolean aber nur 1 oder 0 sein, also True oder False. Wie kommen denn da noch irgendwelche 10 oder so rein? Das erscheint mir sehr unlogisch. Eine Variable, die einen Wert größer als 1bit speichert, ist kein Boolean, sondern irgendetwas anderes.
Oder habe ich komplett falsch verstanden, was Du meintest?
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mo 27.01.03 22:47
Was ich meine ist, dass SizeOf(Boolean) = 1 ergibt. Also Boolean = Byte. Und ein Byte kann nunmal mehr als 2 Werte aufnehmen, was zu dem obigen Problem führt.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function MyFunc: Integer; stdcall; begin if Fehler then Result := 0 else if OK1 then Result := 1 else if OK2 then Result := 2; end;
function MyFunc: Boolean; stdcall; external 'MyDll.dll'; |
Genau so wird mit vielen WinAPI Funktionen verfahren, bei denen es eigentlich nur darum geht, ob sie 0 oder <>0 liefern.
_________________ Ist Zeit wirklich Geld?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 27.01.03 22:57
Hi!
Jetzt verstehe ich, was Du meinst. Allerdings glaube ich, dass das (sehr interessante) Problem bereits gelöst wurde:
Delphi-Hilfe hat folgendes geschrieben: | A value of type ByteBool, LongBool, or WordBool is considered True when its ordinality is nonzero. If such a value appears in a context where a Boolean is expected, the compiler automatically converts any value of nonzero ordinality to True. |
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Di 28.01.03 01:04
FR399Y hat folgendes geschrieben: | aber wie macht man das den?
mit ner if-then abfrage ist doof da dann ja der anfangs wert ausgegrenzt werden muss ..
zb 0 aber mit dieser kann man ja auch was machen
und nen leer zeichen sagt er ja gleitkomma fehler...
wie ist der befehl ne veränderung in nem text oder spin edit zu testen bzw. zu erfassen? |
Sorry, aber ich verstehe nicht was Du meinst!
Gruß
TINO
|
|