2009-07-22 12 views
6

जैसे एरो के साथ विस्टा के लिए कैप्शन फॉर्म में एक टेक्स्ट बनाएं, विस्टा पर विंडोज 7 की तरह विस्टा पर कैप्शन बार में टेक्स्ट कैसे आकर्षित करता है?डेल्फी: विंडोज 7

alt text http://img529.imageshack.us/img529/3643/immaginembl.jpg

delphi.about.com पर उदाहरण हवाई साथ Vista पर काम नहीं करता। आपके पास कोई विचार है?

सभी के लिए धन्यवाद।

मेरे खराब अंग्रेजी के लिए खेद है।

+0

आपकी अंग्रेज़ी के बारे में क्या बुरा है? –

उत्तर

4

गैर-क्षेत्रीय क्षेत्र में चित्रण ग्लास को स्वचालित रूप से अक्षम करने का कारण बनता है। एमएस ऑफिस सीमाओं को कवर करने के लिए क्लाइंट क्षेत्र का विस्तार करता है। सुझावों के लिए this WPF article के "ग्लास के साथ एनसी क्षेत्र में ड्राइंग" अनुभाग देखें। आपको एपीआई कॉल को डेल्फी में कनवर्ट करना होगा, मुझे डर है।

+0

ड्राइविंग के लिए धन्यवाद, मैं मैं क्या कर के लिए जरूरत इस http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx मेरी जानकारी बहुत धन्यवाद –

3

कुंजी एपीआई DwmExtendFrameIntoClientArea

है आप इसे घोषित करने और इस तरह इसे पाने shoud:

DwmExtendFrameIntoClientAreaFunc = function(destWnd: HWND; const pMarInset: PMargins): HRESULT; stdcall; 
@fDwmExtendFrameIntoClientArea := GetProcAddress(hDWMDLL, 'DwmExtendFrameIntoClientArea'); 

तुम भी कोड पहले से ही यहाँ भेजा है Translucent Windows with Aero

आप फ्रेम नहीं किया है करने के लिए

DWM_ExtendFrameIntoClientArea(Form1.Handle, -1, -1, -1, -1); 

के साथ: ऐसा लगता है कि फोन यह सब कुछ हासिल करना मुश्किल नहीं होना चाहिए जो आप चाहते हैं।

+0

धन्यवाद के लिए बहुत जटिल है। .. DWM_ExtendFrameIntoClientArea (Form3.Handle, -1, -1, -1, -1); कैनवास। टेक्स्टऑट (80,10, 'टेक्स्ट क्लाइंट एरिया'); कैनवास। टेक्स्टऑट (80, -8, 'टेक्स्ट गैर क्लाइंट एरिया'); इस परिणाम का उत्पादन करता है: http://img11.imageshack.us/img11/697/immaginetxz.jpg जहां मैं गलती करता हूं? बहुत थक –

0

डेल्फी 200 9 में टेलाबेल की एक नई संपत्ति है जिसे "ग्लोसाइज" (see help) कहा जाता है। इस संपत्ति के लिए सकारात्मक मूल्य निर्धारित करने का प्रभाव आप जो खोज रहे हैं उसके करीब है (लेबल के पाठ के चारों ओर एक चमक)।

+2

यह ग्लोसाइज संपत्ति विंडोज विस्टा/7 द्वारा उत्पादित असली चमक की तुलना में बहुत बदसूरत परिणाम उत्पन्न करती है। –

+0

यह चमकदार संपत्ति कुछ भी नहीं करती है, विस्टा को यह बताने के अलावा कि क्या करना है। –

0

फ्रेम को विस्तार करना एक चीज है और विस्टा थीम्ड (चमकती) पाठ ड्राइंग एक और है। कैनवास के साथ। टेक्स्टऑट या ड्राटेक्स्ट आउटपुट ने अल्फा को गड़बड़ कर दिया है जो आपको प्राप्त प्रभाव देगा। आपको 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; 
+0

यह मेरे साथ काम नहीं करता है, यह "ओएस funciton करने के लिए एक कॉल विफल" देता है? –

+0

मुझे आश्चर्य है कि क्यों RaiseLastOsError किसी भी IF कथन के बिना बुलाया जा रहा है? –

+0

मैंने GetLastError <> 0 तो कोड जोड़ने को ठीक करने का प्रयास किया ... –

0

DrawTextOnGlass कोड के लिए धन्यवाद। लेकिन अपेक्षा के अनुरूप काम करने के लिए, मैं DrawThemeTextEx

0

में b.handleb.canvas.handle को बदलने के लिए है कि सब कुछ के बाद काफी सरल है आप, DwmSetWindowAttribute लिए एक कॉल की जरूरत की जरूरत है। इस आलेख को देखें और विशेष रूप से टिप्पणियां :) http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/