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 Mengenauswertung - Problem! (https://www.delphipraxis.net/126538-mengenauswertung-problem.html)

AlexanderBrade 27. Dez 2008 16:40


Mengenauswertung - Problem!
 
Delphi-Quellcode:
if (cb1 in iMenge) and (cb2 in iMenge) and (cb3 in iMenge) (cb4 not in iMenge) and (cb5 not in iMenge) and (cb6 not in iMenge) then showmessage{usw.}
Diese Quelltextzeile habe ich geschriben, "not in" scheint aber nicht zu existieren! Wie kann man das korrigieren?

DeddyH 27. Dez 2008 16:42

Re: Mengenauswertung - Problem!
 
Delphi-Quellcode:
if (cb1 in iMenge) and (cb2 in iMenge) and (cb3 in iMenge) and not ((cb4 in iMenge) or (cb5 in iMenge) or (cb6 in iMenge)) then showmessage...

omata 27. Dez 2008 16:43

Re: Mengenauswertung - Problem!
 
Delphi-Quellcode:
if        (cb1 in iMenge)
   and    (cb2 in iMenge)
   and    (cb3 in iMenge)
   and not (cb4 in iMenge)
   and not (cb5 in iMenge)
   and not (cb6 in iMenge) then
begin
  showmessage{usw.}
end;

AlexanderBrade 27. Dez 2008 16:54

Re: Mengenauswertung - Problem!
 
Und wie sieht es damit aus?
Delphi-Quellcode:
if not ((cb1 in iMenge)and (cb2 in iMenge) and (cb3 in iMenge)) or not ((cb4 in iMenge) and (cb5 in iMenge) and (cb6 in iMenge))
Die Zeile soll bewirken, dass er nur "weiter geht", wenn weder cb1, cb2, cb3, noch wenn cb4, cb5, cb6 gemeinsam in der Menge vorhanden sind.
[P.S. Mit cb1, cb2, cb3 funktioniert es schon!]

himitsu 27. Dez 2008 17:00

Re: Mengenauswertung - Problem!
 
Delphi-Quellcode:
if (iMenge * [cb1, cb2, cb3] = [cb1, cb2, cb3])
  and (iMenge * [cb5, cb6, cb7] = []) then
begin
  showmessage{usw.}
end;

// oder

if iMenge * [cb1, cb2, cb3, cb4, cb5, cb6] = [cb1, cb2, cb3] then
begin
  showmessage{usw.}
end;

// bzw. wenn die cb1 bis cb6 aufeinanderfolgend sind
// (wie man es aus dem Namen vermuten könnte)

if iMenge * [cb1..cb6] = [cb1..cb3] then
begin
  showmessage{usw.}
end;

AlexanderBrade 27. Dez 2008 18:04

Re: Mengenauswertung - Problem!
 
Das klappt aber nicht! Mal davon abgesehen, dass ich diese Routine nicht verstehe...

DeddyH 27. Dez 2008 18:11

Re: Mengenauswertung - Problem!
 
Nochmal zum Verständnis: Du hast 6 Checkboxen, von denen nur eine der ersten drei und eine der letzten drei gewählt werden darf? Dann hast Du die falschen Komponenten gewählt, nimm einfach 2 RadioGroups und fertig.

himitsu 27. Dez 2008 18:17

Re: Mengenauswertung - Problem!
 
wie klappt nicht?

und zum Verstehen ... siehe Delphi-Referenz durchsuchenMengenoperationen (oder so in etwa)
Delphi-Quellcode:
{Menge3 = alles was in Menge1 UND in Menge2 enhalten}
Menge1 * Menge2 = Menge3 

{Menge3 = alles was in Menge1 ODER in Menge2 enhalten}
Menge1 + Menge2 = Menge3 

{Menge3 = alles was in Menge1 UND NICHT in Menge2 enhalten}
Menge1 - Menge2 = Menge3

Delphi-Quellcode:
resultA := iMenge * [cb1, cb2, cb3]
// resultA enthält nur noch cb1, cb2 und/oder cb3 (soweit diese in iMenge enthalten waren)

resultB := resultA = [cb1, cb2, cb3]
// resultB ist true, wenn cb1, cb2 UND cb3 enthalten sind ... es also gleich ist

resultC := iMenge * [cb4, cb5, cb6]
// resultC = siehe ResultA

resultD := resultC = []
// resultD ist true, wenn cb4, cb5 UND cb6 NICHT enthalten sind ... es also ebenfalls gleich ist

die zweite und dritte variante aus dem vorherigen Post ist nur eine Kombination dieser Operationen/Vergleiche
und alles Varianten sollten diesem entsprechen
Delphi-Quellcode:
if        (cb1 in iMenge)
   and    (cb2 in iMenge)
   and    (cb3 in iMenge)
   and not (cb4 in iMenge)
   and not (cb5 in iMenge)
   and not (cb6 in iMenge) then
begin
  showmessage{usw.}
end;

AlexanderBrade 27. Dez 2008 18:34

Re: Mengenauswertung - Problem!
 
ALso was soll die zeile bewirken?!?

Wenn cb1, cb2 und cb3 in der Menge enthalten sind soll nichts passieren!
Wenn cb4, cb5, und cb6 in der Menge enthalten sind soll auch nichts passieren![es soll nur weiter gehen wenn das eben nicht der Fall ist]

Für die erste Variante funktioniert folgende Lösung:
Delphi-Quellcode:
if FCntCBs = 3 then if not ((cb1 in iMenge)and (cb2 in iMenge) and (cb3 in iMenge))then begin form2.visible:=false;form6.visible:=true; end;
Ich muss das ganze mit der zweiten Variante allerdings kombinieren, denn in zwei "if not" Prozeduren klappt es nicht!

DeddyH 27. Dez 2008 18:39

Re: Mengenauswertung - Problem!
 
Die Schnittmenge zweier Mengen erhältst Du durch Multiplikation, das hat himitsu schon richtig beschrieben. Aber ich habe immer noch nicht ganz verstanden, was Du eigentlich willst. Ist es nur dann ein Fehler, wenn entweder
- cb1 und cb2 und cb2 oder
- cb4 und cb5 und cb6
enthalten sind? Oder jede beliebige Kombination von der ersten oder zweiten o.a. Zeile?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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