青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

依舊的博客

技術(shù)學(xué)習(xí)

C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
  17 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks
 

視圖用來(lái)表現(xiàn)數(shù)據(jù),也是用戶接口。當(dāng)數(shù)據(jù)更新時(shí),視圖應(yīng)該隨之改變,在交互過(guò)程中,視圖需要響應(yīng)用戶,這些情況下都會(huì)引起視圖的繪制。 cxGrid可以用多種視圖表現(xiàn)關(guān)系型數(shù)據(jù),最常用的是表格視圖,我們以表格視圖作為默認(rèn)的對(duì)象,分析cxGrid用以實(shí)現(xiàn)視圖繪制的基本結(jié)構(gòu)。

 

表格視圖按行,列布局,行優(yōu)先順序繪制,繪制的基本元素是行和單元(cell)。由于數(shù)據(jù)內(nèi)容的動(dòng)態(tài)性,行是動(dòng)態(tài)生成的。表格視圖提供了各種可定制性,包括可選的分組行風(fēng)格和若干自定義風(fēng)格,這些復(fù)雜特性背后有很好的設(shè)計(jì)。

 

視圖繪制相關(guān)的幾組類:

 

ViewInfo類族:

描述視圖元素的繪制信息,視圖元素要繪制成什么樣子,完全由其ViewInfo確定。祖先類是TcxCustomGridCellViewInfo,數(shù)據(jù)行,數(shù)據(jù)單元,分組行等視圖元素以及視圖本身都有相應(yīng)的派生類。

 

Painter類族:

按照ViewInfo,在畫布上繪制視圖元素。祖先類是TcxCustomGridCellPainter TcxCustomGridCellPainter = class

 private

    FCanvas: TcxCanvas;

FViewInfo: TcxCustomGridCellViewInfo;

 

View類族:

整個(gè)視圖的描述,包括了各種設(shè)置信息。祖先是TcxCustomGridView

ViewViewInfo的不同在ViewInfo描述繪制信息,而View描述設(shè)置信息,ViewInfo是動(dòng)態(tài)構(gòu)造的,當(dāng)Grid創(chuàng)建時(shí),如果有一個(gè)分組多條記錄,那么每條記錄會(huì)生成一個(gè)ViewInfo實(shí)例,如果收起分組,這些實(shí)例將被銷毀,展開分組,會(huì)再次生成每條記錄的ViewInfo實(shí)例,而一個(gè)表格視圖始終只有一個(gè)實(shí)例。

 

LookAndFeelPainter類族:

用于進(jìn)行有關(guān)分組行風(fēng)格的繪制。祖先是TcxCustomLookAndFeelPainter

繪制視圖元素時(shí),涉及到分組行風(fēng)格(GroupRowStyle)的繪制任務(wù),都被委托給LookAndFeelPainter類的實(shí)例,由此實(shí)現(xiàn)多態(tài)的風(fēng)格。

 

StyleStyles類族:

Style類的祖先是TcxCustomStyleStyles類的祖先是TcxCustomStylesTcxCustomStyle類表示一種自定義風(fēng)格,TcxCustomStyles類表示一組風(fēng)格。TcxCustomStyles內(nèi)部用一個(gè)map保存這些風(fēng)格,給出鍵,可通過(guò)Values屬性取出指定的風(fēng)格。

TcxCustomStyles = class(TcxInterfacedPersistent, IcxStyleChangeListener)

public

property Values[Index: Integer]: TcxCustomStyle read GetValue write SetValue;

鍵的取值范圍如下:

 vsCustomTableFirst = vsCustomLast + 1;

 vsContent = vsCustomTableFirst;

 vsContentEven = vsCustomTableFirst + 1;

 vsContentOdd = vsCustomTableFirst + 2;

 vsFilterBox = vsCustomTableFirst + 3;

 vsInactive = vsCustomTableFirst + 4;

 vsIncSearch = vsCustomTableFirst + 5;

 vsSelection = vsCustomTableFirst + 6;

// vsCustomTableLast = vsSelection;

 vsHotTrack = vsCustomTableFirst + 7;

 vsCustomTableLast = vsHotTrack;

 

考查以上幾組類的關(guān)系:

 

