Ir al contenido


Bandera Cubana usando canvas.


  • Por favor identifícate para responder
35 respuestas en este tema

#1 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 11:15

Pues eso amigos, se me ocurre que una forma buena de prender es creando alguna imagen y en esta oportunidad quiero crear la bandera de Cuba, usando canvas.

Ya tengo algo del codigo. :D (casi nada, solo el triangulo)



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var  Puntos: array of TPoint;
  3. begin
  4. with Canvas do
  5. begin
  6. Pen.Color := clYellow;
  7. Pen.Width := 3;
  8. Brush.Color := clGreen;
  9. SetLength( Puntos, 3 );
  10. Puntos[0].x := 150;
  11. Puntos[0].y := 150;
  12. Puntos[1].x := 250;
  13. Puntos[1].y := 200;
  14. Puntos[2].x := 150;
  15. Puntos[2].y := 200;
  16. Polygon( Puntos );
  17. end;
  18. end;



Bueno seguimos trabajandola.Cualquier ayuda se agradece. ;)

Un Saludo.


#2 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 13 diciembre 2008 - 11:21

Pues lo más dificil es la estrella... lo demás lo puedes hacer con Canvas.Rectangle le das el color al Brush y ya... eso si, ten cuidado con el orden de crear las cosas, primero los rectángulos, luego el triángulo y finalmente la estrella.

Saludos
  • 0

#3 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 11:24

Pues lo más dificil es la estrella... lo demás lo puedes hacer con Canvas.Rectangle le das el color al Brush y ya... eso si, ten cuidado con el orden de crear las cosas, primero los rectángulos, luego el triángulo y finalmente la estrella.

Saludos


Gracias Felipe, lo tendre en cuenta.

Un Saludo.

#4 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 11:59

Bueno asi esta el progreso:



delphi
  1. unit UCubana;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, jpeg, ExtCtrls, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     procedure Button1Click(Sender: TObject);
  13.  
  14.   private
  15.     { Private declarations }
  16.   public
  17.     { Public declarations }
  18.   end;
  19. var
  20.   Form1: TForm1;
  21.  
  22. implementation
  23.  
  24. {$R *.dfm}
  25.  
  26.  
  27. procedure TForm1.Button1Click(Sender: TObject);
  28. var  Puntos: array of TPoint;
  29. begin
  30.   with Canvas do
  31.   begin
  32.   Pen.Color := clBlue;
  33.   Pen.Width := 0;
  34.   Brush.Color := clBlue;
  35.   Rectangle( 10, 10, 360, 50 );
  36.   end;
  37.   with Canvas do
  38. begin
  39.   Pen.Color := clWhite;
  40.   Pen.Width := 0;
  41.   Brush.Color := clWhite;
  42.   Rectangle( 10, 51, 360, 90 );
  43.   end;
  44.     with Canvas do
  45. begin
  46.   Pen.Color := clBlue;
  47.   Pen.Width := 0;
  48.   Brush.Color := clBlue;
  49.   Rectangle( 10, 91, 360, 130 );
  50.   end;
  51.   with Canvas do
  52. begin
  53.   Pen.Color := clWhite;
  54.   Pen.Width := 0;
  55.   Brush.Color := clWhite;
  56.   Rectangle( 10, 131, 360, 170 );
  57.   end;
  58.     with Canvas do
  59. begin
  60.   Pen.Color := clBlue;
  61.   Pen.Width := 0;
  62.   Brush.Color := clBlue;
  63.   Rectangle( 10, 171, 360, 210 );
  64.   end;
  65.   with Canvas do
  66.   begin
  67.   Pen.Color := clRed;
  68.   Pen.Width := 0;
  69.   Brush.Color := clRed;
  70.   SetLength( Puntos, 3 );
  71.   Puntos[0].x := 10;
  72.   Puntos[0].y := 10;
  73.   Puntos[1].x := 150;
  74.   Puntos[1].y := 110;
  75.   Puntos[2].x := 10;
  76.   Puntos[2].y := 210;
  77.   Polygon( Puntos );
  78.   end;
  79. end;
  80.  
  81. end.



Solo me falta la estrella. :)
Un Saludo.



