1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792 |
- {******************************************************************************}
- { }
- { Visual Styles (Themes) API interface Unit for Object Pascal }
- { }
- { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
- { Corporation. All Rights Reserved. }
- { }
- { The original file is: uxtheme.h, released June 2001. The original Pascal }
- { code is: UxTheme.pas, released July 2001. The initial developer of the }
- { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
- { }
- { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
- { Marcel van Brakel. All Rights Reserved. }
- { }
- { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
- { }
- { You may retrieve the latest version of this file at the Project JEDI }
- { APILIB home page, located at http://jedi-apilib.sourceforge.net }
- { }
- { The contents of this file are used with permission, subject to the Mozilla }
- { Public License Version 1.1 (the "License"); you may not use this file except }
- { in compliance with the License. You may obtain a copy of the License at }
- { http://www.mozilla.org/MPL/MPL-1.1.html }
- { }
- { Software distributed under the License is distributed on an "AS IS" basis, }
- { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
- { the specific language governing rights and limitations under the License. }
- { }
- { Alternatively, the contents of this file may be used under the terms of the }
- { GNU Lesser General Public License (the "LGPL License"), in which case the }
- { provisions of the LGPL License are applicable instead of those above. }
- { If you wish to allow use of your version of this file only under the terms }
- { of the LGPL License and not to allow others to use your version of this file }
- { under the MPL, indicate your decision by deleting the provisions above and }
- { replace them with the notice and other provisions required by the LGPL }
- { License. If you do not delete the provisions above, a recipient may use }
- { your version of this file under either the MPL or the LGPL License. }
- { }
- { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
- { }
- {******************************************************************************}
- // $Id: JwaUxTheme.pas,v 1.9 2005/09/08 07:49:25 marquardt Exp $
- unit JwaUxTheme;
- {$WEAKPACKAGEUNIT}
- {$HPPEMIT ''}
- {$HPPEMIT '#include "uxtheme.h"'}
- {$HPPEMIT ''}
- {$I jediapilib.inc}
- interface
- uses
- JwaWindows;
- type
- HIMAGELIST = Pointer; // TODO
- type
- HTHEME = HANDLE; // handle to a section of theme data for class
- {$EXTERNALSYM HTHEME}
- //---------------------------------------------------------------------------
- // NOTE: PartId's and StateId's used in the theme API are defined in the
- // hdr file <tmschema.h> using the TM_PART and TM_STATE macros. For
- // example, "TM_PART(BP, PUSHBUTTON)" defines the PartId "BP_PUSHBUTTON".
- //---------------------------------------------------------------------------
- // OpenThemeData() - Open the theme data for the specified HWND and
- // semi-colon separated list of class names.
- //
- // OpenThemeData() will try each class name, one at
- // a time, and use the first matching theme info
- // found. If a match is found, a theme handle
- // to the data is returned. If no match is found,
- // a "NULL" handle is returned.
- //
- // When the window is destroyed or a WM_THEMECHANGED
- // msg is received, "CloseThemeData()" should be
- // called to close the theme handle.
- //
- // hwnd - window handle of the control/window to be themed
- //
- // pszClassList - class name (or list of names) to match to theme data
- // section. if the list contains more than one name,
- // the names are tested one at a time for a match.
- // If a match is found, OpenThemeData() returns a
- // theme handle associated with the matching class.
- // This param is a list (instead of just a single
- // class name) to provide the class an opportunity
- // to get the "best" match between the class and
- // the current theme. For example, a button might
- // pass L"OkButton, Button" if its ID=ID_OK. If
- // the current theme has an entry for OkButton,
- // that will be used. Otherwise, we fall back on
- // the normal Button entry.
- //---------------------------------------------------------------------------
- function OpenThemeData(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall;
- {$EXTERNALSYM OpenThemeData}
- //---------------------------------------------------------------------------
- // CloseTHemeData() - closes the theme data handle. This should be done
- // when the window being themed is destroyed or
- // whenever a WM_THEMECHANGED msg is received
- // (followed by an attempt to create a new Theme data
- // handle).
- //
- // hTheme - open theme data handle (returned from prior call
- // to OpenThemeData() API).
- //---------------------------------------------------------------------------
- function CloseThemeData(hTheme: HTHEME): HRESULT; stdcall;
- {$EXTERNALSYM CloseThemeData}
- //---------------------------------------------------------------------------
- // functions for basic drawing support
- //---------------------------------------------------------------------------
- // The following methods are the theme-aware drawing services.
- // Controls/Windows are defined in drawable "parts" by their author: a
- // parent part and 0 or more child parts. Each of the parts can be
- // described in "states" (ex: disabled, hot, pressed).
- //---------------------------------------------------------------------------
- // For the list of all themed classes and the definition of all
- // parts and states, see the file "tmschmea.h".
- //---------------------------------------------------------------------------
- // Each of the below methods takes a "iPartId" param to specify the
- // part and a "iStateId" to specify the state of the part.
- // "iStateId=0" refers to the root part. "iPartId" = "0" refers to
- // the root class.
- //-----------------------------------------------------------------------
- // Note: draw operations are always scaled to fit (and not to exceed)
- // the specified "Rect".
- //-----------------------------------------------------------------------
- //------------------------------------------------------------------------
- // DrawThemeBackground()
- // - draws the theme-specified border and fill for
- // the "iPartId" and "iStateId". This could be
- // based on a bitmap file, a border and fill, or
- // other image description.
- //
- // hTheme - theme data handle
- // hdc - HDC to draw into
- // iPartId - part number to draw
- // iStateId - state number (of the part) to draw
- // pRect - defines the size/location of the part
- // pClipRect - optional clipping rect (don't draw outside it)
- //------------------------------------------------------------------------
- function DrawThemeBackground(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- const pRect: RECT; pClipRect: PRECT): HRESULT; stdcall;
- {$EXTERNALSYM DrawThemeBackground}
- //---------------------------------------------------------------------------
- //----- DrawThemeText() flags ----
- const
- DTT_GRAYED = $1; // draw a grayed-out string
- {$EXTERNALSYM DTT_GRAYED}
- //-------------------------------------------------------------------------
- // DrawThemeText() - draws the text using the theme-specified
- // color and font for the "iPartId" and
- // "iStateId".
- //
- // hTheme - theme data handle
- // hdc - HDC to draw into
- // iPartId - part number to draw
- // iStateId - state number (of the part) to draw
- // pszText - actual text to draw
- // dwCharCount - number of chars to draw (-1 for all)
- // dwTextFlags - same as DrawText() "uFormat" param
- // dwTextFlags2 - additional drawing options
- // pRect - defines the size/location of the part
- //-------------------------------------------------------------------------
- function DrawThemeText(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- pszText: LPCWSTR; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD;
- const pRect: RECT): HRESULT; stdcall;
- {$EXTERNALSYM DrawThemeText}
- //-------------------------------------------------------------------------
- // GetThemeBackgroundContentRect()
- // - gets the size of the content for the theme-defined
- // background. This is usually the area inside
- // the borders or Margins.
- //
- // hTheme - theme data handle
- // hdc - (optional) device content to be used for drawing
- // iPartId - part number to draw
- // iStateId - state number (of the part) to draw
- // pBoundingRect - the outer RECT of the part being drawn
- // pContentRect - RECT to receive the content area
- //-------------------------------------------------------------------------
- function GetThemeBackgroundContentRect(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- const pBoundingRect: RECT; pContentRect: PRECT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeBackgroundContentRect}
- //-------------------------------------------------------------------------
- // GetThemeBackgroundExtent() - calculates the size/location of the theme-
- // specified background based on the
- // "pContentRect".
- //
- // hTheme - theme data handle
- // hdc - (optional) device content to be used for drawing
- // iPartId - part number to draw
- // iStateId - state number (of the part) to draw
- // pContentRect - RECT that defines the content area
- // pBoundingRect - RECT to receive the overall size/location of part
- //-------------------------------------------------------------------------
- function GetThemeBackgroundExtent(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- const pContentRect: RECT; var pExtentRect: RECT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeBackgroundExtent}
- //-------------------------------------------------------------------------
- type
- THEMESIZE = (
- TS_MIN, // minimum size
- TS_TRUE, // size without stretching
- TS_DRAW); // size that theme mgr will use to draw part
- {$EXTERNALSYM THEMESIZE}
- TThemeSize = THEMESIZE;
- //-------------------------------------------------------------------------
- // GetThemePartSize() - returns the specified size of the theme part
- //
- // hTheme - theme data handle
- // hdc - HDC to select font into & measure against
- // iPartId - part number to retrieve size for
- // iStateId - state number (of the part)
- // prc - (optional) rect for part drawing destination
- // eSize - the type of size to be retreived
- // psz - receives the specified size of the part
- //-------------------------------------------------------------------------
- function GetThemePartSize(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- prc: PRECT; eSize: THEMESIZE; var psz: TSize): HRESULT; stdcall;
- {$EXTERNALSYM GetThemePartSize}
- //-------------------------------------------------------------------------
- // GetThemeTextExtent() - calculates the size/location of the specified
- // text when rendered in the Theme Font.
- //
- // hTheme - theme data handle
- // hdc - HDC to select font & measure into
- // iPartId - part number to draw
- // iStateId - state number (of the part)
- // pszText - the text to be measured
- // dwCharCount - number of chars to draw (-1 for all)
- // dwTextFlags - same as DrawText() "uFormat" param
- // pszBoundingRect - optional: to control layout of text
- // pszExtentRect - receives the RECT for text size/location
- //-------------------------------------------------------------------------
- function GetThemeTextExtent(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- pszText: LPCWSTR; iCharCount: Integer; dwTextFlags: DWORD; pBoundingRect: PRECT;
- var pExtentRect: RECT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeTextExtent}
- //-------------------------------------------------------------------------
- // GetThemeTextMetrics()
- // - returns info about the theme-specified font
- // for the part/state passed in.
- //
- // hTheme - theme data handle
- // hdc - optional: HDC for screen context
- // iPartId - part number to draw
- // iStateId - state number (of the part)
- // ptm - receives the font info
- //-------------------------------------------------------------------------
- function GetThemeTextMetrics(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- var ptm: TEXTMETRIC): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeTextMetrics}
- //-------------------------------------------------------------------------
- // GetThemeBackgroundRegion()
- // - computes the region for a regular or partially
- // transparent theme-specified background that is
- // bound by the specified "pRect".
- // If the rectangle is empty, sets the HRGN to NULL
- // and return S_FALSE.
- //
- // hTheme - theme data handle
- // hdc - optional HDC to draw into (DPI scaling)
- // iPartId - part number to draw
- // iStateId - state number (of the part)
- // pRect - the RECT used to draw the part
- // pRegion - receives handle to calculated region
- //-------------------------------------------------------------------------
- function GetThemeBackgroundRegion(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- const pRect: RECT; var pRegion: HRGN): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeBackgroundRegion}
- //-------------------------------------------------------------------------
- //----- HitTestThemeBackground, HitTestThemeBackgroundRegion flags ----
- // Theme background segment hit test flag (default). possible return values are:
- // HTCLIENT: hit test succeeded in the middle background segment
- // HTTOP, HTLEFT, HTTOPLEFT, etc: // hit test succeeded in the the respective theme background segment.
- const
- HTTB_BACKGROUNDSEG = $0000;
- {$EXTERNALSYM HTTB_BACKGROUNDSEG}
- // Fixed border hit test option. possible return values are:
- // HTCLIENT: hit test succeeded in the middle background segment
- // HTBORDER: hit test succeeded in any other background segment
- HTTB_FIXEDBORDER = $0002; // Return code may be either HTCLIENT or HTBORDER.
- {$EXTERNALSYM HTTB_FIXEDBORDER}
- // Caption hit test option. Possible return values are:
- // HTCAPTION: hit test succeeded in the top, top left, or top right background segments
- // HTNOWHERE or another return code, depending on absence or presence of accompanying flags, resp.
- HTTB_CAPTION = $0004;
- {$EXTERNALSYM HTTB_CAPTION}
- // Resizing border hit test flags. Possible return values are:
- // HTCLIENT: hit test succeeded in middle background segment
- // HTTOP, HTTOPLEFT, HTLEFT, HTRIGHT, etc: hit test succeeded in the respective system resizing zone
- // HTBORDER: hit test failed in middle segment and resizing zones, but succeeded in a background border segment
- HTTB_RESIZINGBORDER_LEFT = $0010; // Hit test left resizing border,
- {$EXTERNALSYM HTTB_RESIZINGBORDER_LEFT}
- HTTB_RESIZINGBORDER_TOP = $0020; // Hit test top resizing border
- {$EXTERNALSYM HTTB_RESIZINGBORDER_TOP}
- HTTB_RESIZINGBORDER_RIGHT = $0040; // Hit test right resizing border
- {$EXTERNALSYM HTTB_RESIZINGBORDER_RIGHT}
- HTTB_RESIZINGBORDER_BOTTOM = $0080; // Hit test bottom resizing border
- {$EXTERNALSYM HTTB_RESIZINGBORDER_BOTTOM}
- HTTB_RESIZINGBORDER = (HTTB_RESIZINGBORDER_LEFT or HTTB_RESIZINGBORDER_TOP or
- HTTB_RESIZINGBORDER_RIGHT or HTTB_RESIZINGBORDER_BOTTOM);
- {$EXTERNALSYM HTTB_RESIZINGBORDER}
- // Resizing border is specified as a template, not just window edges.
- // This option is mutually exclusive with HTTB_SYSTEMSIZINGWIDTH; HTTB_SIZINGTEMPLATE takes precedence
- HTTB_SIZINGTEMPLATE = $0100;
- {$EXTERNALSYM HTTB_SIZINGTEMPLATE}
- // Use system resizing border width rather than theme content margins.
- // This option is mutually exclusive with HTTB_SIZINGTEMPLATE, which takes precedence.
- HTTB_SYSTEMSIZINGMARGINS = $0200;
- {$EXTERNALSYM HTTB_SYSTEMSIZINGMARGINS}
- //-------------------------------------------------------------------------
- // HitTestThemeBackground()
- // - returns a HitTestCode (a subset of the values
- // returned by WM_NCHITTEST) for the point "ptTest"
- // within the theme-specified background
- // (bound by pRect). "pRect" and "ptTest" should
- // both be in the same coordinate system
- // (client, screen, etc).
- //
- // hTheme - theme data handle
- // hdc - HDC to draw into
- // iPartId - part number to test against
- // iStateId - state number (of the part)
- // pRect - the RECT used to draw the part
- // hrgn - optional region to use; must be in same coordinates as
- // - pRect and pTest.
- // ptTest - the hit point to be tested
- // dwOptions - HTTB_xxx constants
- // pwHitTestCode - receives the returned hit test code - one of:
- //
- // HTNOWHERE, HTLEFT, HTTOPLEFT, HTBOTTOMLEFT,
- // HTRIGHT, HTTOPRIGHT, HTBOTTOMRIGHT,
- // HTTOP, HTBOTTOM, HTCLIENT
- //-------------------------------------------------------------------------
- function HitTestThemeBackground(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- dwOptions: DWORD; const pRect: RECT; hrgn: HRGN; ptTest: POINT; var pwHitTestCode: WORD): HRESULT; stdcall;
- {$EXTERNALSYM HitTestThemeBackground}
- //------------------------------------------------------------------------
- // DrawThemeEdge() - Similar to the DrawEdge() API, but uses part colors
- // and is high-DPI aware
- // hTheme - theme data handle
- // hdc - HDC to draw into
- // iPartId - part number to draw
- // iStateId - state number of part
- // pDestRect - the RECT used to draw the line(s)
- // uEdge - Same as DrawEdge() API
- // uFlags - Same as DrawEdge() API
- // pContentRect - Receives the interior rect if (uFlags & BF_ADJUST)
- //------------------------------------------------------------------------
- function DrawThemeEdge(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- const pDestRect: RECT; uEdge, uFlags: UINT; pContentRect: PRECT): HRESULT; stdcall;
- {$EXTERNALSYM DrawThemeEdge}
- //------------------------------------------------------------------------
- // DrawThemeIcon() - draws an image within an imagelist based on
- // a (possible) theme-defined effect.
- //
- // hTheme - theme data handle
- // hdc - HDC to draw into
- // iPartId - part number to draw
- // iStateId - state number of part
- // pRect - the RECT to draw the image within
- // himl - handle to IMAGELIST
- // iImageIndex - index into IMAGELIST (which icon to draw)
- //------------------------------------------------------------------------
- function DrawThemeIcon(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer;
- const pRect: RECT; himl: HIMAGELIST; iImageIndex: Integer): HRESULT; stdcall;
- {$EXTERNALSYM DrawThemeIcon}
- //---------------------------------------------------------------------------
- // IsThemePartDefined() - returns TRUE if the theme has defined parameters
- // for the specified "iPartId" and "iStateId".
- //
- // hTheme - theme data handle
- // iPartId - part number to find definition for
- // iStateId - state number of part
- //---------------------------------------------------------------------------
- function IsThemePartDefined(hTheme: HTHEME; iPartId, iStateId: Integer): BOOL; stdcall;
- {$EXTERNALSYM IsThemePartDefined}
- //---------------------------------------------------------------------------
- // IsThemeBackgroundPartiallyTransparent()
- // - returns TRUE if the theme specified background for
- // the part/state has transparent pieces or
- // alpha-blended pieces.
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- //---------------------------------------------------------------------------
- function IsThemeBackgroundPartiallyTransparent(hTheme: HTHEME; iPartId, iStateId: Integer): BOOL; stdcall;
- {$EXTERNALSYM IsThemeBackgroundPartiallyTransparent}
- //---------------------------------------------------------------------------
- // lower-level theme information services
- //---------------------------------------------------------------------------
- // The following methods are getter routines for each of the Theme Data types.
- // Controls/Windows are defined in drawable "parts" by their author: a
- // parent part and 0 or more child parts. Each of the parts can be
- // described in "states" (ex: disabled, hot, pressed).
- //---------------------------------------------------------------------------
- // Each of the below methods takes a "iPartId" param to specify the
- // part and a "iStateId" to specify the state of the part.
- // "iStateId=0" refers to the root part. "iPartId" = "0" refers to
- // the root class.
- //-----------------------------------------------------------------------
- // Each method also take a "iPropId" param because multiple instances of
- // the same primitive type can be defined in the theme schema.
- //-----------------------------------------------------------------------
- //-----------------------------------------------------------------------
- // GetThemeColor() - Get the value for the specified COLOR property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pColor - receives the value of the property
- //-----------------------------------------------------------------------
- function GetThemeColor(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var pColor: COLORREF): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeColor}
- //-----------------------------------------------------------------------
- // GetThemeMetric() - Get the value for the specified metric/size
- // property
- //
- // hTheme - theme data handle
- // hdc - (optional) hdc to be drawn into (DPI scaling)
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // piVal - receives the value of the property
- //-----------------------------------------------------------------------
- function GetThemeMetric(hTheme: HTHEME; hdc: HDC; iPartId, iStateId, iPropId: Integer;
- var piVal: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeMetric}
- //-----------------------------------------------------------------------
- // GetThemeString() - Get the value for the specified string property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pszBuff - receives the string property value
- // cchMaxBuffChars - max. number of chars allowed in pszBuff
- //-----------------------------------------------------------------------
- function GetThemeString(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- pszBuff: LPWSTR; cchMaxBuffChars: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeString}
- //-----------------------------------------------------------------------
- // GetThemeBool() - Get the value for the specified BOOL property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pfVal - receives the value of the property
- //-----------------------------------------------------------------------
- function GetThemeBool(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var pfVal: BOOL): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeBool}
- //-----------------------------------------------------------------------
- // GetThemeInt() - Get the value for the specified int property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // piVal - receives the value of the property
- //-----------------------------------------------------------------------
- function GetThemeInt(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var piVal: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeInt}
- //-----------------------------------------------------------------------
- // GetThemeEnumValue() - Get the value for the specified ENUM property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // piVal - receives the value of the enum (cast to int*)
- //-----------------------------------------------------------------------
- function GetThemeEnumValue(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var piVal: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeEnumValue}
- //-----------------------------------------------------------------------
- // GetThemePosition() - Get the value for the specified position
- // property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pPoint - receives the value of the position property
- //-----------------------------------------------------------------------
- function GetThemePosition(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var pPoint: POINT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemePosition}
- //-----------------------------------------------------------------------
- // GetThemeFont() - Get the value for the specified font property
- //
- // hTheme - theme data handle
- // hdc - (optional) hdc to be drawn to (DPI scaling)
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pFont - receives the value of the LOGFONT property
- // (scaled for the current logical screen dpi)
- //-----------------------------------------------------------------------
- function GetThemeFont(hTheme: HTHEME; hdc: HDC; iPartId, iStateId, iPropId: Integer;
- var pFont: LOGFONT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeFont}
- //-----------------------------------------------------------------------
- // GetThemeRect() - Get the value for the specified RECT property
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pRect - receives the value of the RECT property
- //-----------------------------------------------------------------------
- function GetThemeRect(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var pRect: RECT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeRect}
- //-----------------------------------------------------------------------
- type
- _MARGINS = record
- cxLeftWidth: Integer; // width of left border that retains its size
- cxRightWidth: Integer; // width of right border that retains its size
- cyTopHeight: Integer; // height of top border that retains its size
- cyBottomHeight: Integer; // height of bottom border that retains its size
- end;
- {$EXTERNALSYM _MARGINS}
- MARGINS = _MARGINS;
- {$EXTERNALSYM MARGINS}
- PMARGINS = ^MARGINS;
- {$EXTERNALSYM PMARGINS}
- TMargins = MARGINS;
- //-----------------------------------------------------------------------
- // GetThemeMargins() - Get the value for the specified MARGINS property
- //
- // hTheme - theme data handle
- // hdc - (optional) hdc to be used for drawing
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // prc - RECT for area to be drawn into
- // pMargins - receives the value of the MARGINS property
- //-----------------------------------------------------------------------
- function GetThemeMargins(hTheme: HTHEME; hdc: HDC; iPartId, iStateId, iPropId: Integer;
- prc: PRECT; var pMargins: MARGINS): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeMargins}
- //-----------------------------------------------------------------------
- const
- MAX_INTLIST_COUNT = 10;
- {$EXTERNALSYM MAX_INTLIST_COUNT}
- type
- _INTLIST = record
- iValueCount: Integer; // number of values in iValues
- iValues: array [0..MAX_INTLIST_COUNT - 1] of Integer;
- end;
- {$EXTERNALSYM _INTLIST}
- INTLIST = _INTLIST;
- {$EXTERNALSYM INTLIST}
- PINTLIST = ^INTLIST;
- {$EXTERNALSYM PINTLIST}
- TIntList = INTLIST;
- //-----------------------------------------------------------------------
- // GetThemeIntList() - Get the value for the specified INTLIST struct
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to get the value for
- // pIntList - receives the value of the INTLIST property
- //-----------------------------------------------------------------------
- function GetThemeIntList(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var pIntList: INTLIST): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeIntList}
- //-----------------------------------------------------------------------
- type
- PROPERTYORIGIN = (
- PO_STATE, // property was found in the state section
- PO_PART, // property was found in the part section
- PO_CLASS, // property was found in the class section
- PO_GLOBAL, // property was found in [globals] section
- PO_NOTFOUND); // property was not found
- {$EXTERNALSYM PROPERTYORIGIN}
- TPropertyOrigin = PROPERTYORIGIN;
- //-----------------------------------------------------------------------
- // GetThemePropertyOrigin()
- // - searches for the specified theme property
- // and sets "pOrigin" to indicate where it was
- // found (or not found)
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to search for
- // pOrigin - receives the value of the property origin
- //-----------------------------------------------------------------------
- function GetThemePropertyOrigin(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- var pOrigin: PROPERTYORIGIN): HRESULT; stdcall;
- {$EXTERNALSYM GetThemePropertyOrigin}
- //---------------------------------------------------------------------------
- // SetWindowTheme()
- // - redirects an existing Window to use a different
- // section of the current theme information than its
- // class normally asks for.
- //
- // hwnd - the handle of the window (cannot be NULL)
- //
- // pszSubAppName - app (group) name to use in place of the calling
- // app's name. If NULL, the actual calling app
- // name will be used.
- //
- // pszSubIdList - semicolon separated list of class Id names to
- // use in place of actual list passed by the
- // window's class. if NULL, the id list from the
- // calling class is used.
- //---------------------------------------------------------------------------
- // The Theme Manager will remember the "pszSubAppName" and the
- // "pszSubIdList" associations thru the lifetime of the window (even
- // if themes are subsequently changed). The window is sent a
- // "WM_THEMECHANGED" msg at the end of this call, so that the new
- // theme can be found and applied.
- //---------------------------------------------------------------------------
- // When "pszSubAppName" or "pszSubIdList" are NULL, the Theme Manager
- // removes the previously remember association. To turn off theme-ing for
- // the specified window, you can pass an empty string (L"") so it
- // won't match any section entries.
- //---------------------------------------------------------------------------
- function SetWindowTheme(hwnd: HWND; pszSubAppName: LPCWSTR; pszSubIdList: LPCWSTR): HRESULT; stdcall;
- {$EXTERNALSYM SetWindowTheme}
- //---------------------------------------------------------------------------
- // GetThemeFilename() - Get the value for the specified FILENAME property.
- //
- // hTheme - theme data handle
- // iPartId - part number
- // iStateId - state number of part
- // iPropId - the property number to search for
- // pszThemeFileName - output buffer to receive the filename
- // cchMaxBuffChars - the size of the return buffer, in chars
- //---------------------------------------------------------------------------
- function GetThemeFilename(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;
- pszThemeFileName: LPWSTR; cchMaxBuffChars: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeFilename}
- //---------------------------------------------------------------------------
- // GetThemeSysColor() - Get the value of the specified System color.
- //
- // hTheme - the theme data handle. if non-NULL, will return
- // color from [SysMetrics] section of theme.
- // if NULL, will return the global system color.
- //
- // iColorId - the system color index defined in winuser.h
- //---------------------------------------------------------------------------
- function GetThemeSysColor(hTheme: HTHEME; iColorId: Integer): COLORREF; stdcall;
- {$EXTERNALSYM GetThemeSysColor}
- //---------------------------------------------------------------------------
- // GetThemeSysColorBrush()
- // - Get the brush for the specified System color.
- //
- // hTheme - the theme data handle. if non-NULL, will return
- // brush matching color from [SysMetrics] section of
- // theme. if NULL, will return the brush matching
- // global system color.
- //
- // iColorId - the system color index defined in winuser.h
- //---------------------------------------------------------------------------
- function GetThemeSysColorBrush(hTheme: HTHEME; iColorId: Integer): HBRUSH; stdcall;
- {$EXTERNALSYM GetThemeSysColorBrush}
- //---------------------------------------------------------------------------
- // GetThemeSysBool() - Get the boolean value of specified System metric.
- //
- // hTheme - the theme data handle. if non-NULL, will return
- // BOOL from [SysMetrics] section of theme.
- // if NULL, will return the specified system boolean.
- //
- // iBoolId - the TMT_XXX BOOL number (first BOOL
- // is TMT_FLATMENUS)
- //---------------------------------------------------------------------------
- function GetThemeSysBool(hTheme: HTHEME; iBoolId: Integer): BOOL; stdcall;
- {$EXTERNALSYM GetThemeSysBool}
- //---------------------------------------------------------------------------
- // GetThemeSysSize() - Get the value of the specified System size metric.
- // (scaled for the current logical screen dpi)
- //
- // hTheme - the theme data handle. if non-NULL, will return
- // size from [SysMetrics] section of theme.
- // if NULL, will return the global system metric.
- //
- // iSizeId - the following values are supported when
- // hTheme is non-NULL:
- //
- // SM_CXBORDER (border width)
- // SM_CXVSCROLL (scrollbar width)
- // SM_CYHSCROLL (scrollbar height)
- // SM_CXSIZE (caption width)
- // SM_CYSIZE (caption height)
- // SM_CXSMSIZE (small caption width)
- // SM_CYSMSIZE (small caption height)
- // SM_CXMENUSIZE (menubar width)
- // SM_CYMENUSIZE (menubar height)
- //
- // when hTheme is NULL, iSizeId is passed directly
- // to the GetSystemMetrics() function
- //---------------------------------------------------------------------------
- function GetThemeSysSize(hTheme: HTHEME; iSizeId: Integer): Integer; stdcall;
- {$EXTERNALSYM GetThemeSysSize}
- //---------------------------------------------------------------------------
- // GetThemeSysFont() - Get the LOGFONT for the specified System font.
- //
- // hTheme - the theme data handle. if non-NULL, will return
- // font from [SysMetrics] section of theme.
- // if NULL, will return the specified system font.
- //
- // iFontId - the TMT_XXX font number (first font
- // is TMT_CAPTIONFONT)
- //
- // plf - ptr to LOGFONT to receive the font value.
- // (scaled for the current logical screen dpi)
- //---------------------------------------------------------------------------
- function GetThemeSysFont(hTheme: HTHEME; iFontId: Integer; var plf: LOGFONT): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeSysFont}
- //---------------------------------------------------------------------------
- // GetThemeSysString() - Get the value of specified System string metric.
- //
- // hTheme - the theme data handle (required)
- //
- // iStringId - must be one of the following values:
- //
- // TMT_CSSNAME
- // TMT_XMLNAME
- //
- // pszStringBuff - the buffer to receive the string value
- //
- // cchMaxStringChars - max. number of chars that pszStringBuff can hold
- //---------------------------------------------------------------------------
- function GetThemeSysString(hTheme: HTHEME; iStringId: Integer;
- pszStringBuff: LPWSTR; cchMaxStringChars: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeSysString}
- //---------------------------------------------------------------------------
- // GetThemeSysInt() - Get the value of specified System int.
- //
- // hTheme - the theme data handle (required)
- //
- // iIntId - must be one of the following values:
- //
- // TMT_DPIX
- // TMT_DPIY
- // TMT_MINCOLORDEPTH
- //
- // piValue - ptr to int to receive value
- //---------------------------------------------------------------------------
- function GetThemeSysInt(hTheme: HTHEME; iIntId: Integer; var piValue: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeSysInt}
- //---------------------------------------------------------------------------
- // IsThemeActive() - can be used to test if a system theme is active
- // for the current user session.
- //
- // use the API "IsAppThemed()" to test if a theme is
- // active for the calling process.
- //---------------------------------------------------------------------------
- function IsThemeActive: BOOL; stdcall;
- {$EXTERNALSYM IsThemeActive}
- //---------------------------------------------------------------------------
- // IsAppThemed() - returns TRUE if a theme is active and available to
- // the current process
- //---------------------------------------------------------------------------
- function IsAppThemed: BOOL; stdcall;
- {$EXTERNALSYM IsAppThemed}
- //---------------------------------------------------------------------------
- // GetWindowTheme() - if window is themed, returns its most recent
- // HTHEME from OpenThemeData() - otherwise, returns
- // NULL.
- //
- // hwnd - the window to get the HTHEME of
- //---------------------------------------------------------------------------
- function GetWindowTheme(hwnd: HWND): HTHEME; stdcall;
- {$EXTERNALSYM GetWindowTheme}
- //---------------------------------------------------------------------------
- // EnableThemeDialogTexture()
- //
- // - Enables/disables dialog background theme. This method can be used to
- // tailor dialog compatibility with child windows and controls that
- // may or may not coordinate the rendering of their client area backgrounds
- // with that of their parent dialog in a manner that supports seamless
- // background texturing.
- //
- // hdlg - the window handle of the target dialog
- // dwFlags - ETDT_ENABLE to enable the theme-defined dialog background texturing,
- // ETDT_DISABLE to disable background texturing,
- // ETDT_ENABLETAB to enable the theme-defined background
- // texturing using the Tab texture
- //---------------------------------------------------------------------------
- const
- ETDT_DISABLE = $00000001;
- {$EXTERNALSYM ETDT_DISABLE}
- ETDT_ENABLE = $00000002;
- {$EXTERNALSYM ETDT_ENABLE}
- ETDT_USETABTEXTURE = $00000004;
- {$EXTERNALSYM ETDT_USETABTEXTURE}
- ETDT_ENABLETAB = ETDT_ENABLE or ETDT_USETABTEXTURE;
- {$EXTERNALSYM ETDT_ENABLETAB}
- function EnableThemeDialogTexture(hwnd: HWND; dwFlags: DWORD): HRESULT; stdcall;
- {$EXTERNALSYM EnableThemeDialogTexture}
- //---------------------------------------------------------------------------
- // IsThemeDialogTextureEnabled()
- //
- // - Reports whether the dialog supports background texturing.
- //
- // hdlg - the window handle of the target dialog
- //---------------------------------------------------------------------------
- function IsThemeDialogTextureEnabled(hwnd: HWND): BOOL; stdcall;
- {$EXTERNALSYM IsThemeDialogTextureEnabled}
- //---------------------------------------------------------------------------
- //---- flags to control theming within an app ----
- const
- STAP_ALLOW_NONCLIENT = 1 shl 0;
- {$EXTERNALSYM STAP_ALLOW_NONCLIENT}
- STAP_ALLOW_CONTROLS = 1 shl 1;
- {$EXTERNALSYM STAP_ALLOW_CONTROLS}
- STAP_ALLOW_WEBCONTENT = 1 shl 2;
- {$EXTERNALSYM STAP_ALLOW_WEBCONTENT}
- //---------------------------------------------------------------------------
- // GetThemeAppProperties()
- // - returns the app property flags that control theming
- //---------------------------------------------------------------------------
- function GetThemeAppProperties: DWORD; stdcall;
- {$EXTERNALSYM GetThemeAppProperties}
- //---------------------------------------------------------------------------
- // SetThemeAppProperties()
- // - sets the flags that control theming within the app
- //
- // dwFlags - the flag values to be set
- //---------------------------------------------------------------------------
- procedure SetThemeAppProperties(dwFlags: DWORD); stdcall;
- {$EXTERNALSYM SetThemeAppProperties}
- //---------------------------------------------------------------------------
- // GetCurrentThemeName()
- // - Get the name of the current theme in-use.
- // Optionally, return the ColorScheme name and the
- // Size name of the theme.
- //
- // pszThemeFileName - receives the theme path & filename
- // cchMaxNameChars - max chars allowed in pszNameBuff
- //
- // pszColorBuff - (optional) receives the canonical color scheme name
- // (not the display name)
- // cchMaxColorChars - max chars allowed in pszColorBuff
- //
- // pszSizeBuff - (optional) receives the canonical size name
- // (not the display name)
- // cchMaxSizeChars - max chars allowed in pszSizeBuff
- //---------------------------------------------------------------------------
- function GetCurrentThemeName(pszThemeFileName: LPWSTR; cchMaxNameChars: Integer; pszColorBuff: LPWSTR;
- cchMaxColorChars: Integer; pszSizeBuff: LPWSTR; cchMaxSizeChars: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetCurrentThemeName}
- //---------------------------------------------------------------------------
- // GetThemeDocumentationProperty()
- // - Get the value for the specified property name from
- // the [documentation] section of the themes.ini file
- // for the specified theme. If the property has been
- // localized in the theme files string table, the
- // localized version of the property value is returned.
- //
- // pszThemeFileName - filename of the theme file to query
- // pszPropertyName - name of the string property to retreive a value for
- // pszValueBuff - receives the property string value
- // cchMaxValChars - max chars allowed in pszValueBuff
- //---------------------------------------------------------------------------
- const
- SZ_THDOCPROP_DISPLAYNAME = WideString('DisplayName');
- {$EXTERNALSYM SZ_THDOCPROP_DISPLAYNAME}
- SZ_THDOCPROP_CANONICALNAME = WideString('ThemeName');
- {$EXTERNALSYM SZ_THDOCPROP_CANONICALNAME}
- SZ_THDOCPROP_TOOLTIP = WideString('ToolTip');
- {$EXTERNALSYM SZ_THDOCPROP_TOOLTIP}
- SZ_THDOCPROP_AUTHOR = WideString('author');
- {$EXTERNALSYM SZ_THDOCPROP_AUTHOR}
- function GetThemeDocumentationProperty(pszThemeName, pszPropertyName: LPCWSTR;
- pszValueBuff: LPWSTR; cchMaxValChars: Integer): HRESULT; stdcall;
- {$EXTERNALSYM GetThemeDocumentationProperty}
- //---------------------------------------------------------------------------
- // Theme API Error Handling
- //
- // All functions in the Theme API not returning an HRESULT (THEMEAPI_)
- // use the WIN32 function "SetLastError()" to record any call failures.
- //
- // To retreive the error code of the last failure on the
- // current thread for these type of API's, use the WIN32 function
- // "GetLastError()".
- //
- // All Theme API error codes (HRESULT's and GetLastError() values)
- // should be normal win32 errors which can be formatted into
- // strings using the Win32 API FormatMessage().
- //---------------------------------------------------------------------------
- //---------------------------------------------------------------------------
- // DrawThemeParentBackground()
- // - used by partially-transparent or alpha-blended
- // child controls to draw the part of their parent
- // that they appear in front of.
- //
- // hwnd - handle of the child control
- // hdc - hdc of the child control
- // prc - (optional) rect that defines the area to be
- // drawn (CHILD coordinates)
- //---------------------------------------------------------------------------
- function DrawThemeParentBackground(hwnd: HWND; hdc: HDC; prc: PRECT): HRESULT; stdcall;
- {$EXTERNALSYM DrawThemeParentBackground}
- //---------------------------------------------------------------------------
- // EnableTheming() - enables or disables themeing for the current user
- // in the current and future sessions.
- //
- // fEnable - if FALSE, disable theming & turn themes off.
- // - if TRUE, enable themeing and, if user previously
- // had a theme active, make it active now.
- //---------------------------------------------------------------------------
- function EnableTheming(fEnable: BOOL): HRESULT; stdcall;
- {$EXTERNALSYM EnableTheming}
- //------------------------------------------------------------------------
- //---- bits used in dwFlags of DTBGOPTS ----
- const
- DTBG_CLIPRECT = $00000001; // rcClip has been specified
- {$EXTERNALSYM DTBG_CLIPRECT}
- DTBG_DRAWSOLID = $00000002; // draw transparent/alpha images as solid
- {$EXTERNALSYM DTBG_DRAWSOLID}
- DTBG_OMITBORDER = $00000004; // don't draw border of part
- {$EXTERNALSYM DTBG_OMITBORDER}
- DTBG_OMITCONTENT = $00000008; // don't draw content area of part
- {$EXTERNALSYM DTBG_OMITCONTENT}
- DTBG_COMPUTINGREGION = $00000010; // TRUE if calling to compute region
- {$EXTERNALSYM DTBG_COMPUTINGREGION}
- DTBG_MIRRORDC = $00000020; // assume the hdc is mirrorred and
- // flip images as appropriate (currently
- // only supported for bgtype=imagefile)
- {$EXTERNALSYM DTBG_MIRRORDC}
- //------------------------------------------------------------------------
- type
- _DTBGOPTS = record
- dwSize: DWORD; // size of the struct
- dwFlags: DWORD; // which options have been specified
- rcClip: RECT; // clipping rectangle
- end;
- {$EXTERNALSYM _DTBGOPTS}
- DTBGOPTS = _DTBGOPTS;
- {$EXTERNALSYM DTBGOPTS}
- PDTBGOPTS = ^DTBGOPTS;
- TDtbgOpts = DTBGOPTS;
- //------------------------------------------------------------------------
- // DrawThemeBackgroundEx()
- // - draws the theme-specified border and fill for
- // the "iPartId" and "iStateId". This could be
- // based on a bitmap file, a border and fill, or
- // other image description. NOTE: This will be
- // merged back into DrawThemeBackground() after
- // BETA 2.
- //
- // hTheme - theme data handle
- // hdc - HDC to draw into
- // iPartId - part number to draw
- // iStateId - state number (of the part) to draw
- // pRect - defines the size/location of the part
- // pOptions - ptr to optional params
- //------------------------------------------------------------------------
- function DrawThemeBackgroundEx(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pRect: LPRECT; pOptions: PDTBGOPTS): HRESULT; stdcall;
- {$EXTERNALSYM DrawThemeBackgroundEx}
- implementation
- uses
- JwaWinDLLNames;
- {$IFDEF DYNAMIC_LINK}
- var
- _OpenThemeData: Pointer;
- function OpenThemeData;
- begin
- GetProcedureAddress(_OpenThemeData, themelib, 'OpenThemeData');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_OpenThemeData]
- end;
- end;
- var
- _CloseThemeData: Pointer;
- function CloseThemeData;
- begin
- GetProcedureAddress(_CloseThemeData, themelib, 'CloseThemeData');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_CloseThemeData]
- end;
- end;
- var
- _DrawThemeBackground: Pointer;
- function DrawThemeBackground;
- begin
- GetProcedureAddress(_DrawThemeBackground, themelib, 'DrawThemeBackground');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DrawThemeBackground]
- end;
- end;
- var
- _DrawThemeText: Pointer;
- function DrawThemeText;
- begin
- GetProcedureAddress(_DrawThemeText, themelib, 'DrawThemeText');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DrawThemeText]
- end;
- end;
- var
- _GetThemeBackgroundContentRect: Pointer;
- function GetThemeBackgroundContentRect;
- begin
- GetProcedureAddress(_GetThemeBackgroundContentRect, themelib, 'GetThemeBackgroundContentRect');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeBackgroundContentRect]
- end;
- end;
- var
- _GetThemeBackgroundExtent: Pointer;
- function GetThemeBackgroundExtent;
- begin
- GetProcedureAddress(_GetThemeBackgroundExtent, themelib, 'GetThemeBackgroundContentRect');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeBackgroundExtent]
- end;
- end;
- var
- _GetThemePartSize: Pointer;
- function GetThemePartSize;
- begin
- GetProcedureAddress(_GetThemePartSize, themelib, 'GetThemePartSize');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemePartSize]
- end;
- end;
- var
- _GetThemeTextExtent: Pointer;
- function GetThemeTextExtent;
- begin
- GetProcedureAddress(_GetThemeTextExtent, themelib, 'GetThemeTextExtent');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeTextExtent]
- end;
- end;
- var
- _GetThemeTextMetrics: Pointer;
- function GetThemeTextMetrics;
- begin
- GetProcedureAddress(_GetThemeTextMetrics, themelib, 'GetThemeTextMetrics');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeTextMetrics]
- end;
- end;
- var
- _GetThemeBackgroundRegion: Pointer;
- function GetThemeBackgroundRegion;
- begin
- GetProcedureAddress(_GetThemeBackgroundRegion, themelib, 'GetThemeBackgroundRegion');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeBackgroundRegion]
- end;
- end;
- var
- _HitTestThemeBackground: Pointer;
- function HitTestThemeBackground;
- begin
- GetProcedureAddress(_HitTestThemeBackground, themelib, 'HitTestThemeBackground');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_HitTestThemeBackground]
- end;
- end;
- var
- _DrawThemeEdge: Pointer;
- function DrawThemeEdge;
- begin
- GetProcedureAddress(_DrawThemeEdge, themelib, 'DrawThemeEdge');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DrawThemeEdge]
- end;
- end;
- var
- _DrawThemeIcon: Pointer;
- function DrawThemeIcon;
- begin
- GetProcedureAddress(_DrawThemeIcon, themelib, 'DrawThemeIcon');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DrawThemeIcon]
- end;
- end;
- var
- _IsThemePartDefined: Pointer;
- function IsThemePartDefined;
- begin
- GetProcedureAddress(_IsThemePartDefined, themelib, 'IsThemePartDefined');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_IsThemePartDefined]
- end;
- end;
- var
- _IsThemeBackgroundPartialTrans: Pointer;
- function IsThemeBackgroundPartiallyTransparent;
- begin
- GetProcedureAddress(_IsThemeBackgroundPartialTrans, themelib, 'IsThemeBackgroundPartiallyTransparent');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_IsThemeBackgroundPartialTrans]
- end;
- end;
- var
- _GetThemeColor: Pointer;
- function GetThemeColor;
- begin
- GetProcedureAddress(_GetThemeColor, themelib, 'GetThemeColor');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeColor]
- end;
- end;
- var
- _GetThemeMetric: Pointer;
- function GetThemeMetric;
- begin
- GetProcedureAddress(_GetThemeMetric, themelib, 'GetThemeMetric');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeMetric]
- end;
- end;
- var
- _GetThemeString: Pointer;
- function GetThemeString;
- begin
- GetProcedureAddress(_GetThemeString, themelib, 'GetThemeString');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeString]
- end;
- end;
- var
- _GetThemeBool: Pointer;
- function GetThemeBool;
- begin
- GetProcedureAddress(_GetThemeBool, themelib, 'GetThemeBool');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeBool]
- end;
- end;
- var
- _GetThemeInt: Pointer;
- function GetThemeInt;
- begin
- GetProcedureAddress(_GetThemeInt, themelib, 'GetThemeInt');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeInt]
- end;
- end;
- var
- _GetThemeEnumValue: Pointer;
- function GetThemeEnumValue;
- begin
- GetProcedureAddress(_GetThemeEnumValue, themelib, 'GetThemeEnumValue');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeEnumValue]
- end;
- end;
- var
- _GetThemePosition: Pointer;
- function GetThemePosition;
- begin
- GetProcedureAddress(_GetThemePosition, themelib, 'GetThemePosition');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemePosition]
- end;
- end;
- var
- _GetThemeFont: Pointer;
- function GetThemeFont;
- begin
- GetProcedureAddress(_GetThemeFont, themelib, 'GetThemeFont');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeFont]
- end;
- end;
- var
- _GetThemeRect: Pointer;
- function GetThemeRect;
- begin
- GetProcedureAddress(_GetThemeRect, themelib, 'GetThemeRect');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeRect]
- end;
- end;
- var
- _GetThemeMargins: Pointer;
- function GetThemeMargins;
- begin
- GetProcedureAddress(_GetThemeMargins, themelib, 'GetThemeMargins');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeMargins]
- end;
- end;
- var
- _GetThemeIntList: Pointer;
- function GetThemeIntList;
- begin
- GetProcedureAddress(_GetThemeIntList, themelib, 'GetThemeIntList');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeIntList]
- end;
- end;
- var
- _GetThemePropertyOrigin: Pointer;
- function GetThemePropertyOrigin;
- begin
- GetProcedureAddress(_GetThemePropertyOrigin, themelib, 'GetThemePropertyOrigin');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemePropertyOrigin]
- end;
- end;
- var
- _SetWindowTheme: Pointer;
- function SetWindowTheme;
- begin
- GetProcedureAddress(_SetWindowTheme, themelib, 'SetWindowTheme');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_SetWindowTheme]
- end;
- end;
- var
- _GetThemeFilename: Pointer;
- function GetThemeFilename;
- begin
- GetProcedureAddress(_GetThemeFilename, themelib, 'GetThemeFilename');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeFilename]
- end;
- end;
- var
- _GetThemeSysColor: Pointer;
- function GetThemeSysColor;
- begin
- GetProcedureAddress(_GetThemeSysColor, themelib, 'GetThemeSysColor');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysColor]
- end;
- end;
- var
- _GetThemeSysColorBrush: Pointer;
- function GetThemeSysColorBrush;
- begin
- GetProcedureAddress(_GetThemeSysColorBrush, themelib, 'GetThemeSysColorBrush');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysColorBrush]
- end;
- end;
- var
- _GetThemeSysBool: Pointer;
- function GetThemeSysBool;
- begin
- GetProcedureAddress(_GetThemeSysBool, themelib, 'GetThemeSysBool');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysBool]
- end;
- end;
- var
- _GetThemeSysSize: Pointer;
- function GetThemeSysSize;
- begin
- GetProcedureAddress(_GetThemeSysSize, themelib, 'GetThemeSysSize');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysSize]
- end;
- end;
- var
- _GetThemeSysFont: Pointer;
- function GetThemeSysFont;
- begin
- GetProcedureAddress(_GetThemeSysFont, themelib, 'GetThemeSysFont');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysFont]
- end;
- end;
- var
- _GetThemeSysString: Pointer;
- function GetThemeSysString;
- begin
- GetProcedureAddress(_GetThemeSysString, themelib, 'GetThemeSysString');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysString]
- end;
- end;
- var
- _GetThemeSysInt: Pointer;
- function GetThemeSysInt;
- begin
- GetProcedureAddress(_GetThemeSysInt, themelib, 'GetThemeSysInt');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeSysInt]
- end;
- end;
- var
- _IsThemeActive: Pointer;
- function IsThemeActive;
- begin
- GetProcedureAddress(_IsThemeActive, themelib, 'IsThemeActive');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_IsThemeActive]
- end;
- end;
- var
- _IsAppThemed: Pointer;
- function IsAppThemed;
- begin
- GetProcedureAddress(_IsAppThemed, themelib, 'IsAppThemed');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_IsAppThemed]
- end;
- end;
- var
- _GetWindowTheme: Pointer;
- function GetWindowTheme;
- begin
- GetProcedureAddress(_GetWindowTheme, themelib, 'GetWindowTheme');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetWindowTheme]
- end;
- end;
- var
- _EnableThemeDialogTexture: Pointer;
- function EnableThemeDialogTexture;
- begin
- GetProcedureAddress(_EnableThemeDialogTexture, themelib, 'EnableThemeDialogTexture');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_EnableThemeDialogTexture]
- end;
- end;
- var
- _IsThemeDialogTextureEnabled: Pointer;
- function IsThemeDialogTextureEnabled;
- begin
- GetProcedureAddress(_IsThemeDialogTextureEnabled, themelib, 'IsThemeDialogTextureEnabled');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_IsThemeDialogTextureEnabled]
- end;
- end;
- var
- _GetThemeAppProperties: Pointer;
- function GetThemeAppProperties;
- begin
- GetProcedureAddress(_GetThemeAppProperties, themelib, 'GetThemeAppProperties');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeAppProperties]
- end;
- end;
- var
- _SetThemeAppProperties: Pointer;
- procedure SetThemeAppProperties;
- begin
- GetProcedureAddress(_SetThemeAppProperties, themelib, 'SetThemeAppProperties');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_SetThemeAppProperties]
- end;
- end;
- var
- _GetCurrentThemeName: Pointer;
- function GetCurrentThemeName;
- begin
- GetProcedureAddress(_GetCurrentThemeName, themelib, 'GetCurrentThemeName');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetCurrentThemeName]
- end;
- end;
- var
- _GetThemeDocumentationProperty: Pointer;
- function GetThemeDocumentationProperty;
- begin
- GetProcedureAddress(_GetThemeDocumentationProperty, themelib, 'GetThemeDocumentationProperty');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_GetThemeDocumentationProperty]
- end;
- end;
- var
- _DrawThemeParentBackground: Pointer;
- function DrawThemeParentBackground;
- begin
- GetProcedureAddress(_DrawThemeParentBackground, themelib, 'DrawThemeParentBackground');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DrawThemeParentBackground]
- end;
- end;
- var
- _EnableTheming: Pointer;
- function EnableTheming;
- begin
- GetProcedureAddress(_EnableTheming, themelib, 'EnableTheming');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_EnableTheming]
- end;
- end;
- var
- _DrawThemeBackgroundEx: Pointer;
- function DrawThemeBackgroundEx;
- begin
- GetProcedureAddress(_DrawThemeBackgroundEx, themelib, 'DrawThemeBackgroundEx');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DrawThemeBackgroundEx]
- end;
- end;
- {$ELSE}
- function OpenThemeData; external themelib name 'OpenThemeData';
- function CloseThemeData; external themelib name 'CloseThemeData';
- function DrawThemeBackground; external themelib name 'DrawThemeBackground';
- function DrawThemeText; external themelib name 'DrawThemeText';
- function GetThemeBackgroundContentRect; external themelib name 'GetThemeBackgroundContentRect';
- function GetThemeBackgroundExtent; external themelib name 'GetThemeBackgroundContentRect';
- function GetThemePartSize; external themelib name 'GetThemePartSize';
- function GetThemeTextExtent; external themelib name 'GetThemeTextExtent';
- function GetThemeTextMetrics; external themelib name 'GetThemeTextMetrics';
- function GetThemeBackgroundRegion; external themelib name 'GetThemeBackgroundRegion';
- function HitTestThemeBackground; external themelib name 'HitTestThemeBackground';
- function DrawThemeEdge; external themelib name 'DrawThemeEdge';
- function DrawThemeIcon; external themelib name 'DrawThemeIcon';
- function IsThemePartDefined; external themelib name 'IsThemePartDefined';
- function IsThemeBackgroundPartiallyTransparent; external themelib name 'IsThemeBackgroundPartiallyTransparent';
- function GetThemeColor; external themelib name 'GetThemeColor';
- function GetThemeMetric; external themelib name 'GetThemeMetric';
- function GetThemeString; external themelib name 'GetThemeString';
- function GetThemeBool; external themelib name 'GetThemeBool';
- function GetThemeInt; external themelib name 'GetThemeInt';
- function GetThemeEnumValue; external themelib name 'GetThemeEnumValue';
- function GetThemePosition; external themelib name 'GetThemePosition';
- function GetThemeFont; external themelib name 'GetThemeFont';
- function GetThemeRect; external themelib name 'GetThemeRect';
- function GetThemeMargins; external themelib name 'GetThemeMargins';
- function GetThemeIntList; external themelib name 'GetThemeIntList';
- function GetThemePropertyOrigin; external themelib name 'GetThemePropertyOrigin';
- function SetWindowTheme; external themelib name 'SetWindowTheme';
- function GetThemeFilename; external themelib name 'GetThemeFilename';
- function GetThemeSysColor; external themelib name 'GetThemeSysColor';
- function GetThemeSysColorBrush; external themelib name 'GetThemeSysColorBrush';
- function GetThemeSysBool; external themelib name 'GetThemeSysBool';
- function GetThemeSysSize; external themelib name 'GetThemeSysSize';
- function GetThemeSysFont; external themelib name 'GetThemeSysFont';
- function GetThemeSysString; external themelib name 'GetThemeSysString';
- function GetThemeSysInt; external themelib name 'GetThemeSysInt';
- function IsThemeActive; external themelib name 'IsThemeActive';
- function IsAppThemed; external themelib name 'IsAppThemed';
- function GetWindowTheme; external themelib name 'GetWindowTheme';
- function EnableThemeDialogTexture; external themelib name 'EnableThemeDialogTexture';
- function IsThemeDialogTextureEnabled; external themelib name 'IsThemeDialogTextureEnabled';
- function GetThemeAppProperties; external themelib name 'GetThemeAppProperties';
- procedure SetThemeAppProperties; external themelib name 'SetThemeAppProperties';
- function GetCurrentThemeName; external themelib name 'GetCurrentThemeName';
- function GetThemeDocumentationProperty; external themelib name 'GetThemeDocumentationProperty';
- function DrawThemeParentBackground; external themelib name 'DrawThemeParentBackground';
- function EnableTheming; external themelib name 'EnableTheming';
- function DrawThemeBackgroundEx; external themelib name 'DrawThemeBackgroundEx';
- {$ENDIF DYNAMIC_LINK}
- end.
|