Fórum Portabilidade de aplicações Delphi em lt;gt; versões do Wi #203226
27/12/2003
0
Estou num dilema.
Estou desenvolvendo uma aplicação em Delphi 7 em Windows XP. A aplicação contém imagens de fundo em seus formulários e alguns efeitos de formulário que a versão 7 do Delphi traz, por exemplo, a propriedade que faz o formulário ficar transparente (AlphaBlend).
Fiz um SplashScreen legal utilizando dessas novas propriedades do Delphi, neste caso coloquei uma figura no fundo do formulário e deixei o Form transparente de modo que quando carrego o formulário só aparece a figura de fundo recortada. Perfeito.
Quando tento executar a aplicação sob o Windows 98 por exemplo, fica tudo horrível, o Form do SplashScreen já não fica mais transparente e as figuras do fundo do form ficam todas chaviscadas (mesmo utilizando a mesma resolução de 1024 x 768 em 32 bits).
Gostaria de saber como proceder neste caso, pois gostaria que minha aplicação funcionasse da mesma forma em qualquer versão anterior a do Windows XP com os mesmos recursos gráficos e de animação que projetei até agora.
Será preciso levar alguma DLL do Windows Xp para o Windows 98 ?
Se eu tentar compilar a aplicação sob o Windows 98 as propriedades do Delphi 7 não fazem o mesmo efeito.
Alguém sabe de uma solução para esse problema, ou pelo menos me explicar detalhadamente por que isso ocorre ?
Henryabm
Curtir tópico
+ 0Posts
27/12/2003
Beppe
Gostei + 0
28/12/2003
Cebikyn
Para usar a função AlphaBlend é necessário usar Windows na frente:
Windows.AlphaBlend, senão o Delphi confundirá com a propriedade do formulário.
Gostei + 0
28/12/2003
Beppe
Gostei + 0
28/12/2003
Cebikyn
Gostei + 0
28/12/2003
Beppe
Mas você já conseguiu fazer isso? Eu tentei, mas tem vários problemas:
1) Ao chamar GetDC(GetDesktopWindow), esse DC já tem o form desenhado. E se eu chamar Hide; Show no form, ele fica piscando na tela...
2) Tb não consegui fazer o AlphaBlend funcionar...
var InheritedImage: Boolean; procedure TForm1.FormPaint(Sender: TObject); var DesktopDC: HDC; BlendData: TBlendFunction; Back: TBitmap; Org: TPoint; begin if InheritedImage then Exit; InheritedImage := True; Org := GetClientOrigin; DesktopDC := GetDC(GetDesktopWindow); try BitBlt(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, DesktopDC, Org.X, Org.Y, SRCCOPY); finally ReleaseDC(GetDesktopWindow, DesktopDC); end; BlendData.BlendOp := AC_SRC_OVER; BlendData.BlendFlags := 0; BlendData.SourceConstantAlpha := 80; BlendData.AlphaFormat := AC_SRC_ALPHA; Back := GetFormImage; try Windows.AlphaBlend(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, Back.Canvas.Handle, Org.X, Org.Y, Org.X + ClientWidth, Org.Y + ClientHeight, BlendData); finally Back.Free; end; end;
To muito podre pra esse tipo de coisa últimamente, só fiz por fazer mesmo, mas se vc puder resolver, legal :D ...
Gostei + 0
28/12/2003
Cebikyn
Gostei + 0
28/12/2003
Beppe
No meu código, esqueci de reinicializar a variável InheritedImage. Ela é usada para que evitar recursão em TForm.OnPaint. GetFormImage dispara este evento também. Então deveria ter um InheritedImage := False no final do método FormPaint. De qualquer forma não é isso que faria funcionar...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)