Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problema con SetBkMode (fondo transparente) (https://www.clubdelphi.com/foros/showthread.php?t=76382)

dudignac 27-10-2011 16:04:05

Problema con SetBkMode (fondo transparente)
 
Buenos dias gente, paso a detallar un inconveniente que no puedo solucionar hace ya dos dias.
Estoy utilzando Delphi XE. Quiero hacer algo simple. Tengo un TPanel donde quiero dibujar una linea en diagonal con fondo TRANSPARENTE. Para eso creo una TImage, dibujo la linea, seteo la imagen como transparente, seteo el SetBkMode y la coloco como parent del panel.

El problema esta en que la linea la dibuja correctamente, pero el fondo no es transparente, si no que es blanco (tapando todo lo que esta detras). Lo mas desesperante es que depende de que PC este ejecutando. Desde donde estoy ahora se genera el fondo transparente, pero si ejecuto la aplicacion desde otra pc (con el mismo S.O.) el fondo es blanco.

Les paso el codigo:

Código:

procedure TfrmMainDesign.createLine();
var
  newLine        : TImage;
  OldMode: integer;
begin
  newLine                    := TImage.Create(self);
  newLine.Width              := 380;
  newLine.Height            := 220;
  oldMode := SetBkMode(newLine.Canvas.Handle, TRANSPARENT);
  newLine.Canvas.Pen.Color  := clBlack;
  newLine.Canvas.Pen.Width  := 2;
  newLine.Canvas.Brush.Style := bsClear;
  newLine.Canvas.Pen.Style  := psSolid;
  newLine.Canvas.MoveTo(0,0);
  newLine.Canvas.LineTo(380, 220);
  SetBkMode(newLine.Canvas.Handle, oldMode);
  newLine.Transparent := True; //he probado sacando esta linea y tampoco funciona
  newLine.Visible    := True;
  newLine.Parent      := panel3;

Espero sus respuestas,
saludos!

ecfisa 27-10-2011 17:18:17

Hola dudignac.

Probá de esta forma:
Código Delphi [-]
...
begin
  Image:= TImage.Create(Self);
  with Image do
  begin
    Width := 380;
    Height:= 220;
    Canvas.FloodFill(1, 1, Panel1.Color, fsBorder);
    Canvas.Pen.Color:= clBlack;
    Canvas.Pen.Width:= 2;
    Canvas.Pen.Style:= psSolid;
    Canvas.MoveTo(0,0);
    Canvas.LineTo(380, 220);
    Transparent:= True;
    Parent:= Panel1;
  end;
end;

Un saludo.

dudignac 27-10-2011 17:41:53

Gracias Ecfisa!!!! funciona a la perfeccion!!!!!


La franja horaria es GMT +2. Ahora son las 03:52:32.

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