#5 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 13 diciembre 2008 - 02:25

Hola


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var  Puntos: array of TPoint;
  3. Begin
  4. with Canvas do
  5. begin
  6. Pen.Color := clBlue;
  7. Pen.Width := 0;
  8. Brush.Color := clBlue;
  9. Rectangle( 10, 10, 360, 50 );
  10. Rectangle( 10, 91, 360, 130 );
  11. Rectangle( 10, 171, 360, 210 );
  12.  
  13. Pen.Color := clWhite;
  14. Pen.Width := 0;
  15. Brush.Color := clWhite;
  16. Rectangle( 10, 51, 360, 90 );
  17. Rectangle( 10, 131, 360, 170 );
  18.  
  19. Pen.Color := clRed;
  20. Pen.Width := 0;
  21. Brush.Color := clRed;
  22. SetLength( Puntos, 3 );
  23. Puntos[0].x := 10;
  24. Puntos[0].y := 10;
  25. Puntos[1].x := 150;
  26. Puntos[1].y := 110;
  27. Puntos[2].x := 10;
  28. Puntos[2].y := 210;
  29. Polygon( Puntos );
  30. end;
  31.  
  32. end;


Saludos
  • 0

#6 coso

coso

    Member

  • Miembros
  • PipPip
  • 12 mensajes
  • LocationEspaña

Escrito 13 diciembre 2008 - 03:28

(*) (*) (*)


delphi
  1.     Brush.Color := clWhite;
  2.     setlength(Puntos,6);
  3.     for i := 0 to 5 do
  4.     begin
  5.           Puntos[i].x := Round( 75  + 30*cos(- PI/2 + i*(72*PI/90));
  6.           Puntos[i].y := Round( 110 + 30*sin(- PI/2 + i*(72*PI/90));
  7.     end;
  8.  
  9.     Polygon(Puntos);
  10.     FloodFill(75,110,Brush.Color,fsBorder);


  • 0

#7 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 04:09

Hola Caral y Coso.

      Caral gracias por ese codigo quedo de maravilla.Yo como siempre malgastando bytes con la situacion economica como esta. :D

      Coso gracias por el codigo, la estrella salio bien.Solo con un problemita y te explico:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. i: integer;
  4. Puntos: array of TPoint;
  5. Begin
  6. with Canvas do
  7. begin
  8. // franjas azules
  9. Pen.Color := clBlue;
  10. Pen.Width := 0;
  11. Brush.Color := clBlue;
  12. Rectangle( 10, 10, 360, 50 );
  13. Rectangle( 10, 91, 360, 130 );
  14. Rectangle( 10, 171, 360, 210 );
  15.  
  16. // franjas blancas
  17. Pen.Color := clWhite;
  18. Pen.Width := 0; Brush.Color := clWhite;
  19. Rectangle( 10, 51, 360, 90 );
  20. Rectangle( 10, 131, 360, 170 );
  21.  
  22. // triangulo
  23. Pen.Color := clRed;
  24. Pen.Width := 0;
  25. Brush.Color := clRed;
  26. SetLength( Puntos, 3 );
  27. Puntos[0].x := 10;
  28. Puntos[0].y := 10;
  29. Puntos[1].x := 150;
  30. Puntos[1].y := 110;
  31. Puntos[2].x := 10;
  32. Puntos[2].y := 210;
  33. Polygon( Puntos );
  34.  
  35. //Estrella
  36.   Brush.Color := clWhite;
  37.   setlength(Puntos,6);
  38.   for i := 0 to 5 do
  39.   begin
  40.   Puntos[i].x := Round( 75  + 30*cos(- PI/2 + i*(72*PI/90)));  // faltaba un colchete
  41.   Puntos[i].y := Round( 110 + 30*sin(- PI/2 + i*(72*PI/90)));  // aqui otro
  42.     end;
  43.   Polygon(Puntos);
  44.   // esta linea si la dejo me palpadea la imagen y se apaga
  45.   //FloodFill(75,110,Brush.Color,fsBorder);
  46. end;
  47. end;



Aqui esta el codigo completo.Unos pequeños detalles, dos colchetes que faltaban pero eso es bueno para ver que tan despierto esta uno. :)
Ahora si te fijas en la ultima linea esta comentada, la tuve que quitar pues me muestra la imagen solo si tengo el boton apretado, al soltarlo la imagen desaparece y el form se pone de color blanco.
¿Tienes alguna idea de que pasa?
La estrella esta bien, solo que me gustaria que fuese blanca entera.

Un Saludo.

#8 coso

coso

    Member

  • Miembros
  • PipPip
  • 12 mensajes
  • LocationEspaña

Escrito 13 diciembre 2008 - 05:20

ein?!? a ver q miro...
  • 0

#9 coso

coso

    Member

  • Miembros
  • PipPip
  • 12 mensajes
  • LocationEspaña

Escrito 13 diciembre 2008 - 05:23

Si, es que no te puse el canvas.pen.color := clwhite



delphi
  1. Pen.Color  := clWhite;
  2. Brush.Color := clWhite;
  3. setlength(Puntos,6);
  4. for i := 0 to 5 do
  5. begin
  6. Puntos[i].x := Round( 75  + 30*cos(- PI/2 + i*(72*PI/90)));  // faltaba un colchete
  7. Puntos[i].y := Round( 110 + 30*sin(- PI/2 + i*(72*PI/90)));  // aqui otro
  8. end;
  9. Polygon(Puntos);
  10. FloodFill(75,110,clWhite,fsBorder);



Ahora te tendria que funcionar bien ;) saludos
  • 0

