Fórum Win98 e Form semi transparente #228504
28/04/2004
0
Nerdex
Curtir tópico
+ 0Posts
28/04/2004
Wolverine
procedure TForm1.FormShow(Sender: TObject); begin Brush.Style := BsClear; end;
Gostei + 0
28/04/2004
Nildo
Gostei + 0
28/04/2004
Wolverine
Gostei + 0
28/04/2004
Nildo
Gostei + 0
28/04/2004
Cebikyn
Gostei + 0
28/04/2004
Aroldo Zanela
O caminho mais curto para isto é com a Jedi VCL.
Gostei + 0
29/04/2004
Nildo
Gostei + 0
29/04/2004
Nerdex
Pode demonstrar com código o Windows.AlfaBlend, para o caso?
Ñ entendi este aspecto: ´o form deve ser uma única imagem´
Assim evitaremos de ter que instalar um trem de componentes:
VCL Jedi já obsoleto...
Gostei + 0
29/04/2004
Nerdex
Qual o valor do parâmetro _BLENDFUNCTION que vc especificou?
Estou testando assim:
windows.AlphaBlend(???????,11,12,13,14,15,16,17,19,20,1000);
Nos ???????, não acho o valor correto?!
Gostei + 0
29/04/2004
Nerdex
var Blend: _BLENDFUNCTION;
begin
with Blend do
begin
BlendOp:=AC_SRC_OVER;
BlendFlags:=0;
SourceConstantAlpha:=100;
AlphaFormat:=0;
end;
Windows.AlphaBlend(Form1.Handle,0,0,20,20,Panel1.Handle,0,0,20,20,Blend);
end;
Dá uma olhada..., mas não obtive sucesso...
Gostei + 0
29/04/2004
Aroldo Zanela
Nildo,
A Jedi VCL possui uma paleta de componentes (jvForms) que permite vários recursos para transparências de form, que funcionam inclusive no Windows 98.
Gostei + 0
30/04/2004
Cebikyn
Vc tem que obter a imagem do form (para testes, pode ser o conteúdo do canvas mesmo, fará seu form transparente, mas não os componentes) e combinar ela com a imagem do desktop (procura aqui no fórum que vc acha como obte-la) e depois desenhar a imagem obtida no Canvas do form. A noite eu coloco os códigos.
Gostei + 0
01/05/2004
Nerdex
Põem o código aí... de repente é tri...
... as taxas de atualização são consideráveis... ficam piscando? ...com a movimentação do form? Faz uma força aí e publica, aee...
valew
Gostei + 0
01/05/2004
Cebikyn
Declaração de variáveis:
var Bmp: TBitmap; DC: HDC; dx, dy: Integer;
OnCreate do Form:
procedure TForm1.FormCreate(Sender: TObject); begin Bmp := TBitmap.Create; Bmp.Width := GetSystemMetrics(SM_CXSCREEN); Bmp.Height := GetSystemMetrics(SM_CYSCREEN); dx := GetSystemMetrics(SM_CXFRAME); dy := GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME); end;
OnShow do form:
procedure TForm1.FormShow(Sender: TObject); begin ShowWindow(Handle, SW_HIDE); SetActiveWindow(0); Sleep(100); DC := GetDC(0); BitBlt(Bmp.Canvas.Handle, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), DC, 0, 0, SRCCOPY); ReleaseDC(0, DC); ShowWindow(Handle, SW_SHOW); end;
Agora o principal, o OnPaint do form:
procedure TForm1.FormPaint(Sender: TObject); var bf : _BLENDFUNCTION; begin bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.SourceConstantAlpha := 100; bf.AlphaFormat := 0; Windows.AlphaBlend(Canvas.Handle, 0,0,ClientWidth, ClientHeight,Bmp.Canvas.handle,Left+dx,Top+dy, ClientWidth,ClientHeight,bf); end;
E para finalizar o OnResize e OnDestroy do form:
procedure TForm1.FormResize(Sender: TObject); begin Repaint; end; procedure TForm1.FormDestroy(Sender: TObject); begin Bmp.Free; end;
O código funciona, mas precisa de ajustes, tipo: qnd o form é movido, ele não atualiza o fundo (mas isso pode ser corrigido facilmente manipulando-se as mensagens q o form recebe do Windows) e ele fica com flickering (piscando) quando é redimensionado.
Gostei + 0
01/05/2004
Cebikyn
private procedure WMMove(var Msg: TWMMove); message WM_MOVE; [...] procedure TForm1.WMMove(var Msg: TWMMove); begin inherited; Repaint; end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)