Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2011
Avatar de Roll462011
Roll462011 Roll462011 is offline
Registrado
NULL
 
Registrado: jul 2011
Posts: 7
Poder: 0
Roll462011 Va por buen camino
Imagen Semi Transparente con TrackBar

Estimados Foristas:
Soy relativamente nuevo en el Foro y en la OOP con Delphi. Un cliente me ha pedido una pequeña aplicación para crear las identificaciones personales para nieveles de acceso a su Empresa y he utilizado un truco o mas bien un tutorial publicado de manera fenomenal por "escafandra" en DelphiAccess, titulado Transparencias. Mi gratitud por este valioso aporte.
Ahora, he logrado implementar un método OnChange de un TTrackBar con el objetivo de ir incrementando o disminuyendo la Transparencia de la imagen de fondo a gusto del cliente.
Para lograrlo en el Create del Formulario incluí entre otras esta línea:

Image4.Picture.Bitmap.Assign(Image2.Picture.Bitmap);

Con el objetivo de tener la imagen original disponible para aplicar un nivel de transparencia y en el OnChange del TrackBar puse lo siguiente:

Image2.Picture.Bitmap.PixelFormat := pf32bit;
Image2.Picture.Bitmap.Assign(Image4.Picture.Bitmap);
DrawSemiTransparent(Image2.Canvas, Image3.Picture.Bitmap, TrackBar1.Position);
Invalidate;

Esto me funciona bien, aunque no sé si será la más profesional, solo que para terminar con un toque de profesionalismo me gustaría que ustedes me lo evaluaran y me dieran su criterio, pero que además me ayuden a buscar una solución al parpadeo de la imagen mientras le cambio la transparencia:



Esta es la Imagen despues de aplicar la transparencia

Responder Con Cita
  #2  
Antiguo 11-08-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola y bienvenido Roll462011.

Me alegra que ese tutorial acerca de las transparencias te haya perecido interesante.

Para evitar el parpadeo debes poner
Código Delphi [-]
Form1.Doublebuffered:= true
.

Yo utilizaría un TBitmap temporal para guardar la imagen original de esta manera:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image2: TImage;
    Image3: TImage;
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    TmpBitmap: TBitmap;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure DrawSemiTransparent(Canvas: TCanvas; bmp: TBitmap; Percent: integer);
var
   bf: BLENDFUNCTION;
begin
   bf.BlendOp:= AC_SRC_OVER;
   bf.BlendFlags:= 0;
   bf.SourceConstantAlpha:= MulDiv($FF, Percent, 100);
   bf.AlphaFormat:= 0;
   Windows.AlphaBlend(Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bf);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Doublebuffered:= true;
  TmpBitmap:= TBitmap.Create;
  TmpBitmap.Assign(Image3.Picture.Graphic);
  Image3.Picture.Bitmap.Assign(TmpBitmap);
  TmpBitmap.Assign(Image2.Picture.Graphic);
  TmpBitmap.PixelFormat := pf32bit;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Image2.Picture.Bitmap.Assign(TmpBitmap);
  DrawSemiTransparent(Image2.Canvas, Image3.Picture.Bitmap, TrackBar1.Position);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TmpBitmap.Destroy;
end;

end.


Saludos.
Responder Con Cita
  #3  
Antiguo 12-08-2011
Avatar de Roll462011
Roll462011 Roll462011 is offline
Registrado
NULL
 
Registrado: jul 2011
Posts: 7
Poder: 0
Roll462011 Va por buen camino
Ese era el toque que me faltaba

Oye Escafandra, no sé como agradecerte, en verdad tienes un dominio envidiable de la programación... cuando sea grande quiero ser como tú, jajajajaja

Gracias de verdad era lo que precisaba para terminar esta pequeña aplicación.

Ahora voy a cambiarla para SQL y leer desde el Sistema de la Nómina, los datos que están todos guardados allí, solo quiero agregar una Tabla al SQL para guardar los cambios en el entorno que el cliente definió en la interface como por ejemplo: Imagen del Fondo, Logo de la Compañia, Intensidad de la Transparencia, último registro visitado, etc
Se me ha ocurrido, y te consulto eh..., que cuando cambien el logo, permitirle dinámicamente modificar el tamaño y la posición del TImage que lo contiene pero no quiero complicarme poniendo un botón para el With, ni el Height, el Top o el Left; sino ponerle al TImage las rejillitas que se utiliza en los software de tratamiento gráfico que permiten redimensionarlos y moverlos a la posición que quieras
Responder Con Cita
Respuesta



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
Imagen png con formulario transparente? marcosl Gráficos 10 07-09-2012 17:29:19
Imprimir una imagen png transparente rufo Impresión 9 15-09-2011 16:11:03
Crear una Imagen con Fondo Transparente en Delphi jfgomez Gráficos 2 06-02-2010 23:50:38
imagen en quickreport transparente dtomeysoto Impresión 3 18-10-2007 20:40:34


La franja horaria es GMT +2. Ahora son las 11:49:19.


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
Copyright 1996-2007 Club Delphi