PDA

Ver la Versión Completa : duda algo tonta


cyber_zero
14-09-2008, 23:45:18
hola, buenas tardes
Soy algo nuevo en esto de delphi y tengo un problema con un if, no encuentro como hacerlo, este es el codigo que estoy usando y tambien el error que me produce, gracias de antemano

if Panel1.Color:=cl3DLight
then Panel3.Color:=clRed;

[Error] Unit1.pas(74): Type of expression must be BOOLEAN

DarkMan
14-09-2008, 23:47:09
Prueba con
if Panel1.Color=cl3DLight then Panel3.Color:=clRed;
;)

cyber_zero
15-09-2008, 00:24:49
ya me estaba volviendo loco por no saber que estaba mal jajajajaja y bueno ya que me anime a hacer mis preguntas tontas, me sale este error con el siguiente codigo

se supone que la expresion debe hacer esto, si panel17 es rojo y panel18 es rojo entonces panel7 es rojo

Delphi (-)

if Panel17.Color=clRed and Panel18.Color=clRed then Panel7.Color:=clRed;

el error que me da es

[Error] Unit1.pas(121): Incompatible types

gracias

Caral
15-09-2008, 01:04:51
Hola

if (Panel17.Color = clRed) and (Panel18.Color = clRed) then
Panel7.Color = clRed;

Saludos

Caral
15-09-2008, 01:10:02
Hola
Que viejo me me estoy volviendo, ya ni me acuerdo, creo que es asi:

if (Panel17.Color = clRed) and (Panel18.Color = clRed) then
Panel7.Color:= clRed;
Saludos

Caral
15-09-2008, 01:48:10
Hola
Otro ejemplito con case.
Estoy practicando para no olvidarme de esto:D:D

case Panel17.Color and Panel18.Color of
clRed: panel7.Color:= clRed;
end;
Saludos

Delfino
15-09-2008, 07:47:10
case Panel17.Color and Panel18.Color of clRed: panel7.Color:= clRed; end;

Saludos
Creo q faltan los parentesis..

Caral
16-09-2008, 00:18:44
Hola
Creo q faltan los parentesis..
No creas amigo, no creas.:D
Saludos

Al González
16-09-2008, 01:19:13
Hola
Otro ejemplito con case.
Estoy practicando para no olvidarme de esto:D:D

case Panel17.Color and Panel18.Color of
clRed: panel7.Color:= clRed;
end;

Saludos

Hola Carlos.

El problema con ese ejemplo es que el Case no está preguntando si tanto Panel17.Color como Panel18.Color tienen un valor de clRed, sino que se está haciendo un "And de bits" con los dos valores enteros.

Mira este ejemplo:
procedure TForm1.Button1Click(Sender: TObject);
begin
Case 7 And 11 Of
3 : Showmessage (
'7 y 11, ambos, tienen activos (en "1") los bits que ' +
'forman el entero 3:'#13#13'...00000111 (7)'#13 +
' And'#13'...00001011 (11)'#13 +
'---------------------'#13'...00000011 (3)');
End;
end;

Aquí el resultado:
http://img519.imageshack.us/img519/4600/andbitskf2.jpg (http://imageshack.us)

En conclusión, no podemos pedirle a Case que nos determine si dos expresiones cualesquiera (Panel17.Color y Panel18.Color, en este caso) son iguales a una tercera (clRed). :)

Saludo And Abrazo.

Al González.

Caral
16-09-2008, 18:37:34
Hola
Es curioso Al Pero hice las comparaciones y siempre me sirvió.
Pongo 3 paneles y un botón.
Si pongo los dos primeros en rojo al presionar el botón este se pone en rojo también, pero si alguno de los primeros no esta en rojo el tercero no se pone en rojo tampoco.
Para estar mas seguro adicione mas paneles e hice la comparación sin orden especifico y también lo hizo.
Por lo tanto a mi si me hace la comparación.
Estoy seguro de que estoy equivocado, pero mi delphi me quiere mucho y siempre hace lo que le pido.:D:D
Saludos Amigo
Pd: Entendí mal tu ultima estrofa.
Lo que se pretende no es comparar los dos primeros con el tercero, es: Si el primero y segundo son rojos el tercero se pondrá en rojo también, no hay comparaciones.

Al González
17-09-2008, 00:08:58
Hola Carlos.

Como comenté, la tercera "expresión" es clRed. Un case siempre compara. ;)

En cuanto a que sí te funciona, no es de extrañarse mucho, simplemente te ha tocado que los bits "coincidan", pero es muy arriesgado y desaconsejable hacerlo de esa manera. Con otras constantes de color podría fallarte.

Estoy en un café Internet sin Delphi a la mano para ver el patrón de bits de clRed y otras constantes de color que pudiera tomar como ejemplo, pero reafirmo lo dicho en mi comentario de arriba. :)

Saludos.

Al.