PainterViewInfo

 

Painter類和ViewInfo類具有對(duì)應(yīng)關(guān)系,在視圖元素繪制時(shí)創(chuàng)建出Painter類的實(shí)例,其中有多態(tài)機(jī)制的作用,下面具體了解一下這個(gè)創(chuàng)建過(guò)程。

 

TcxCustomGridCellPainter派生的一組類中,只有它自己有構(gòu)造函數(shù):

constructor TcxCustomGridCellPainter.Create(ACanvas: TcxCanvas;

 AViewInfo: TcxCustomGridCellViewInfo);

begin

 inherited Create;

 FCanvas := ACanvas;

 FViewInfo := AViewInfo;

end;

那么當(dāng)需要調(diào)用其派生類方法時(shí),是如何構(gòu)造出派生類實(shí)例的?Painter類實(shí)例都是在ViewInfo類的方法中創(chuàng)建出來(lái)的,代碼如下:

GetPainterClass.Create()

 

TcxGridDataRowViewInfo = class(TcxCustomGridRowViewInfo)

protected:

function GetPainterClass: TcxCustomGridCellPainterClass; override;

 

 

function TcxGridDataRowViewInfo.GetPainterClass: TcxCustomGridCellPainterClass;

begin

 Result := TcxGridDataRowPainter;

end;

 

這樣,創(chuàng)建哪個(gè)Painter類的實(shí)例決定于ViewInfo類的實(shí)例,通過(guò)某個(gè)ViewInfo實(shí)例調(diào)用GetPainterClass.Create(),就返回對(duì)應(yīng)Painter類的實(shí)例。

 

ViewInfo類進(jìn)行繪制時(shí),會(huì)調(diào)用Painter類的繪制方法;Painter類進(jìn)行繪制時(shí),也會(huì)調(diào)用ViewInfo類的繪制方法,比如:

procedure TcxCustomGridRecordsPainter.Paint;

var

 I: Integer;

begin

 with FViewInfo do

    for I := 0 to Count - 1 do

      with Items[I] do

        if Calculated then Paint;

end;

跟蹤繪制過(guò)程可以看到,正是在兩種調(diào)用的交替中繪出了視圖的每個(gè)元素,最終在顯示設(shè)備上的繪制是由Painter類實(shí)現(xiàn)的,而ViewInfo的繪制方法會(huì)起到調(diào)度的作用,比如把數(shù)據(jù)行的繪制分解成各數(shù)據(jù)單元的繪制。

我們已經(jīng)了解到,前一種調(diào)用是通過(guò)構(gòu)造局部實(shí)例,那么后一種呢?

TcxCustomGridCellPainter中定義了FViewInfo私有成員,并將其定義為保護(hù)屬性

 TcxCustomGridCellPainter = class

 private

    FCanvas: TcxCanvas;

FViewInfo: TcxCustomGridCellViewInfo;

 protected

property ViewInfo: TcxCustomGridCellViewInfo read FViewInfo;

其派生類繼承了該屬性,并將其重新定義

 TcxGridDataRowPainter = class(TcxCustomGridRowPainter)

 private

    function GetViewInfo: TcxGridDataRowViewInfo;

 protected

    property ViewInfo: TcxGridDataRowViewInfo read GetViewInfo;

 

function TcxGridDataRowPainter.GetViewInfo: TcxGridDataRowViewInfo;

begin

 Result := TcxGridDataRowViewInfo(inherited ViewInfo);

end;

 

ViewStyles

 

視圖風(fēng)格是視圖的屬性:

 TcxCustomGridView = class(TcxControlChildComponent, IcxStoredObject, IcxStoredParent,

    IcxGridViewLayoutEditorSupport, IcxGridViewDesignerMenu)

 private

FStyles: TcxCustomGridStyles;

 Protected:

property Styles: TcxCustomGridStyles read FStyles write SetStyles;

 

procedure TcxCustomGridView.SetStyles(Value: TcxCustomGridStyles);

begin

 FStyles.Assign(Value);

end;

 

特定的視圖使用特定的視圖風(fēng)格,以表視圖為例,可以看到兩者是如何對(duì)應(yīng)的。

TcxGridTableView = class(TcxCustomGridTableView)

Published:

property Styles: TcxGridTableViewStyles read GetStyles write SetStyles;

 

function TcxGridTableView.GetStyles: TcxGridTableViewStyles;

begin

 Result := TcxGridTableViewStyles(inherited Styles);

end;

 

procedure TcxGridTableView.SetStyles(Value: TcxGridTableViewStyles);

begin

 inherited Styles := Value;

end;

 

ViewLookAndFeelPainter

 

ViewInfoGridStylesGridView類都有LookAndFeelPainter屬性,因?yàn)榉纸M行風(fēng)格設(shè)置是作用于整個(gè)視圖的,所以該屬性真正定義是在GridView中,GridStylesViewInfo只是返回一個(gè)引用,提供該屬性是為了方便,比如ViewInfo進(jìn)行繪制時(shí),要用到風(fēng)格的設(shè)置。

function TcxCustomGridView.GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;

begin

 if Control = nil then

    Result := TcxStandardLookAndFeelPainter

 else

    Result := TcxCustomGrid(Control).LookAndFeelPainter;

end;

 

function TcxCustomGridStyles.GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;

begin

 Result := GridView.LookAndFeelPainter;

end;

 

/* TcxGridViewHandler是視圖ViewInfo的祖先類。*/

function TcxGridViewHandler.GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;

begin

 Result := FGridView.LookAndFeelPainter;

end;

 

/* TcxCustomGridViewCellViewInfo是視圖元素ViewInfo的祖先類,FGridViewInfoGridViewInfo屬性的成員變量。*/

function TcxCustomGridViewCellViewInfo.GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;

begin

 Result := FGridViewInfo.LookAndFeelPainter;

end;

posted on 2007-05-15 18:05 依舊的博客 閱讀(1377) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 編程

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美bbbxxxxx| 91久久黄色| 亚洲人成欧美中文字幕| 国产精品主播| 亚洲国产一区视频| 国模精品娜娜一二三区| 一区二区三区欧美激情| 亚洲视频中文字幕| 在线欧美电影| 午夜日韩在线| 午夜在线观看免费一区| 99视频精品免费观看| 久久男人资源视频| 久久久久九九视频| 国产精品一区亚洲| 99国产精品自拍| 亚洲乱亚洲高清| 久久亚洲欧洲| 美日韩精品免费观看视频| 国产视频久久久久| 亚洲男人的天堂在线aⅴ视频| 亚洲视频一区在线观看| 欧美激情一区在线观看| 亚洲国产精品电影| 亚洲精品无人区| 欧美成人在线免费观看| 亚洲高清久久久| 亚洲国产一区二区三区在线播 | 午夜伦欧美伦电影理论片| 中文在线资源观看视频网站免费不卡| 欧美va亚洲va国产综合| 亚洲高清不卡在线| 亚洲欧洲精品一区二区三区| 久久艳片www.17c.com| 欧美国产日韩亚洲一区| 亚洲欧洲中文日韩久久av乱码| 久久免费精品视频| 亚洲成色777777在线观看影院| 亚洲高清不卡一区| 欧美电影美腿模特1979在线看| 亚洲国产精品久久久| 亚洲精品一区二区三| 欧美久久久久久| 亚洲一区bb| 欧美一区二区三区在| 好看的日韩视频| 久热爱精品视频线路一| 亚洲丰满在线| 亚洲综合电影一区二区三区| 国产欧美一区二区三区另类精品| 性视频1819p久久| 欧美成人亚洲成人日韩成人| 99国产精品久久久久久久成人热 | 国产精品久久久久久模特| 亚洲一区二区综合| 麻豆国产精品va在线观看不卡| 亚洲片在线观看| 日韩午夜在线视频| 久久久久久国产精品一区| 欧美激情亚洲| 久久资源av| 麻豆国产va免费精品高清在线| 日韩亚洲精品视频| 国产一区二区精品| 欧美精品xxxxbbbb| 午夜精品视频| 91久久黄色| 久久国产欧美日韩精品| 亚洲日本理论电影| 国产欧美午夜| 欧美乱妇高清无乱码| 欧美专区日韩专区| 亚洲精品孕妇| 欧美a级一区| 羞羞漫画18久久大片| 亚洲人永久免费| 国产亚洲一区二区精品| 欧美日韩国产a| 免费91麻豆精品国产自产在线观看| 亚洲精品国产品国语在线app | 日韩香蕉视频| 极品少妇一区二区| 国产精品久久久久久五月尺| 欧美大片18| 久久9热精品视频| 亚洲香蕉网站| 亚洲精品在线免费观看视频| 免费欧美在线| 久久国产精品久久久久久电车| 一区二区三欧美| 91久久精品日日躁夜夜躁国产| 国产一区二区三区久久悠悠色av| 欧美日韩国产免费观看| 美女性感视频久久久| 久久本道综合色狠狠五月| 99国产精品99久久久久久| 亚洲国产日本| 欧美第十八页| 欧美国产精品日韩| 六月婷婷一区| 久热精品视频在线观看| 久久激情综合网| 欧美亚洲一区二区在线| 午夜精品国产精品大乳美女| 亚洲视频一区| 一区二区三区日韩精品视频| 亚洲精品视频在线观看免费| 亚洲区一区二区三区| 亚洲黄色天堂| 亚洲精品欧美精品| 亚洲精品美女在线| 日韩亚洲欧美高清| 一区二区三区|亚洲午夜| 亚洲精品国产拍免费91在线| 亚洲日韩欧美视频一区| 亚洲精品欧美极品| 一区二区国产日产| 亚洲性线免费观看视频成熟| 亚洲一区在线播放| 西西人体一区二区| 久久av一区二区三区漫画| 久久精品99| 免费影视亚洲| 亚洲高清视频的网址| 日韩视频在线观看一区二区| 一区二区日韩精品| 亚欧成人在线| 久久综合久久久| 欧美日韩国产美女| 国产欧美一区二区三区在线看蜜臀 | 激情成人综合网| 亚洲国产精品久久人人爱蜜臀| 亚洲国产专区| 亚洲午夜精品| 久久国产精品久久国产精品| 免费欧美网站| 9i看片成人免费高清| 亚洲欧美偷拍卡通变态| 久久久999精品视频| 欧美巨乳在线观看| 国产欧美日韩免费看aⅴ视频| 国内精品久久久久影院色| 亚洲激情视频在线播放| 亚洲一区二区三区色| 久久久噜久噜久久综合| 亚洲国产精品成人| 亚洲欧美www| 老司机午夜精品视频| 欧美日韩国产一级片| 国产一区91| 99视频一区二区三区| 久久精品一区二区三区中文字幕 | 中文网丁香综合网| 久久成人这里只有精品| 欧美韩国一区| 国产午夜精品理论片a级探花| 亚洲国产欧美一区二区三区同亚洲| 亚洲午夜精品视频| 免播放器亚洲一区| 亚洲一区二区三区在线观看视频| 另类欧美日韩国产在线| 国产精品日日摸夜夜摸av| 亚洲国产精品久久人人爱蜜臀| 亚洲欧美一区在线| 亚洲第一精品在线| 欧美在线一二三区| 欧美性开放视频| 亚洲精选国产| 久久婷婷综合激情| 亚洲网站啪啪| 欧美日本不卡| 亚洲经典自拍| 久久综合精品国产一区二区三区| 亚洲私人影吧| 欧美日韩一卡二卡| 亚洲精品社区| 欧美成人精品h版在线观看| 亚洲欧美在线磁力| 欧美亚洲成人免费| 一本色道久久综合亚洲精品小说 | 亚洲国产欧美在线| 久久久久久伊人| 亚洲在线观看视频| 国产精品扒开腿爽爽爽视频| 亚洲精品综合精品自拍| 免费高清在线一区| 久久婷婷一区| 在线观看一区| 老鸭窝毛片一区二区三区| 欧美在线看片| 国产亚洲一区在线播放| 欧美一区二区三区精品| 亚洲视频一区在线观看| 欧美性做爰毛片| 亚洲综合第一页| 中文一区在线| 国产精品一二一区| 久久成人在线| 欧美一区二区免费| 狠狠色香婷婷久久亚洲精品|