2012-01-11 11 views
5

डेल्फी XE2 के साथ समस्याएं। एक फ्रेम & एक फ्रेम है।डेल्फी: जीडीआई + और ढाल फ्रेम/आयताकार

फॉर्म और फ्रेम doublebuffered हैं। GlassFrame सक्षम है।

मैं फ्रेम की पृष्ठभूमि पेंट करता हूं और सही गठबंधन आयत खींचने की कोशिश करता हूं लेकिन बग्स करता हूं। विशेष रूप से मेरे आकार बदलने के दौरान बग है।

आयत सामान्य रूप से पारदर्शीता से अपारदर्शी काले रंग तक खींचना नहीं चाहता है। enter image description here

uses ...GDIPAPI, GDIPOBJ... 
type 
    TFrame2 = class(TFrame) 
    procedure PaintWindow(DC: HDC); override; 

    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

implementation 
{$R *.dfm} 

procedure TFrame2.PaintWindow(DC: HDC); 
var 
    R: TGPRect; 
    pen: TGPPen; 
    Graphics: TGPGraphics; 
    linGrBrush: TGPLinearGradientBrush; 
begin 
    R.X := 0; 
    R.Y := 0; 
    R.Width := self.Width; 
    R.Height := self.Height; 

    Graphics := TGPGraphics.Create(DC); 

    linGrBrush := TGPLinearGradientBrush.Create(R, MakeColor(255, 120, 248, 253), 
    MakeColor(255, 200, 216, 250), LinearGradientModeVertical); 

    Graphics.FillRectangle(linGrBrush, 0, 0, R.Width, R.Height); 
    linGrBrush.Free; 

    linGrBrush := TGPLinearGradientBrush.Create(MakePoint(0, 0), 
MakePoint(189, 2), MakeColor(0, 0, 0, 0), MakeColor(255, 0, 0, 0)); 

    Graphics.FillRectangle(linGrBrush, R.Width - 189, 79, 189, 2); 

    linGrBrush.Free; 
    Graphics.Free; 
end; 

कृपया मेरी मदद अपारदर्शी काले रंग के लिए पारदर्शिता से सामान्य रूप से ढाल फ्रेम पर एक आयत आकर्षित करने के लिए।

उत्तर

3

नीचे दिखाए गए कोड को बदलने से पारदर्शीता से काले अपारदर्शी से दाएं गठित पतली रेखा खींची जाएगी।

linGrBrush := TGPLinearGradientBrush.Create( 
    MakePoint(R.Width-189,0), MakePoint(R.Width,2), 
    MakeColor(0, 0, 0, 0), 
    MakeColor(255, 0, 0, 0)); 
Pen := TGPPen.Create(linGrBrush,3); 
Graphics.DrawLine(Pen,R.Width-189,79,R.Width,79); 
InvalidateRect(Handle,Rect(0,0,R.Width,R.Height),False); 

अद्यतन, पूरे क्षेत्र के लिए InvalidateRect का उपयोग कर फ्रेम की कुल redraw मजबूर करती है। अन्यथा अनावश्यक तरीकों से रेड्रा को फिसल दिया जा सकता है। यह आपके रंग परिवर्तन प्रभाव को हल करेगा।

लेकिन GlassFrame दोष पिछले दो छवियों के साथ चित्रित किया गया है। टीएफआरएएम का बाहरी फ्रेम शीर्ष और ऊपरी किनारों पर सही ढंग से दिखाई नहीं दे रहा है।

enter image description here

GlassFrame enabled GlassFrame disabled

TFrame की शिथिलता दिखा जब GlassFrame सक्षम किया गया है (बाएं)। सही तस्वीर एक पूर्ण काला फ्रेम दिखाती है (भले ही इस तस्वीर में दाएं तरफ संपीड़न में फसल हो गई हो) GlassFrame अक्षम के साथ।

अद्यतन 2:

SheetOfGlass सक्षम करें और सब कुछ ठीक लगता है।

enter image description here

अद्यतन 3:

GlassFrame शीर्ष संपत्ति 40 करने के लिए सेट, और फ्रेम के चारों ओर अजीब सीमा प्रभाव के कारण हुई थी। इसे 0 पर सेट करने से इस समस्या को ठीक किया गया है।

+0

धन्यवाद! लेकिन यह वही नहीं है जो मैं चाहता हूं। कृपया उपर्युक्त प्रोजेक्ट डाउनलोड करें और फॉर्म का आकार बदलें, आप देखेंगे कि आयताकार परिवर्तन के रंग। – maxfax

+0

मेरा अपडेट देखें। ग्लासफ्रेम चालू/बंद करते समय भी एक अजीब प्रभाव। फ्रेम किनारों पर ग्लासफ्रेम के साथ दोनों तरफ 35 ऊंचाई की ऊंचाई शुरू होती है। कहीं सिस्टम में एक बग लगता है। –

+0

यदि आप पेंटविंडो प्रक्रिया को दूर करते हैं, और ग्लासफ़्रेम चालू/बंद स्विच करते हैं तो ग्लासफ्रेम डिसफंक्शन अधिक दिखाई देता है। –

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