線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2096
推到 Plurk!
推到 Facebook!

如何重繪TWinControl的外形。

尚未結案
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-08 16:50:12 IP:218.80.xxx.xxx 未訂閱
從元件盤點選一個WinControl到Form上,每個Wincontrol都有Default外形。 現在要重新繪制TWinControl的外形,想讓WinControl按照自己的想法來繪制外形,這怎樣實現呢? 提供設計思路或者提供一段Coding參考,謝謝! ========================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-08 17:25:36 IP:218.80.xxx.xxx 未訂閱
procedure Txxxx.Paint;override; begin   Canvas.Line end;     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-08 17:49:21 IP:218.80.xxx.xxx 未訂閱
TGraphicControl可以, 但是TWinControl好像不行。被告知Method 'Paint' not found in base class ========================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-08 18:27:34 IP:202.39.xxx.xxx 未訂閱
試試攔截 WM_PAINT 這個 message
type
  TMyWinControl = class(TWinControl)
  private
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  end;    // ...    procedure TMyWinControl.WMPaint(var Message: TWMPaint);
begin
  // ...
end;
--- 屬於那自己生命的歌 不管是什麼顏色
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-08 20:29:23 IP:218.1.xxx.xxx 未訂閱
哦,没看清,TGraphicControl和TCustomerControl才有paint,hager是对的,看看TGraphicControl的实作就知道了
procedure TGraphicControl.WMPaint(var Message: TWMPaint);
begin
  if Message.DC <> 0 then
  begin
    Canvas.Lock;
    try
      Canvas.Handle := Message.DC;
      try
        Paint;
      finally
        Canvas.Handle := 0;
      end;
    finally
      Canvas.Unlock;
    end;
  end;
end;
久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听 發表人 - mustapha.wang 於 2004/03/08 20:31:12
------
江上何人初见月,江月何年初照人
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-09 00:29:44 IP:210.66.xxx.xxx 未訂閱
使用TCustomControl繼承吧!! TCustomControl是繼承TWinControl
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-09 08:39:16 IP:218.80.xxx.xxx 未訂閱
Hi:大家好,謝謝回答. 還有些疑問. TWinControl類中提供了下面的重繪服務函數. procedure WMPaint(var Message: TWMPaint); message WM_PAINT; //準備重繪控件區域 procedure PaintControls(DC: HDC; First: TControl); //重繪子控件區域 procedure PaintHandler(Var Message: TWMPaint); //剪裁重繪區域 procedure PaintWindow(DC: HDC); virtual; //子控件重繪使用 版主介紹的就是'不使用TWinControl的WMPaint函數,在派生類中自行攔截WM_Paint消息自行處理重繪的工作' 那麼我再問有沒有方法,無輪是TWinControl還是TGaphicControl都可實現的同一中重繪方法,而不要分開處理. ========================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-09 15:58:02 IP:202.39.xxx.xxx 未訂閱
TWinControl 與 TGraphicControl 不都可以攔截 WM_PAINT 訊息? --- 屬於那自己生命的歌 不管是什麼顏色
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-09 16:58:09 IP:218.80.xxx.xxx 未訂閱
引言: TWinControl 與 TGraphicControl 不都可以攔截 WM_PAINT 訊息? --- 屬於那自己生命的歌 不管是什麼顏色
有點糊塗了。WMPaint不是虛擬函數,所以它不能被派生類Override。如果不是攔截WM_PAINT 訊息,派生類如何在WMPaint加入自己的動作? ========================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-09 17:03:51 IP:202.39.xxx.xxx 未訂閱
如果小弟的觀念沒錯的話, 用 inherited 關鍵字
type
  TMyWinControl = class(TWinControl)
  private
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  end;    // ...    procedure TMyWinControl.WMPaint(var Message: TWMPaint);
begin
  inherited
  // ...
end;
--- 屬於那自己生命的歌 不管是什麼顏色
Leway
一般會員


發表:43
回覆:71
積分:22
註冊:2003-07-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-09 17:36:54 IP:218.80.xxx.xxx 未訂閱
引言: 如果小弟的觀念沒錯的話, 用 inherited 關鍵字
type
  TMyWinControl = class(TWinControl)
  private
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  end;    // ...    procedure TMyWinControl.WMPaint(var Message: TWMPaint);
begin
  inherited
  // ...
end;
--- 屬於那自己生命的歌 不管是什麼顏色
版主都稱小弟,那我這樣小弟的小弟更沒得混了。 謝謝回答,就是這個意思. ========================= 為學日益,為道日損,損之又損,以致於無。為無為,而無不為。
系統時間:2024-06-24 4:01:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!