2012-06-08 24 views
6

Tôi đã cố gắng áp dụng VCLStyle cho TLinkLabel.Làm cách nào để đăng ký VCLStyle cho TLinkLabel

Đáng buồn thay, tôi không thể hiển thị dấu gạch dưới (sentece của A Tag)

TLinkLabel.Caption := 'Sma<a>pl</a>e'; 

Làm thế nào để giải quyết này?

Để giải quyết vấn đề này, nhưng một thẻ không được xuất hiện khả năng này "Mẫu" enter image description here

procedure TgLinkLabelHook.Paint(Canvas: TCanvas); 
var 
    LDetails: TThemedElementDetails; 
    ParseStr: String; 
    DrawRect: TRect; 
    DC: HDC; 
    TextSize: TSize; 
    SaveFont: HFont; 
    ThemeTextColor: TColor; 
begin 
    ParseStr := ParseLinks; 
    LDetails := StyleServices.GetElementDetails(tbPushButtonPressed); 
    DC := GetDC(0); 
    try 
    SaveFont := SelectObject(DC, TLinkLabel(Control).Font.Handle); 
    try 
     GetTextExtentPoint32(DC, PWideChar(ParseStr), Length(ParseStr), TextSize); 
    finally 
     SelectObject(DC, SaveFont); 
    end; 
    finally 
    ReleaseDC(0, DC); 
    end; 
    Canvas.Font := TLinkLabel(Control).Font; 
    Canvas.Font.Style := Canvas.Font.Style + [fsUnderline]; 
    Canvas.Font.Size := TLinkLabel(Control).Font.Size; 
    if StyleServices.GetElementColor(LDetails, ecBodyTextColor, ThemeTextColor) then 
    Canvas.Font.Color := ThemeTextColor; 
// DrawRect := Rect(0, 0, TextSize.cx, TextSize.cy); 
    DrawRect := Control.ClientRect; 
    DrawControlText(Canvas, LDetails, ParseStr, DrawRect, DT_VCENTER or DT_CENTER); 
end; 

procedure TForm8.FormCreate(Sender: TObject); 
begin 
    TStyleManager.Engine.RegisterStyleHook(TLinkLabel, TgLinkLabelHook); 
end; 
+0

Phông chữ văn bản mặc định được sử dụng vì bạn gọi 'DrawControlText' sử dụng phông chữ mặc định của điều khiển để hiển thị. Đó là những gì ghi đè cài đặt phông chữ canvas của bạn. Một điều nữa là bạn không thể thay đổi màu của liên kết thành một thứ gì đó khác với màu hệ thống (như COLOR_HIGHLIGHT) hoặc màu phông chữ mặc định của nhãn, vì vậy nỗ lực của bạn dường như vô dụng, nếu tôi nhận được quyền bạn muốn sử dụng liên kết tùy chỉnh màu sắc. Xem ví dụ ['here'] (http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/bd54bd30-e21f-4dc7-a77f-88de02c63f72/). – TLama

+3

Bạn có thể gọi 'StyleServices.DrawText' thay vì' DrawControlText' nhưng không có gì thay đổi trên thực tế các liên kết từ 'TLinkLabel' ([' SysLink'] (http://msdn.microsoft.com/en-us/library/ điều khiển windows/desktop/bb760706 (v = vs.85) .aspx) được hệ thống sử dụng bằng các màu hệ thống và nếu bạn muốn tự vẽ chúng, bạn sẽ phải phân tích cú pháp văn bản một lần nữa và hiển thị từng phần bằng của riêng mình, điều làm cho việc sử dụng 'TLinkLabel' vô ích. – TLama

+1

@TLama, bạn nói đúng, tại sao không đăng nhận xét của bạn làm câu trả lời? – RRUZ

Trả lời

10

Làm thế nào để làm cho một văn bản nhãn dựa trên cài đặt phông chữ vải bạn sử dụng:

Sử dụng chức năng TCustomStyleServices.DrawText:

StyleServices.DrawText(Canvas.Handle, LDetails, ParseStr, DrawRect, DT_VCENTER or DT_CENTER, Canvas.Font.Color); 

thay vì TStyleManager.DrawControlText. Chức năng này sử dụng các cài đặt phông chữ điều khiển mặc định, vì vậy nó chỉ đơn giản bỏ qua các cài đặt bạn đã thực hiện. Trên dòng đầu tiên của nó phải mất font khỏi sự khống chế được giao, những gì thiết lập font vải để điều khiển mặc định của font chữ:

Canvas.Font := TWinControlClass(Control).Font; 

Về ý định của bạn:

Lưu ý, rằng nó không thể để sử dụng màu tùy chỉnh cho các liên kết nhãn vì chúng được hệ thống hiển thị. Chỉ có hai cách giải quyết để thay đổi chúng, hoặc là bạn có thể thiết lập màu hệ thống được sử dụng để hiển thị phông chữ liên kết hoặc phân tích cú pháp và tự hoàn thành chú thích nhãn, điều làm cho việc sử dụng TLinkLabel trở nên vô dụng.

+1

Cảm ơn bạn đã trả lời. – gomsun2