2012-04-11 19 views
11

घटक को बनाए रखने के दौरान फॉर्म पारदर्शी कैसे बनाएं?

मुझे ऐसे कार्यक्रम को बनाने की ज़रूरत है जिसमें एक रूप है जिसमें पारदर्शी क्षेत्र के साथ पीएनजी छवि हो। फॉर्म अदृश्य होना चाहिए, जबकि छवि दृश्यमान रहनी चाहिए और पारदर्शी क्षेत्र पारदर्शी रहना चाहिए। समस्या छवि पारदर्शिता है। इस मामले में, मुख्य रूप पारदर्शी, अदृश्य है, जबकि सभी घटक/नियंत्रण दिखाई देते हैं। लेकिन, पीएनजी छवि का पारदर्शी क्षेत्र पारदर्शिता नहीं रखता है। पारदर्शिता कैसे रखें?

procedure MakeTransparent; 
    var 
    AControl: TControl; 
    A, Margin, X, Y, CtlX, CtlY: Integer; 
    begin 
    Margin := (Width - ClientWidth) div 2; 
    FullRgn := CreateRectRgn(0, 0, Width, Height); 
    X   := Margin; 
    Y   := Height - ClientHeight - Margin; 
    ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight); 
    CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF); 
    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; 
    SetWindowRgn(Handle, FullRgn, True); 
    end; 



    procedure UndoTransparency; 
    begin 
    FullRgn := CreateRectRgn(0, 0, Width, Height); 
    CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY); 
    SetWindowRgn(Handle, FullRgn, True); 
    end; 
+1

बस एक पोक :-) क्या आप सुनिश्चित हैं कि छवि पहले स्क्रीनशॉट पर वास्तव में पारदर्शी थी? – TLama

+0

100% पारदर्शी :) –

+5

आप एक पारदर्शी रूप नहीं बना रहे हैं, आप फ़ॉर्म के आकार को बदल रहे हैं। इसके बजाय फॉर्म के 'रंग',' पारदर्शी रंग 'और' पारदर्शी रंगवृत्त 'गुणों का उपयोग करें और एक' टीआईएमएजी 'में एक पीएनजी लोड करें और आप कर चुके हैं! –

उत्तर

9

बस अपने फार्म में एक बटन के साथ इस कोड को छोड़ और आप अपने पीएनजी पारदर्शी बनने के साथ अपने फार्म देखेंगे:

procedure SetTransparent(Aform: TForm; AValue: Boolean); 
begin 
    Aform.TransparentColor := AValue; 
    Aform.TransparentColorValue := Aform.Color; 
end; 

procedure TForm2.Button1Click(Sender: TObject); 
begin 
    SetTransparent(Self, True); 
end; 
3

आप आंशिक पारदर्शिता की जरूरत है, तो TransparentColor/TransparentColorValue नहीं होगा मदद।

आपको NonAero (या DisabledAero) और EnabledAero स्थितियों के लिए दो पूरी तरह से अलग विधियों का उपयोग करने की आवश्यकता होगी।

जब एयरो सक्षम किया गया है, आप इस तरह के तरीकों का उपयोग करना होगा: http://delphihaven.wordpress.com/category/glass/

जब एयरो अक्षम है या मौजूद नहीं है, तो आप हैक किसी प्रकार का उपयोग करना होगा:

  1. सेट AlphaBlend: = सही;
  2. बिटबल्ट + GetDC + GetDesktopWindow के माध्यम से डेस्कटॉप का स्क्रीनशॉट बनाएं। आपकी खिड़की उस स्क्रीनशॉट पर नहीं होगी।
  3. स्क्रीनशॉट के अपने फॉर्म भाग पर ड्रा करें जिसमें आपके फॉर्म के समान स्थिति और आकार है। असल में आप अपने फॉर्म के पीछे जो कुछ भी खींचेंगे, यही कारण है कि यह पारदर्शी जैसा दिखता है।
  4. समय-समय पर क्रियाएं 2 और 3 दोहराएं।
संबंधित मुद्दे

 संबंधित मुद्दे