#10 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 13 diciembre 2008 - 05:27

Hola
Lo que es desconocer de estas cosas, algo tan sencillo y no saber que es.
Muy bueno Coso. (y)
Saludos

  • 0

#11 coso

coso

    Member

  • Miembros
  • PipPip
  • 12 mensajes
  • LocationEspaña

Escrito 13 diciembre 2008 - 05:30

El error venia que 'FloodFill' va pintando desde el punto inicial (75,110)  hasta encontrar una zona cerrada (fsBorder) del color indicado (Brush.Color) al estar la estrella pintada con lapiz no blanco, el programa solo veia cinco zonas 'desconectadas' y pintaba toda la pantalla.
  • 0

#12 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 13 diciembre 2008 - 05:35

Hola
Con estos conocimientos nos podrias echar una mano en el hilo de la gallina. (y)
No podemos poner los huevos en el sarten  :D :D
Saludos
  • 0

#13 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 05:54

Gracias Coso, ahora si esta de peluche mi bandera. :)



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. i: integer;
  4. Puntos: array of TPoint;
  5. Begin
  6. with Canvas do
  7. begin
  8. // franjas azules
  9. Pen.Color := clBlue;
  10. Pen.Width := 0;
  11. Brush.Color := clBlue;
  12. Rectangle( 10, 10, 360, 50 );
  13. Rectangle( 10, 91, 360, 130 );
  14. Rectangle( 10, 171, 360, 210 );
  15. // franjas blancas
  16. Pen.Color := clWhite;
  17. Pen.Width := 0; Brush.Color := clWhite;
  18. Rectangle( 10, 51, 360, 90 );
  19. Rectangle( 10, 131, 360, 170 );
  20. // triangulo
  21. Pen.Color := clRed;
  22. Pen.Width := 0;
  23. Brush.Color := clRed;
  24. SetLength( Puntos, 3 );
  25. Puntos[0].x := 10;
  26. Puntos[0].y := 10;
  27. Puntos[1].x := 150;
  28. Puntos[1].y := 110;
  29. Puntos[2].x := 10;
  30. Puntos[2].y := 210;
  31. Polygon( Puntos );
  32.   //Estrella
  33.   Pen.Color  := clWhite;
  34.   Brush.Color := clWhite;
  35.   setlength(Puntos,6);
  36.   for i := 0 to 5 do
  37.   begin
  38.   Brush.Color := clWhite;
  39.   Puntos[i].x := Round( 75  + 35*cos(- PI/2 + i*(72*PI/90)));
  40.   Puntos[i].y := Round( 110 + 35*sin(- PI/2 + i*(72*PI/90)));
  41.     end;
  42.   Polygon(Puntos);
  43.   FloodFill(75,110,clWhite,fsBorder);
  44. end;
  45. end;



