Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 26-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Manejando regiones se puede crear el efecto deseado:
Creamos un form con un Timage. En el Timage cargamos un bitmap y añadimos el código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

ADWord = array [0..0] of DWORD;
PADWord = ^ADWord;

var
  Form1: TForm1;


implementation

{$R *.dfm}
//---------------------------------------------------------------------------
procedure SkinControl(Control: TWinControl; bmp: TBitmap);
var
  TransparentColor: DWORD;
  rgn, rgnTemp: HRGN;
  ini, x, y: integer;
  Pixel: PADWord;
begin
  bmp.HandleType:= bmDIB;
  bmp.PixelFormat:= pf32bit;
  Control.SetBounds(Control.Left, Control.Top, bmp.Width, bmp.Height);

  TransparentColor:= PADWord(bmp.ScanLine[bmp.Height-1])[0];

  rgn:= CreateRectRgn(0, 0, Control.Width, Control.Height);
  CombineRgn(rgn, rgn, rgn, RGN_DIFF);

  for  y:=0 to bmp.Height-1 do
  begin
    Pixel:= PADWord(bmp.ScanLine[y]);
    ini:= 0;
    for x:=0 to bmp.Width-1 do
    begin
       if pixel[x] <> TransparentColor then
       begin
         rgnTemp:= CreateRectRgn(ini, y, x, y+1);
         CombineRgn(rgn, rgn, rgnTemp, RGN_OR);
         DeleteObject(rgnTemp);
         ini:= x;
       end
       else inc(ini);
    end;
  end;
  SetWindowRgn(Control.Handle, rgn, true);
  DeleteObject(rgn);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle:= bsNone;
  Image1.AutoSize:= false;
  Image1.Left:= 0;
  Image1.Top:= 0;
  SkinControl(self, Image1.Picture.Bitmap);

end;

end.

Saludos.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
cargar transparencias de png cl2raul Gráficos 2 08-07-2010 02:28:08
PNGs y transparencias Deiv HTML, Javascript y otros 4 13-02-2009 01:01:22
FireFox y Opera: Transparencias? lag_0 HTML, Javascript y otros 4 10-11-2007 11:16:10
Transparencias y carga de imágenes david.rguez Gráficos 1 04-09-2006 18:01:40
Transparencias reales... elcigarra Gráficos 3 13-07-2005 14:29:20


La franja horaria es GMT +2. Ahora son las 00:10:47.


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