2012-03-24 13 views

Antwort

3

Vielleicht könnte Ihnen das eine solche Inspiration geben. Bitte beachten Sie wieder dies funktioniert nur unter Windows und mit Themen deaktiviert in Ihrer Anwendung.

uses 
    ComCtrls, Windows, LCLType; 

type 
    TPageControl = class(ComCtrls.TPageControl) 
    private 
    procedure CNDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM; 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

implementation 

procedure TPageControl.CreateParams(var Params: TCreateParams); 
begin 
    inherited CreateParams(Params); 
    with Params do 
    begin 
    if not (csDesigning in ComponentState) then 
     Style := Style or TCS_OWNERDRAWFIXED; 
    end; 
end; 

procedure TPageControl.CNDrawItem(var Message: TWMDrawItem); 
var 
    FontHandle: HFONT; 
    FontColor: COLORREF; 
    FontObject: TLogFont; 
    BrushColor: COLORREF; 
    BrushHandle: HBRUSH; 
begin 
    with Message.DrawItemStruct^ do 
    begin 
    GetObject(Font.Handle, SizeOf(FontObject), @FontObject); 
    case itemID of 
     0: 
     begin 
     BrushColor := RGB(235, 24, 33); 
     FontColor := clWhite; 
     FontObject.lfWeight := FW_NORMAL; 
     FontObject.lfItalic := 0; 
     end; 
     1: 
     begin 
     BrushColor := RGB(247, 200, 34); 
     FontColor := clGreen; 
     FontObject.lfWeight := FW_NORMAL; 
     FontObject.lfItalic := 1; 
     end; 
     2: 
     begin 
     BrushColor := RGB(178, 229, 26); 
     FontColor := clGreen; 
     FontObject.lfWeight := FW_BOLD; 
     FontObject.lfItalic := 1; 
     end 
     else 
     BrushColor := ColorToRGB(clBtnFace); 
    end; 

    BrushHandle := CreateSolidBrush(BrushColor); 
    FillRect(hDC, rcItem, BrushHandle); 

    FontHandle := CreateFontIndirect(FontObject); 
    try 
     SelectObject(hDC, FontHandle); 
     SetTextColor(hDC, FontColor); 
     SetBkMode(hDC, TRANSPARENT); 
     DrawTextEx(hDC, PChar(Page[itemID].Caption), -1, rcItem, DT_CENTER or 
     DT_VCENTER or DT_SINGLELINE, nil); 
    finally 
     DeleteObject(FontHandle); 
    end; 
    end; 
    Message.Result := 1; 
end; 

Hier ist, wie es aussieht:

enter image description here

+2

Legendary ..... sehr geschätzt ... :-) – user1174918

Verwandte Themen