如何在Canvas內顯示多行置中文字 |
答題得分者是:jow
|
bill534
一般會員 發表:38 回覆:51 積分:17 註冊:2007-02-22 發送簡訊給我 |
我用TCustomControl,自己寫了一個button,想要顯示多行置中的文字郤show不出來(單行是可以喔) !!
canvas.Lock; try Canvas.Font := Font; with Canvas do begin if FMonitor then begin Brush.Color := FOnColor; // Draw paper background. s1 := FCaptionForOn; end else begin Brush.color := FOffColor; s1 := FCaptionForOff; end; FillRect(ClientRect); // // draw edge if CanOperation then pen.Style := psSolid else pen.Style := psDot; Pen.Color := FBorderColor; Pen.Width := 1; Rectangle(0, 0, ClientWidth, ClientHeight); if FMouseDown or (not CanOperation) then pen.Color := clGray; Rectangle(1, 1, ClientWidth - 1, ClientHeight - 1); // draw caption1 Brush.Style := bsClear; Rect.Left := integer(FMouseDown) 1; Rect.Top := integer(FMouseDown) 1; Rect.Bottom := ClientHeight - 1; Rect.right := ClientWidth - 1; DrawText(Handle, PChar(s1), -1, Rect, DT_VCENTER or DT_CENTER or DT_WORDBREAK ); // strlen(pchar(s1)) end; {with} finally canvas.Unlock; end; |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
用一個TStringList來分離所要繪製的文字
以下程式碼,提供你參考... [code delphi] var s1: string; r: TRect; L: TStringList; I, h: Integer; begin canvas.Lock; try // Canvas.Font := Font; Canvas.Font.Assign(Font); with Canvas do begin if FMonitor then begin Brush.Color := FOnColor; // Draw paper background. s1 := FCaptionForOn; end else begin Brush.color := FOffColor; s1 := FCaptionForOff; end; FillRect(ClientRect); // draw edge if CanOperation then pen.Style := psSolid else pen.Style := psDot; Pen.Color := FBorderColor; Pen.Width := 1; Rectangle(0, 0, ClientWidth, ClientHeight); if FIsMouseDown or (not CanOperation) then pen.Color := clGray; Rectangle(1, 1, ClientWidth - 1, ClientHeight - 1); // draw caption1 Brush.Style := bsClear; h := Canvas.TextHeight('0'); r := Rect(1,1,ClientWidth-1,h); L := TStringList.Create; try L.Delimiter := #$20; L.DelimitedText := s1; for I := 0 to L.Count-1 do begin DrawText(Handle,PChar(L[I]),-1,r, DT_VCENTER or DT_CENTER or DT_WORDBREAK ); OffsetRect(r,0,h 1); end; finally FreeAndNil(L); end; end; finally canvas.Unlock; end; end; [/code] |
bill534
一般會員 發表:38 回覆:51 積分:17 註冊:2007-02-22 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
bill534
一般會員 發表:38 回覆:51 積分:17 註冊:2007-02-22 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
若底色與Parent 底色一致,這很簡單。Parent.Color 或 ParentColor = True
當然你想要的一定不是那麼簡單。 若要做到 TransParent 透空。可取消 WM_ERASEBKGND 具體搜索一下。 不過大體來說這種作法都不漂亮。多少會有殘影問題。 建議繼承 TGraphicControl 比較好處理透空問題。 ===================引 用 bill534 文 章=================== 另外一個問題是,若我一樣用TCustomControl要寫一個仿led元件帶caption,底色要跟owner一樣要如何寫(Transparent)! |
bill534
一般會員 發表:38 回覆:51 積分:17 註冊:2007-02-22 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |