⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch20.htm

📁 好书《C++ Builder高级编程技术》
💻 HTM
📖 第 1 页 / 共 5 页
字号:


private:

  TListHierarchy *Hierarchy;

  Currency FCost;

  TDateTime FTimeCreated;

  AnsiString FDescription;

  void __fastcall SetTimeCreated(AnsiString S);

  AnsiString __fastcall GetTimeCreated();

protected:

  virtual void __fastcall 
Paint(void);

public:

  __fastcall virtual TWidget(TComponent *AOwner): TCustomControl(AOwner)

    { Hierarchy = new TListHierarchy(); Width = 25; Height = 25; }

  __fastcall virtual TWidget(TComponent *AOwner, int ACol, int ARow);

  __fastcall 
virtual ~TWidget() { delete Hierarchy; }

  virtual AnsiString GetName() { return "Widgets"; }

  TStringList *GetHierarchy() { return Hierarchy->GetHierarchy(this); }

  void __fastcall WidgetMouseDown(TObject *Sender, TMouseButton 
Button,

    TShiftState Shift, int X, int Y);

__published:

  __property Currency Cost={read=FCost, write=FCost};

  __property AnsiString TimeCreated={read=GetTimeCreated, write=SetTimeCreated};

  __property AnsiString 
Description={read=FDescription, write=FDescription};

};

#endif



</FONT></PRE>
<P><A NAME="Heading17"></A><FONT COLOR="#000077"><B>Listing 20.3. The main file for
the Widgets units.</B></FONT></P>
<PRE><FONT 
COLOR="#0066FF">///////////////////////////////////////

// Widgets.cpp

// Learning how to use objects

// Copyright (c) 1997 by Charlie Calvert

//

#include &lt;vcl\vcl.h&gt;

#include &lt;conio.h&gt;

#pragma hdrstop

#include 
&quot;widgets.h&quot;

#pragma link &quot;myobject.obj&quot;

void WriteWidgetToStream(AnsiString StreamName, TWidget *Widget)

{

  TFileStream *Stream = new TFileStream(StreamName, fmCreate | fmOpenRead);

  Stream-&gt;WriteComponent(Widget);

  
delete Stream;

}

TWidget *ReadWidgetFromStream(AnsiString StreamName)

{

  Widgets::Register();

  TFileStream *Stream = new TFileStream(StreamName, fmOpenRead);

  TWidget *Widget = (TWidget *)Stream-&gt;ReadComponent(NULL);

  delete Stream;

  
return Widget;

}

__fastcall TWidget::TWidget(TComponent *AOwner, int ACol, int ARow)

  : TCustomControl(AOwner)

{

  Hierarchy = new TListHierarchy();

  Left = ACol;

  Top = ARow;

  Width = 25;

  Height = 25;

  OnMouseDown = WidgetMouseDown;


}

AnsiString __fastcall TWidget::GetTimeCreated()

{

  return FTimeCreated.DateTimeString();

}

void __fastcall TWidget::SetTimeCreated(AnsiString S)

{

  FTimeCreated = TDateTime(S);

}

void__fastcall TWidget::Paint()

{

  
Canvas-&gt;Brush-&gt;Color = clBlue;

  Canvas-&gt;Rectangle(0, 0, ClientWidth, ClientHeight);

  Canvas-&gt;Brush-&gt;Color = clYellow;

  Canvas-&gt;Ellipse(0, 0, ClientWidth, ClientHeight);

}

void __fastcall TWidget::WidgetMouseDown(TObject 
*Sender, TMouseButton Button,

    TShiftState Shift, int X, int Y)

{

  ShowMessage(Format(&quot;%m&quot;, OPENARRAY(TVarRec, (FCost))));

}

namespace Widgets

{

  void __fastcall Register()

  {

    TComponentClass classes[1] = 
{__classid(TWidget)};

    RegisterClasses(classes, 0);

  }

}



</FONT></PRE>
<P><A NAME="Heading18"></A><FONT COLOR="#000077"><B>Listing 20.4. The header file
for MyObjects with the new TListHiearchy object added to it.</B></FONT></P>
<PRE><FONT 
COLOR="#0066FF">///////////////////////////////////////

// MyObject.h

// Learning how to use objects

// Copyright (c) 1997 by Charlie Calvert

//

#ifndef MyObjectH

#define MyObjectH

#include &lt;conio.h&gt;

#include &lt;vcl\stdctrls.hpp&gt;




class TMyObject :public TObject

{

protected:

  virtual void PrintString(AnsiString S);

public:

  TMyObject() : TObject()  {}

  void ShowHierarchy(TObject *AnObject);

};



class TListHierarchy: public TMyObject

{

private:

  TStringList 
*FList;

protected:

  virtual void PrintString(AnsiString S)

    { FList-&gt;Add(S); }

public:

  TListHierarchy() { FList = new TStringList(); }

  __fastcall virtual ~TListHierarchy() { delete FList; }

  TStringList *GetHierarchy(TObject 
*AnObject)

    { ShowHierarchy(AnObject); return FList; }

};

class __declspec(delphiclass) TVCLHierarchy;

class THierarchy: public TMyObject

{

  friend TVCLHierarchy;



  int FTextColor;

  int FBackColor;

protected:

  virtual void 
SetTextColor(int Color)

    { FTextColor = Color; textcolor(FTextColor); }

  virtual void SetBackColor(int Color)

    { FBackColor = Color; textbackground(FBackColor); }

public:

  THierarchy() : TMyObject() {}

  virtual void 
PrintString(AnsiString S);

  virtual void ClrScr();

  __property int TextColor={read=FTextColor,write=SetTextColor};

  __property int BackColor={read=FBackColor,write=SetBackColor};

};



class TVCLHierarchy : public THierarchy

{

  TMemo *FMemo;


protected:

  virtual void SetTextColor(int Color)

    { FTextColor = Color; FMemo-&gt;Font-&gt;Color = TColor(FTextColor); }

  virtual void SetBackColor(int Color)

    { FBackColor = Color; FMemo-&gt;Color = TColor(FBackColor); }

public:

  
TVCLHierarchy(TMemo *AMemo): THierarchy() { FMemo = AMemo; }

  virtual void PrintString(AnsiString S)

    { FMemo-&gt;Lines-&gt;Add(S); }

  virtual void ClrScr() { FMemo-&gt;Clear(); }

};

#endif



</FONT></PRE>
<P><A NAME="Heading19"></A><FONT 
COLOR="#000077"><B>Listing 20.5. The main file of
the MyObject module.</B></FONT></P>
<PRE><FONT COLOR="#0066FF">///////////////////////////////////////

// MyObject.cpp

// Learning how to use objects

// Copyright (c) 1997 by Charlie Calvert

//


#include &lt;vcl\vcl.h&gt;

#include &lt;conio.h&gt;

#pragma hdrstop

#include &quot;myobject.h&quot;

void TMyObject::PrintString(AnsiString S)

{

  printf(&quot;%s\n&quot;, S.c_str());

}

void TMyObject::ShowHierarchy(TObject *AnObject)

{

  
TClass AClass;

  AnsiString AClassName = AnsiString(AnObject-&gt;ClassName()).c_str();

  PrintString(AClassName);

  AClass = AnObject-&gt;ClassParent();

  while (True)

  {

    AClassName = AnsiString(AClass-&gt;ClassName());

    
PrintString(AClassName);

    if (AClassName == &quot;TObject&quot;)

      break;

    AClass = AClass-&gt;ClassParent();

  }

}

void THierarchy::PrintString(AnsiString S)

{

  char Temp[250];

  sprintf(Temp, &quot;%s\n\r&quot;, S.c_str());

  
cputs(Temp);

}

void THierarchy::ClrScr()

{

  clrscr();

}

</FONT></PRE>
<P>The functionality associated with this program is still severely limited. An object
of type <TT>TWidget</TT> is created, and its hierarchy is shown. The program assigns
a 
price to the widget, and a bare representation of a widget is displayed on the
screen. The program also saves and loads the <TT>Widget</TT> object to disk.</P>
<P>The output from this program is shown in Figure 20.2.<BR>
<BR>
<A 
NAME="Heading20"></A><A HREF="20ebu02.jpg" tppabs="http://pbs.mcp.com/ebooks/0672310228/art/20/20ebu02.jpg">FIGURE 20.2.</A><FONT COLOR="#000077">
</FONT><I>The output from the Widget2 program.</I></P>
<P>From a user's point of view, this is pretty tame stuff. However, the declaration
for class 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -