Newsgroup: it.comp.lang.delphi
Titolo: form trasparente...

è possibile creare una form trasparente che giri bene su win9x?
quello che voglio è usare una bitmap per lo sfondo dell'applicazione e usare
bordi di forma particolare...
la proprietà TrasparentColor sembra non avere alcun effetto in w9x.
grazie,
brand77

 ha scritto nel messaggio:

se non ho capito male tutto quello che ti serve è il mitico CoolForm, lo
trovi su siti come Torry o DSP (per i link vedi le faq)
Ciao
--
- Carlo -
c.b...@libero.it

che delphi usi?

Mi sa che per il tuo problema l'AlphaBlend non va...
Note: AlphaBlend does not work on all systems. The application must be
running under Windows 2000 or better, and the machine must be a P90 or
better.

 Mi sa che per il tuo problema l'AlphaBlend non va...
Infatti, funziona egregiamente solo sotto Windows 2000.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao,
ho trovato questo esempio penso ti possa essere utile...
bye Max
unit Unit1;
{The transparent form effect is done with Regions.
 First
create a region that encompasses the entire form.
 Then, find the client
area of the form (Client vs. non-Client) and
 combine with the full region
with RGN_DIFF to make the borders
 and title bar visible.  Then create a
region for each of the
 controls and combine them with the original
(FullRgn) region.}
{From various posts in the newsgroups - based on some
famous
 author I'm sure, but I first saw the post by Kerstin Thaler...}
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;
type
  TForm1 =
class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1:
TPanel;
    procedure FormDestroy(Sender: TObject);
    procedure
FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
    procedure FormResize(Sender:
TObject);
  private
    { Private declarations }
    procedure
DoVisible;
    procedure DoInvisible;
  public
    { Public declarations
}
  end;
var
  Form1: TForm1;
  FullRgn, ClientRgn, CtlRgn : THandle;
implementation
{$R *.DFM}
procedure TForm1.DoInvisible;
var
AControl : TControl;
  A, Margin, X, Y, CtlX, CtlY : Integer;
begin
Margin := ( Width - ClientWidth ) div 2;
  //First, get form region
FullRgn := CreateRectRgn(0, 0, Width, Height);
  //Find client area region
X := Margin;
  Y := Height - ClientHeight - Margin;
  ClientRgn :=
CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );
  //'Mask' out
all but non-client areas
  CombineRgn( FullRgn, FullRgn, ClientRgn,
RGN_DIFF );
  //Now, walk through all the controls on the form and 'OR'
them
  // into the existing Full region.
  for A := 0 to ControlCount - 1
do begin
    AControl := Controls[A];
    if ( AControl is TWinControl )
or ( AControl is TGraphicControl )
        then with AControl do begin
if Visible then begin
        CtlX := X + Left;
        CtlY := Y + Top;
CtlRgn := CreateRectRgn( CtlX, CtlY, CtlX + Width, CtlY + Height );
CombineRgn( FullRgn, FullRgn, CtlRgn, RGN_OR );
      end;
    end;
end;
  //When the region is all ready, put it into effect:
SetWindowRgn(Handle, FullRgn, TRUE);
end;
procedure
TForm1.FormDestroy(Sender: TObject);
begin
  //Clean up the regions we
created
  DeleteObject(ClientRgn);
  DeleteObject(FullRgn);
DeleteObject(CtlRgn);
end;
procedure TForm1.DoVisible;
begin
  //To
restore complete visibility:
  FullRgn := CreateRectRgn(0, 0, Width,
Height);
  CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn(Handle, FullRgn, TRUE);
end;
procedure
TForm1.FormCreate(Sender: TObject);
begin
  //We start out as a
transparent form....
  DoInvisible;
end;
procedure
TForm1.Button1Click(Sender: TObject);
begin
  //This button just toggles
between transparent and not trans..
  if Button1.Caption = 'Show Form'
then begin
    DoVisible;
    Button1.Caption := 'Hide Form';
  end
else begin
    DoInvisible;
    Button1.Caption := 'Show Form';
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.FormResize(Sender:
TObject);
begin
  //Need to address the transparency if the form gets re-
sized.
  //Also, note that Form1 scroll bars are set to VISIBLE/FALSE.
//I did that to save a little coding here....
  if Button1.Caption = 'Show
Form' then
    DoInvisible
  else
    DoVisible;
end;
end.
--------------------------------
Inviato via 
http://usenet.iol.it
 

 better.
già provato AlphaBlend e TrasperentColor, ma non vanno su 9x.
a me serve una cosa che vada bene in tutti i sistemi win32.
poi l'AlphaBlend server per fare una form traslucida, cosa che a me non
interessa...
mi basta il trasparente totale, non lo "sfumato"...
grazie lo stesso!
ciao,
Andrea

si il problema di win 2k vs 9x lo abbiamo capito ma guarda che se imposti il
valore dell' alpha blend al massimo la form diventa trasparente!

 valore dell' alpha blend al massimo la form diventa trasparente!
su 9x?
assolutamente no, l'alphablend sembra avere la stessa limitazione del
trasparentcolor...
o almeno su 95B, 98SE e ME no funge.
non ho provato 95A, 95C e 98FE.
ciao,
Andrea

 ho trovato questo esempio penso ti possa essere utile...
molto interessante!
grazie!
ora provo...
ciao,
Andrea

 trasparentcolor...
AlphaBlend, come gia' detto in altri messaggi, lavora SOLO sotto 


si ti ho detto a parte il problema del sistema operativo che abbiamo
appurato, l'alpha blend non fa solo lo sfumato ma rende anche solo la form
trasparente.