Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Haciendo ventanas con cualquier forma.. (https://www.clubdelphi.com/foros/showthread.php?t=85649)

FENIXadr 13-04-2014 02:36:58

Haciendo ventanas con cualquier forma..
 
1 Archivos Adjunto(s)
Si señor... basta de ventanas rectangulares, aqui les traigo un truquito muy sencillo pero que puede solucionarles alguna situación a la hora de hacer cosas estéticamente raras pero lindas.. se trata de hacer un Form de cualquier forma.. si .. asi es .. no leyeron mal.. de cualquier forma, el límite es su imaginación..
Para este truco vamos a utilizar algunas propiedades que traen los forms y que generalmente no se le da demaciada importancia, estamos hablando de la prpiedad BorderStyle, Color,TransparentColor y TransparentColorValue.
Generalmete los forms tiene un color fijo en casi todas las aplicaciones dependiendo del tema que usemos en windows, nosotros vamos a colocar el color Fucsia como nuetro color de ventana y de esta manera todo lo que sea Fucsia será transparente..

entonces :

BorderStyle = bsNone ----> para que no muestre borde alguno.
Color = clFuchsia ----> color de fondo del Form.
TransparentColor = True ----> Activamos la transparencia
TransparentColorValue = clFuchsia -----> Especificamos que color se tomará como transparente


esto se coloca directamente desde el "Object Inspector" sin necesidad de escribir ni una sola línea de código..

luego agregamos un TImage con una imagen cualquiera para darle la forma que deseamos a nuestro form donde todo lo que querramos que sea transparente debe ser de color fucsia..

en este punto ya logramos lo que deseábamos.. un form de cualquier forma.. pero debemos agregar un mensaje para poder moverla porque ya no tenemos el borde superior que hacia este trabajo...

vamos al código
Código Delphi [-]
unit UForma;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Este procedimiento es para mover la ventana desde cualquier lugar
// que le hagamos Click.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    //if Y < 30 then  // habilitamos solo los primeros 30 pixeles superiores para
    begin           // simular la barra superior de un form normal
      ReleaseCapture;
      SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;

end.
como ven es realmente sencillo...

lo único que deberán tener en cuenta es el alisado del borde en la imagen, no pude estar alisado sino se verán pequeños puntos fuccias..

si tienen que retocar alguna imagen para pintar el exterior de color fucsia con algún soft tipo Photoshop, deben tener en cuenta que los valores del fucsia en RGB deben ser : RED = 255, GREEN = 0 y BLUE = 255.

adjunto un ejemplo listo para compilar.

espero que les guste.. comenten cualquier inconveniente o duda..

saludos..

FENIXadr 13-04-2014 06:22:53

Fe de errata :

hay un error en el código mostrado con respecto al evento OnMouseDown.. debe ser el evento del TImage y no el del Form como está puesto alli..

o sea en vez de "FormMouseDown" debería ser "Image1MouseDown"..

Mil disculpas por el error.

Saludos.

dec 13-04-2014 16:27:14

Hola,

Está muy chulo, porque, sólo cambiando unas cuantas propiedades del formulario conseguimos el efecto deseado.

Gracias por compartirlo. :)

Casimiro Notevi 13-04-2014 16:45:49

^\||/^\||/^\||/

MAXIUM 13-04-2014 19:32:42

Podria mejor si se usa un componente PNG contransparencia para poder alisar los bordes digo yo.

FENIXadr 13-04-2014 19:50:44

Cita:

Podria mejor si se usa un componente PNG contransparencia para poder alisar los bordes digo yo.

Hola MAXIUM..

No he probado lo que propones.. pero no creo que funcione porque el problema no es la imagen sino el método de transparencia.. se toma un color específico.. y si el color no es exactamente igual.. no se hace transparente.. por eso hice incapié en el suavisado del borde de la imagen y en que el color fucsia fuese R=255, G=0, B=255, si esto no es así el fucsia deja de ser transparente..

En el caso del ejemplo, a la imagen con Bart Simpson la tuve que retocar en PhotoShop pero cuando rrellené el exterior con el color fucsia usando la herramienta del bote de pinturta, le puse la tolerancia en 0 y desactivé el suavisado de relleno, de otra manera quedan los bordes suavisados y se ven todos los tonos de fucsia que no sean R=255, G=0, B=255..

de todos modos si alguien logra suavisar los bordes.. bienvenido será..

Saludos..

ElKurgan 13-04-2014 20:11:25

Muy buen aporte, amigo

nlsgarcia 13-04-2014 21:00:29

FENIXadr,

Excelente :) ^\||/

Nelson.

ecfisa 14-04-2014 00:44:54

Hola FENIXadr.

Muchas gracias ^\||/

Saludos :)

Julián 14-04-2014 02:03:54

http://melander.dk/articles/alphasplash
http://melander.dk/articles/alphasplash2

Neftali [Germán.Estévez] 14-04-2014 10:34:08

Gracias por el aporte.

FENIXadr 14-04-2014 23:46:24

Hola Julián... Estuve viendo estos links.. y estan muy buenos.. pero hasta donde yo se, el Alpha Blend es más para tratamiento de imágenes.. no se si se puede utilizar para suavisar los Forms.. si lo usas para los Forms publicalo que sería buenísimo...

Hace unos años conseguí una rutina para trabajar con Alpha Blend que es rapidísima y muy sencilla.. La voy a buscar y voy a crear otro hilo para que los que no saben usar el Alpha, aprendan como hacer mezclas de imágenes, esfumados o transparencias.. entre otras cosas..

Saludos..

Julián 16-04-2014 02:26:20

Cita:

Empezado por FENIXadr (Mensaje 475152)
.. pero hasta donde yo se, el Alpha Blend es más para tratamiento de imágenes.. no se si se puede utilizar para suavisar los Forms.. si lo usas para los Forms publicalo que sería buenísimo....

No hace falta que lo publique yo. En esos links explica eso exactamente: Cómo hacer ventanas con partes transparentes o semitransparentes usando alphablend. Y hasta ponen el código para seguir el ejemplo.

Para imágenes de casi todo tipo hay unos excelentes componentes, totalmente libres, y además gratuitos, que usé hace mucho tiempo, y que creo que se llamaban GraphicsEx o algo así, y permitian hacerle de casi todo a las imágenes, filtros, capas, transparencias, etc. Vamos, pa montarte un "photoshop line" con muy poquito esfuerzo. Si mañana me acuerdo miraré su nombre (el de los componenets) en el trabajo, en dónde aún tengo windows en el pc.

Jau!


La franja horaria es GMT +2. Ahora son las 21:04:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi