Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit IF-Schleife und dem Operandentyp (https://www.delphipraxis.net/178182-problem-mit-if-schleife-und-dem-operandentyp.html)

naddlinchen 21. Dez 2013 15:36

Delphi-Version: 7

Problem mit IF-Schleife und dem Operandentyp
 
Hallo Leute.

In meinem Programm habe ich eine IF-Schleife eingebaut mit 4 verschiedenen Bedingungen. Es geht grob dadrum, dass zahl1, zahl2 usw. (das sind Panels mit Zahlen), die beim Anklicken verschwinden. Zusätzlich gibt es noch einen Button, der die Form1 schließen soll, wenn alle vier Panels unsichtbar sind. Dies habe ich mithilfe der IF-Schleife versucht zu realisieren. Jedoch wird folgender Fehler in der IF-Schleife nach dem zweiten AND angezeigt: Operator ist auf diesen Operandentyp nicht anwendbar.

Wie kann ich diesen Fehler beheben?

Danke im Voraus

Delphi-Quellcode:

          IF (zahl1.Visible:= false) AND
             (zahl2.Visible:= false) AND
             (zahl3.Visible:= false) AND
             (zahl4.Visible:= false)
         
          THEN Form1.Visible:= false;

nahpets 21. Dez 2013 15:39

AW: Problem mit IF-Schleife und dem Operandentyp
 
:= gilt für Zuweisungen = für Vergleiche, in den Abfragen darf daher nur
Delphi-Quellcode:
zahl1.Visible = false
stehen

Aphton 21. Dez 2013 15:40

AW: Problem mit IF-Schleife und dem Operandentyp
 
Versuchs mit einer Case-Procedure!

Ne im ernst, da ist so einiges falsch am Code.. Versuch keine Sätze zu formulieren, wenn du das Alphabet noch nicht drauf hast!

naddlinchen 21. Dez 2013 15:44

AW: Problem mit IF-Schleife und dem Operandentyp
 
nahpets, vielen Dank =)

jetzt läuft es wie geschmiert =)

Perlsau 21. Dez 2013 15:49

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von naddlinchen (Beitrag 1240687)
In meinem Programm habe ich eine IF-Schleife eingebaut ...

Das ist keine Schleife. Eine Schleife im Programmcode stellt Methoden dar, die wiederholt durchlaufen werden, bis eine Abbruch-Bedingung eintritt. Dein Code stellt Abfragen dar. Die gängigsten Schleifen sind While- und Repeat-Schleifen.

Beim Delphi-Treff gibt es gute Einsteiger-Tutorials:

Grundlagen-Tutorials
E-Book "Delphi-Starter"

Viel Spaß beim Lernen :stupid:

Bernhard Geyer 21. Dez 2013 15:55

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von naddlinchen (Beitrag 1240687)
In meinem Programm habe ich eine IF-Schleife eingebaut mit 4 verschiedenen Bedingungen.

Alle Probleme die sich im Bereich if-Schleifen ergeben können werde auf dieser Webseite umfassend behandelt.

Popov 21. Dez 2013 16:21

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Perlsau (Beitrag 1240692)
Das ist keine Schleife.

Es gibt sogar eine Webseite die das Thema ausführlich und in allen Einzelheiten behandelt: http://www.if-schleife.de/

Edit:

Ok, ich sehe gerade Bernhard Geyer war schneller.

Meflin 21. Dez 2013 17:26

AW: Problem mit IF-Schleife und dem Operandentyp
 
Und jetzt nochmal, wie man's richtig macht:
Delphi-Quellcode:
 
Form1.Visible := zahl1.Visible or zahl2.Visible or zahl3.Visible or zahl4.Visible;

Sir Rufo 21. Dez 2013 17:31

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Meflin (Beitrag 1240701)
Und jetzt nochmal, wie man's richtig macht:
Delphi-Quellcode:
 
Form1.Visible := zahl1.Visible or zahl2.Visible or zahl3.Visible or zahl4.Visible;

Trifft aber nicht die Anforderung
Delphi-Quellcode:
FormHide_Button.Enabled :=
  not ( 
    Zahl1.Visible or
    Zahl2.Visible or
    Zahl3.Visible or
    Zahl4.Visible );

Meflin 21. Dez 2013 17:37

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Sir Rufo (Beitrag 1240702)
Trifft aber nicht die Anforderung

Ähh, doch?! Form1 ist solange visible, wie irgendeine der anderen Komponenten visible ist, und nur dann nicht visible, wenn es alle anderen auch nicht sind. Im Gegensatz dazu würde dein Vorschlag die Form auch invisble machen, wenn alle anderen visible sind. Edit: Ach ne, doch nicht - weil du einfach mal die komplette Semantik mit geändert hast.

Aphton 21. Dez 2013 17:56

AW: Problem mit IF-Schleife und dem Operandentyp
 