Un Saludo.


#14 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 05:56

Hola
Con estos conocimientos nos podrias echar una mano en el hilo de la gallina. (y)
No podemos poner los huevos en el sarten  :D :D
Saludos


jajajajajaja somos un fracaso Carlos, si nos dejan nuestras esposas nos morimos de hambre, no podemos ni freir un huevo. :p :D :D :D

Un Saludo.

#15 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 13 diciembre 2008 - 06:00

Hola
Esto del Cambas es tan dificil como freir un huevo.
He intentado hacerlo, pero definitivamente no se puede, tienes razon, nos morimos de hambre sin nuestras esposas. :D :D
Saludos
PD: Algun maestro que nos ilumine. :
  • 0

#16 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 15 diciembre 2008 - 10:38

En un momento de aburrimiento me hice mi bandera también :D



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. with Canvas do
  4.     begin
  5.       {*** FONDO BLANCO ***}
  6.  
  7.       Pen.Color := clWhite;
  8.       Pen.Width := 0;
  9.       Brush.Color := clWhite;
  10.       Rectangle(10,10,360,270);
  11.  
  12.       {*** PRIMER CUADRO AZUL ***}
  13.       Pen.Color := clBlue;
  14.       Pen.Width := 0;
  15.       Brush.Color := clBlue;
  16.       Rectangle(10,10,165,120);
  17.  
  18.       {*** PRIMER CUADRO ROJO ***}
  19.       Pen.Color := clRed;
  20.       pen.Width := 0;
  21.       Brush.Color := clRed;
  22.       Rectangle(210,10,360,120);
  23.  
  24.       {*** SEGUNDO CUADRO ROJO ***}
  25.       Pen.Color := clRed;
  26.       pen.Width := 0;
  27.       Brush.Color := clRed;
  28.       Rectangle(10,270,165,155);
  29.  
  30.       {*** SEGUNDO CUADRO AZUL ***}
  31.       Pen.Color := clBlue;
  32.       pen.Width := 0;
  33.       Brush.Color := clBlue;
  34.       Rectangle(210,270,360,155);
  35.     end;
  36. end;



Saludos.
  • 0

#17 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 15 diciembre 2008 - 10:46

Yo quiero ver cómo diantres le haríamos para el escudito  :|  :s  :p  :o

Imagen Enviada
  • 0

#18 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 15 diciembre 2008 - 10:48

Pues somos dos, eso es algo bastante difícil pero no imposible, habría que dedicarle muucho tiempo, pero...no estamos en esas :D :D :D :p
  • 0

#19 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 15 diciembre 2008 - 10:53

Yo quiero ver cómo diantres le haríamos para el escudito  :|  :s  :p  :o

Imagen Enviada


Y si intentan crear la imagen por codigo, despues de crear el rectangulo? ;)
Puede cer, digo yo. :p

Un Saludo.

#20 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 15 diciembre 2008 - 11:04

Amigo Fernando, que tal si hacemos esto:



delphi
  1. with Canvas do   
  2. begin
  3.      
  4. {*** FONDO BLANCO ***}       
  5. Pen.Color := clWhite;     
  6. Pen.Width := 0;     
  7. Brush.Color := clWhite;     
  8. Rectangle(10,10,360,270);
  9.  
  10.  
  11. {*** PRIMER y Segundo CUADRO AZUL ***}     
  12. Pen.Color := clBlue;     
  13. Pen.Width := 0;     
  14. Brush.Color := clBlue;     
  15. Rectangle(10,10,165,120);
  16. Rectangle(210,270,360,155);
  17.  
  18. {*** PRIMER y Segundo CUADRO ROJO ***}     
  19. Pen.Color := clRed;     
  20. pen.Width := 0;     
  21. Brush.Color := clRed;     
  22. Rectangle(210,10,360,120);
  23. Rectangle(10,270,165,155);
  24.  
  25.   end;
  26. end;



Digo yo, tenemos que economizar codigo, la cricis economica nos apalea. :p

Un Saludo.


PD: Que falto de respeto estoy. :p :D :D :D