फ्रेम को विस्तार करना एक चीज है और विस्टा थीम्ड (चमकती) पाठ ड्राइंग एक और है। कैनवास के साथ। टेक्स्टऑट या ड्राटेक्स्ट आउटपुट ने अल्फा को गड़बड़ कर दिया है जो आपको प्राप्त प्रभाव देगा। आपको DrawThemeTextEx का उपयोग करने की आवश्यकता है। यहाँ कांच पर पाठ ड्राइंग के लिए सही प्रक्रिया:
uses Themes, UxTheme;
procedure DrawTextOnGlass(Canvas: TCanvas; Text: String; R: TRect);
var
memoryHdc: HDC;
b: TBitmap;
dttOpts: TDTTOpts;
DR: TRect;
bf: TBlendFunction;
begin
b := TBitmap.Create;
try
memoryHdc := CreateCompatibleDC(Canvas.Handle);
b.Handle := memoryHdc;
b.HandleType := bmDIB;
b.PixelFormat := pf32bit;
b.SetSize(R.Right - R.Left, R.Top - R.Bottom);
b.Canvas.Font := Canvas.Font;
DR := R;
OffsetRect(DR, -DR.Left, -DR.Top);
Inflaterect(dr, -5, -5);
b.Canvas.Brush.Color := clBlack;
b.Canvas.FillRect(DR);
dttOpts.dwSize := SizeOf(TDTTOpts);
dttOpts.iGlowSize := 8;
dttOpts.dwFlags := DTT_COMPOSITED or DTT_GLOWSIZE or DTT_TEXTCOLOR;
DrawThemeTextEx(ThemeServices.Theme[teWindow], b.Handle, WP_CAPTION, CS_ACTIVE, Text, -1,
DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_NOPREFIX, DR, dttOpts);
if GetLastError <> 0 then
RaiseLastOSError;
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.SourceConstantAlpha := 255;
bf.AlphaFormat := AC_SRC_ALPHA;
AlphaBlend(Canvas.Handle, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top,
b.Canvas.Handle, 0, 0, R.Right - R.Left, R.Bottom - R.Top, bf);
finally
b.Free;
end;
end;
स्रोत
2009-11-18 15:57:07
आपकी अंग्रेज़ी के बारे में क्या बुरा है? –