DeMorgan lässt grüßen! (#8 stimmt)

Sir Rufo 21. Dez 2013 17:59

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zusätzlich gibt es noch einen Button, der die Form1 schließen soll, wenn alle vier Panels unsichtbar sind.
Der Button wird aktiv, wenn die Bedingung erfüllt ist ;)

Perlsau 21. Dez 2013 18:50

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Popov (Beitrag 1240696)
Es gibt sogar eine Webseite die das Thema ausführlich und in allen Einzelheiten behandelt: http://www.if-schleife.de/

Zitat:

Zitat von Bernhard Geyer (Beitrag 1240694)
Alle Probleme die sich im Bereich if-Schleifen ergeben können werde auf dieser Webseite umfassend behandelt.

Und da wirft man mir vor, ich würde User verprellen, wenn ich Hinweise zur Grundlagenerforschung poste :twisted:

Furtbichler 21. Dez 2013 19:47

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Perlsau (Beitrag 1240708)
Und da wirft man mir vor,...

Ich find's auch kleingeistig, pawlovartig und immer auf die gleiche Art zu reagieren, wenn irgendwo die 'if-Schleife' vorkommt. Der Link auf die Seite ist ja auch soooo originell und es gibt zudem nichts Wichtigeres, als Anfänger im der Nase drauf zu stoßen, das es keine If-Schleifen gibt!!!!!1!!!EINS!!!!11!!!ELF!!ELF!! Langsam erinnert mich das an Hinweise zur Rechtschreibung, die man genau dann gibt, wenn man sonst keine Argumente mehr hat.

Ach und keiner soll sich bitte angegriffen fühlen, aber wenn doch, kann er sich bitte ein Kissen nehmen und reinbrüllen.

Daniel 21. Dez 2013 19:51

AW: Problem mit IF-Schleife und dem Operandentyp
 
Das ist grundsätzlich richtig, wobei stets der Ton die Musik macht. Den Hinweis auf eine falsche Formulierung finde an sich schon gut, nur sollte er dann im Idealfall mit einem Hinweis auf die Problemlösung gepaart sein.

Meflin 21. Dez 2013 21:10

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Sir Rufo (Beitrag 1240706)
Der Button wird aktiv, wenn die Bedingung erfüllt ist ;)

Also ich fasse nochmal zusammen: Du machst etwas völlig anderes als ich und der Fragesteller mit seinem Code und deswegen ist die von mir vorgeschlagene Umformulierung plötzlich falsch :gruebel:

Furtbichler 22. Dez 2013 00:41

AW: Problem mit IF-Schleife und dem Operandentyp
 
Code vom Fragesteller = Dein Code = nicht das, was Fragesteller erreichen will.
Sir Rufo sein Code = das, was Fragesteller will.

silver-moon-2000 22. Dez 2013 08:01

AW: Problem mit IF-Schleife und dem Operandentyp
 
Zitat:

Zitat von Furtbichler (Beitrag 1240728)
Code vom Fragesteller = Dein Code = nicht das, was Fragesteller erreichen will.
Sir Rufo sein Code = das, was Fragesteller will.

Weil uns da das Feedback des TE ein wenig fehlt, können wir nur raten, was er genau wollte.
Aber der TE hat nie gesagt, dass dann ein Button eingeblendet werden soll, vielmehr
Zitat:

Zusätzlich gibt es noch einen Button, der die Form1 schließen soll, wenn alle vier Panels unsichtbar sind
Das könnte man auch interpretieren als:

Delphi-Quellcode:
procedure TForm2.HideForm1ButtonClick(sender : TObject)
begin
  form1.visible := zahl1.Visible or zahl2.Visible or zahl3.Visible or zahl4.Visible;
end;
Hier gibt es keinen Button mehr, der erst noch eingeblendet werden muss...

Aber wie gesagt, da uns die Rückmeldung des TE fehlt und für ihn/sie die Frage sowieso geklärt zu sein scheint, ist es eher müßig, zu diskutieren, aber ich konnte wieder einmal meine Klappe nicht halten :stupid:

Furtbichler 22. Dez 2013 10:09

AW: Problem mit IF-Schleife und dem Operandentyp
 
Stimmt. Gestern habe ich die Frage anders interpretiert. War wohl etwas spät.. :mrgreen:

himitsu 22. Dez 2013 13:34

AW: Problem mit IF-Schleife und dem Operandentyp
 
Und auch wenn es schon indirekt gezeigt wurde.

NIEMALS mit True/False Vergleichen :!:

Das ist schon ein Boolean, da ist das eh nicht mehr notwendig

Delphi-Quellcode:
if B = True then // FALSCH

if B then // RICHTIG

if B = False then // FALSCH

if not B then // RICHTIG

Die Konstante True ist intern (im Boolean eine 1, bei ByteBool/WordBool/LongBool eine -1), aber der "Wert" True ist als <>0 definiert.
Ein Boolean ist eigentlich ein Byte und kann "theoretisch" mehr als nur 2 Zustände enthalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.

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