Ver Mensaje Individual
  #4  
Antiguo 11-11-2005
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Reputación: 20
elcigarra Va por buen camino
código

No importa demasiado la complejidad excepto que te cree conflictos emocionales torturar un poco al windows . Aunque sí utiliza recursos, no me parece que sea demasiado para los PC de hoy. Yo he combinado cientos de transparencias de hasta 1 pixel (para hacer sombras sobre lo de atrás).

Por ejemplo, y ya que estamos y hablando de regiones y transparencias, ¿vieron que espectacular el "spash screen" del acrobat reader 6.0? Ese es un ejemplo de lo astutamente que puede diseñarse un gráfico con regiones transparentes. Bueno, te incluyo algo de código útil para generar una región a partir de cualquier gráfico: Podes sacar la variable de Transparent color y pasarlo en el enunciado de la función si querés que no sea necesariamente el pixel de abajo a la izquierda.

Código Delphi [-]
 
function CreateBmpRgn(ABitmap : TBitmap): HRGN;
var
  TransparentColor : TColor;
  X, Y, W, H : Integer;
  Temp : HRGN;
begin
  W := ABitmap.Width;
  H := ABitmap.Height;
  TransparentColor := ABitmap.Canvas.Pixels[0, H - 1];
  Result := 0;
  for X := 0 To W - 1 do begin
    for Y := 0 To H - 1 do begin
      if ABitmap.Canvas.Pixels[X, Y] <> TransparentColor then begin
        if Result = 0 then 
          Result := CreateRectRgn(X, Y, X + 1, Y + 1) 
        else begin
          Temp := CreateRectRgn(X, Y, X + 1, Y + 1);
          CombineRgn(Result, Result, Temp, RGN_OR);
          DeleteObject(Temp);
        end;
      end;
    end;
  end;
end;

Deberías definirte una variable (Xej PanelRegion) de tipo THandle y luego de:
Código Delphi [-]
 
PanelRegion := CreateBmpRgn(miDibujo);
utilizar la función SetWindowRgn para el panel.
Responder Con Cita