Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Casefälle....mehr als eine Aktion


van RanDahlE - So 02.12.07 12:09
Titel: Casefälle....mehr als eine Aktion

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
z:=4;
case Random(z) of
 0:(xxx.left:=96and (xxx.Top:=64);        
 1:(xxx.left:=192and (xxx.Top:=64);       
 2:(xxx.left:=296and (xxx.Top:=64);       
 3:(xxx.left:=400and (xxx.Top:=64);      
 4:(xxx.left:=96and (xxx.Top:=152);       
                   .
                   .
                   .  
end;

der sagt mir : Operator not applicable to this operand type

...im Grunde soll der nur durch Zufall ein Imageobjekt verschieben..kann mir wer sagen was ich da falsch mache oder mir ne Alternative aufzeigen?

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Xion - So 02.12.07 12:10


Delphi-Quelltext
1:
2:
3:
4:
5:
0:
  begin
    //bla
    //blub
  end;


Fabian E. - So 02.12.07 12:25

user profile iconvan RanDahlE hat folgendes geschrieben:
z:=4;
case Random(z) of
0:(xxx.left:=96) and (xxx.Top:=64);
1:(xxx.left:=192) and (xxx.Top:=64);
2:(xxx.left:=296) and (xxx.Top:=64);
3:(xxx.left:=400) and (xxx.Top:=64);
4:(xxx.left:=96) and (xxx.Top:=152);
.
.
.
end;
der sagt mir : Operator not applicable to this operand type

...im Grunde soll der nur durch Zufall ein Imageobjekt verschieben..kann mir wer sagen was ich da falsch mache oder mir ne Alternative aufzeigen?


Der operator "and" ist ein logischer operator. er dient dir z.b. in if-abfragen dazu, mehrere Werte abzufragen :


Delphi-Quelltext
1:
2:
3:
 
If (a = 5and  (b = 3then
blub...


gruß


Horst_H - So 02.12.07 12:57

Hallo,

vielleicht ist mehr eine einfache Zuweisung gemeint und kein logischer Vergleich.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
case Random(z) of 
0begin
   xxx.left:=96;
   xxx.Top:=64
   end;
1:begin..

end;//case
Altenativ
With XXX do 
  begin
  case Random(z) of 
    0begin
       left:=96;
       Top:=64
       end;
    1begin
       ....

    end;//case
  end;//with


Zorro - Fr 07.12.07 18:43
Titel: Re: Casefälle....mehr als eine Aktion
user profile iconvan RanDahlE hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
z:=4;
case Random(z) of
 0:(xxx.left:=96and (xxx.Top:=64);        
 1:(xxx.left:=192and (xxx.Top:=64);       
 2:(xxx.left:=296and (xxx.Top:=64);       
 3:(xxx.left:=400and (xxx.Top:=64);      
 4:(xxx.left:=96and (xxx.Top:=152);       
                   .
                   .
                   .  
end;

der sagt mir : Operator not applicable to this operand type


Der "and" Operator dient NICHT dazu, mehrere Befehle zu verknüpfen - dazu gibts begin und end.

Greetz
Zorro


Atreyu - Fr 07.12.07 19:46

Genau, wenn man begin und end hat, wozu dann noch "and". Ich glaube, viele lassen sich von mehreren Zeilen einschüchtern, man ist oft im Glauben, alles hinter einer Case-Zuweisung müsste in einer Zeile passieren.


Sinspin - Fr 07.12.07 20:17

AND findet sich immer nur bei logischen Verknüpfungen.
So wie sie Beispielsweise in einer einfachen Verzweigung:

Delphi-Quelltext
1:
2:
IF (a = 1AND (b = 1THEN
  c := 2;

oder einen Schleifenabbruch:

Delphi-Quelltext
1:
2:
3:
4:
WHILE (Sonne = 'scheint'AND (bernd = 'schläft'DO
BEGIN
  Spielen;
END;

oder bei einer logischen Zuweisung:

Delphi-Quelltext
1:
result := a AND b AND c;                    


In deinem Fall würde das dann wohl eher so aussehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
z:=4;
case Random(z) of
 0 : begin 
       xxx.left:=96;
       xxx.Top:=64;
     end;
                   .
                   .
                   .  
end;

Wobei das mit deinem "z := 4" eh nicht ganz klappt.
Denn der Bereich, in dem sich die von Random() gelieferte Zahl befindet geht von 0..3! Also von 0..z-1.