研究一下!
我差不多把Tchart控件的每个设置按钮都研究过!
我的图形是要实时的生成不过数据先取进数据库中,要自己画对数实在是麻烦!
下面是我的一段代码(都是改自那个例子):
void __fastcall FormCreate(TObject *Sender);
void __fastcall BBtnZoomInClick(TObject *Sender);
void __fastcall BBtnZoomOutClick(TObject *Sender);
void __fastcall CheckBox3DClick(TObject *Sender);
void __fastcall BitBtnSaveClick(TObject *Sender);
void __fastcall BBtnPrintClick(TObject *Sender);
void __fastcall ADOQuery1AfterOpen(TDataSet *DataSet);
void __fastcall BitBtnUnZoomClick(TObject *Sender);
void __fastcall SBLeftClick(TObject *Sender);
void __fastcall SBRightClick(TObject *Sender);
void __fastcall SBUpClick(TObject *Sender);
void __fastcall SBDownClick(TObject *Sender);
void __fastcall ScrollBar1Change(TObject *Sender);
void __fastcall ScrollBar2Change(TObject *Sender);
void __fastcall ComBFirstChange(TObject *Sender);
void __fastcall ComBLastChange(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Chart1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
void __fastcall Series1AfterDrawValues(TObject *Sender);
void __fastcall Chart1Click(TObject *Sender);
private: // User declarations
int OldX;
int OldY;
double tmpX,tmpY;
AnsiString SQLstr, QueryWhere;
int Low, Hight;
TColor CrossHairColor;
TPenStyle CrossHairStyle;
int OldFirstPoint, OldLastPoint;
void ScrollAxis(TChartAxis* Axis, const double Percent);
void HorizScroll(const double Percent);
void VertScroll(const double Percent);
void ExeSQLStr(int start, int end);
void DrawCross(int ax, int ay);
bool SetValued = false;
//---------------------------------------------------------------------------
__fastcall TChart1Form::TChart1Form(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TChart1Form::ScrollAxis(TChartAxis* Axis, const double Percent)
{
double Amount = -((Axis->Maximum-Axis->Minimum)/(100.0/Percent));
Axis->SetMinMax(Axis->Minimum-Amount,Axis->Maximum-Amount);
}
//---------------------------------------------------------------------------
void TChart1Form::HorizScroll(const double Percent)
{
ScrollAxis(Chart1->TopAxis,Percent);
ScrollAxis(Chart1->BottomAxis,Percent);
}
//---------------------------------------------------------------------------
void TChart1Form::VertScroll(const double Percent)
{
ScrollAxis(Chart1->LeftAxis,Percent);
ScrollAxis(Chart1->RightAxis,Percent);
}
//---------------------------------------------------------------------------
void TChart1Form::ExeSQLStr(int start, int end)
{
QueryWhere = " WHERE No >= " + IntToStr(start) + " AND No <= " + IntToStr(end);
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
//QueryWhere = " WHERE No >= " + IntToStr(start) + " AND No <= " + IntToStr(end);
ADOQuery1->SQL->Add(SQLstr);
ADOQuery1->SQL->Add(QueryWhere);
ADOQuery1->Open();
//ADOQuery1->Parameters->Items[0]->Value = start;
//ADOQuery1->Parameters->Items[1]->Value = end;
ADOQuery1->Open();
}
//---------------------------------------------------------------------------
void TChart1Form::DrawCross(int ax, int ay)//画线
{
TColor tmp;
tmp = Chart1->BackColor;
if (tmp == clTeeColor)
tmp = clBtnFace;
Chart1->Canvas->Pen->Color = (TColor)(CrossHairColor ^ ColorToRGB(tmp));
Chart1->Canvas->Pen->Style = CrossHairStyle;
Chart1->Canvas->Pen->Mode = pmXor;
Chart1->Canvas->Pen->Width = 1;
Chart1->Canvas->MoveTo(ax,Chart1->ChartRect.Top-Chart1->Height3D);
Chart1->Canvas->LineTo(ax,Chart1->ChartRect.Bottom-Chart1->Height3D);
Chart1->Canvas->MoveTo(Chart1->ChartRect.Left+Chart1->Width3D,ay);
Chart1->Canvas->LineTo(Chart1->ChartRect.Right+Chart1->Width3D,ay);
/*if ((ax > WhichChart->ChartRect.Left+WhichChart->Width3D) && (ay >WhichChart->ChartRect.Top-WhichChart->Height3D))
{
WhichChart->Canvas->MoveTo(WhichChart->ChartRect.Right+WhichChart->Width3D,WhichChart->ChartRect.Bottom-WhichChart->Height3D);
WhichChart->Canvas->LineTo(ax,ay);
} */
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::FormCreate(TObject *Sender)
{
Form1->lgQQ_T->RecordCount;
Chart1->AnimatedZoom = true;
Chart1->AnimatedZoomSteps = 5;
ScrollBar1->Enabled = false;
ScrollBar2->Enabled = false;
OldX = -1;
CrossHairColor = clRed;
CrossHairStyle = psSolid;
Chart1->Cursor = crCross;
AnsiString TableName = Form1->lgQQ_T->TableName;
Low = 1;
Hight = Form1->lgQQ_T->RecordCount;
SQLstr += " SELECT No AS ' 编号', sqrtT AS ' T 的开方 ', log10QQ AS ' lg[Q∞-Q(t)] '";
SQLstr += " FROM " + TableName;
QueryWhere = " WHERE No >= " + IntToStr(Low) + " AND No <= " + IntToStr(Hight);
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQLstr);
ADOQuery1->SQL->Add(QueryWhere);
ADOQuery1->Open();
}
//-------------------------------------放大
void __fastcall TChart1Form::BBtnZoomInClick(TObject *Sender)
{
Chart1->ZoomPercent(105);
}
//---------------------------------------------------------缩小
void __fastcall TChart1Form::BBtnZoomOutClick(TObject *Sender)
{
Chart1->ZoomPercent(95);
}
//-------------------------------------------------三维
void __fastcall TChart1Form::CheckBox3DClick(TObject *Sender)
{
Chart1->View3D = CheckBox3D->Checked;
if (CheckBox3D->Checked)
{
ScrollBar1->Enabled = true;
ScrollBar2->Enabled = true;
if (dynamic_cast<TPieSeries*>(Chart1->Series[0]))
{
ScrollBar1->Position = Chart1->View3DOptions->Elevation;
}
else
{
ScrollBar1->Position = Chart1->View3DOptions->Rotation;
}
ScrollBar2->Position = Chart1->View3DOptions->Elevation;
}
else
{
ScrollBar1->Enabled = false;
ScrollBar2->Enabled = false;
}
}
//-----------------------------------------------保存图形到文件
void __fastcall TChart1Form::BitBtnSaveClick(TObject *Sender)
{
if (SavePictureDialog1->Execute())
{
Chart1->SaveToMetafile(SavePictureDialog1->FileName);
}
}
//------------------------------打印
void __fastcall TChart1Form::BBtnPrintClick(TObject *Sender)
{
int h, w;
Screen->Cursor = crHourGlass;
try
{
Printer()->BeginDoc();
try
{
Printer()->Canvas->Font->Name = "Arial";
Printer()->Canvas->Font->Size = 10;
Printer()->Canvas->Font->Style.Clear();
//Printer()->Canvas->TextOut(0,0,Edit1->Text);
h = Printer()->PageHeight; // <-- get page height
w = Printer()->PageWidth; // <-- get page width
// And now print the chart component
Chart1->PrintPartial( Rect(
10, // <-- 20% left margin
h / 3 , // <-- 33% top margin
w - 10, // <-- 20% right margin
h - (h / 5))); // <-- 20% bottom margin
Printer()->EndDoc(); // <-- end job and print !!
}
catch (...)
{
// just in case an error happens
Printer()->Abort();
Printer()->EndDoc();
throw; // <-- rethrow the exception !!!
}
}
__finally
{
Screen->Cursor = crDefault; // <-- restore cursor
}
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::ADOQuery1AfterOpen(TDataSet *DataSet)
{
if (!SetValued)
{
for (int i = 1; i <= ADOQuery1->RecordCount; i++)
{
ComBFirst->Items->Add(IntToStr(i));
ComBLast->Items->Add(IntToStr(i));
}
ComBFirst->ItemIndex = 0;
OldFirstPoint = ComBFirst->ItemIndex;
ComBLast->ItemIndex = ADOQuery1->RecordCount - 1 ;
OldLastPoint = ComBLast->ItemIndex;
SetValued = true;
}
}
//---------------------------重置缩放
void __fastcall TChart1Form::BitBtnUnZoomClick(TObject *Sender)
{
Chart1->UndoZoom();
}
//---------------------------------左右上下移动
void __fastcall TChart1Form::SBLeftClick(TObject *Sender)
{
HorizScroll(5);
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::SBRightClick(TObject *Sender)
{
HorizScroll(-5);
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::SBUpClick(TObject *Sender)
{
VertScroll(-5);
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::SBDownClick(TObject *Sender)
{
VertScroll(5);
}
//----------------------------------旋转三维图
void __fastcall TChart1Form::ScrollBar1Change(TObject *Sender)
{
if (CheckBox3D->Checked && ScrollBar1->Enabled)
{
Chart1->View3DOptions->Orthogonal = false;
}
if (dynamic_cast<TPieSeries*>(Chart1->Series[0]))
Chart1->View3DOptions->Elevation = ScrollBar1->Position;
else
Chart1->View3DOptions->Rotation = ScrollBar1->Position;
}
//----------------------------------------------------
void __fastcall TChart1Form::ScrollBar2Change(TObject *Sender)
{
if (CheckBox3D->Checked && ScrollBar2->Enabled)
{
Chart1->View3DOptions->Orthogonal = false;
Chart1->View3DOptions->Elevation = ScrollBar2->Position;
}
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::ComBFirstChange(TObject *Sender)
{
if (ComBFirst->ItemIndex < ComBLast->ItemIndex)
{
CheckBox3D->Checked = false;
Chart1->View3D = false;
Chart1->UndoZoom();
OldFirstPoint = ComBFirst->ItemIndex;
ExeSQLStr(ComBFirst->ItemIndex + 1, ComBLast->ItemIndex + 1);
}
else
{
MessageDlg("开始点大于或等于结束点,请重新选择!",
mtInformation, TMsgDlgButtons() << mbOK, 0);
ComBFirst->ItemIndex = OldFirstPoint;
}
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::ComBLastChange(TObject *Sender)
{
if (ComBFirst->ItemIndex < ComBLast->ItemIndex)
{
CheckBox3D->Checked = false;
Chart1->View3D = false;
Chart1->UndoZoom();
OldLastPoint = ComBLast->ItemIndex;
ExeSQLStr(ComBFirst->ItemIndex + 1, ComBLast->ItemIndex + 1);
}
else
{
MessageDlg("开始点大于或等于结束点,请重新选择!" ,
mtInformation, TMsgDlgButtons() << mbOK, 0);
ComBLast->ItemIndex = OldLastPoint;
}
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::FormClose(TObject *Sender,
TCloseAction &Action)
{
SetValued = false;
}
//-------------------------------画线
void __fastcall TChart1Form::Chart1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (CheckBox1->Checked)
{
if (OldX != -1)
{
DrawCross(OldX,OldY); // draw old crosshair
OldX = -1;
}
if (PtInRect((RECT*)&Chart1->ChartRect, Point(X-Chart1->Width3D,Y+Chart1->Height3D)))
{
DrawCross(X,Y); // draw crosshair at current position
// store old position
OldX = X;
OldY = Y;
// set label text
Series1->GetCursorValues(tmpX,tmpY); // <-- get values under mouse cursor
Label7->Caption = Series1->GetVertAxis->LabelValue(tmpX)
+ " " + Series1->GetHorizAxis->LabelValue(tmpY);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TChart1Form::Series1AfterDrawValues(TObject *Sender)
{
OldX = -1; // Reset old mouse position
}
//------------------------定点
void __fastcall TChart1Form::Chart1Click(TObject *Sender)
{
if (CheckBox1->Checked)
{
CheckBox1->Checked = false;
EditX1->Text = FloatToStr(tmpX);
EditY1->Text = FloatToStr(tmpY);
}
}
//---------------------------------------------------------------------------
相关推荐
TeeChart5的下载安装注册使用一应俱全(VS画表画图)
目录下载安装注册使用 第一次写博客,力求详细,希望与各位共同学习共同进步。 下载 网上有免费的,不过很多有毒,需要一双火眼金睛,如果您嫌麻烦,不妨戳这里下载,赏小弟一点积分哈哈 安装 解压之后点击下图所示的exe文件,输入序列号和密码(我提供的压缩包里) 之后会出现如下结果这就已经获得完整控件了,下面进行注册。 注册 我们将安装步骤里第二张图里的TeeChart5.ocx粘贴到C:\Windows...
Teechart图表应用技术详解—第三章之图表的放大和滚动
TeeChart for .NET中文版让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。TeeChart for .NET中文版具有易上手,使用方便,稳定性好,性价比高,价格优惠等优势,并且针对Web应用提供无限制服务器分发授权方式,非常有利于产品集成。 图表的放大和滚动 图表的放大和滚动就是将坐标设置为希望的刻度。当滚动和放大后,序列上的所有点将在新的位置重绘。注意:TPieSeries序列不支持放大与滚动操作。 放大(Zoom) 图表放大通常是由用户与鼠标拖拉交互实现的。图表的
TeeChart控件在Visual C++中的应用与实战详解
TeeChart是一款由Steema Software开发的高性能图表控件,支持多种开发平台,其在VC++环境中的应用尤为广泛。控件提供丰富的图表类型(如折线、柱状、饼图等),具备抗锯齿渲染、多图层管理、事件驱动机制等高级图形能力,显著优于传统GDI绘图方式。在Visual Studio中集成TeeChart Pro ActiveX版本时,需先通过命令注册OCX文件,确保COM组件注册成功。随后在MFC项目中通过资源编辑器拖放ActiveX控件,并使用完成控件ID与CTchart。
图表控件TeeChart干货分享(绘制2D、3D实时曲线---VC++示例源代码--网络首发)
最近接手了一个项目,其中涉及到MFC和实时曲线显示的问题,由于我之前从未接触过此类技术,现学现搞,把其间用到的觉得对初学者有用的东西,总结一下。 尤其是关于TeeChart控件部分,网上资料零碎,且很多不全面,代码难以使用。我苦寻数周在外国一些网站上寻到了一些有用的信息,把相关的可运行的代码示例贴在文中,希望能帮到后来者。 MFC部分: 一、 分割窗体 新建一个单文档的MFC
Teechart 控件安装与应用全面指南
TeeChart 是一款功能强大的图表绘制控件,广泛应用于数据可视化领域。它提供了丰富多样的图表类型,以及简便易用的接口,使得开发者能够在多种编程环境中快速实现复杂的数据展示。无论你是初学者还是资深开发人员,TeeChart都能帮助你以直观的方式呈现数据,从而增强应用程序的功能性和用户交互体验。TeeChart库支持多种常见和专业的图表类型,帮助开发者以视觉化的方式表达数据。这些图表类型包括但不限于:条形图(Bar Charts):条形图是显示分类数据系列之间比较的常用图表。
teechart 源代码
teechart, 源代码对学习teechart图标很有作用的
VS2013 简单MFC应用以及teechart使用方法
VS2013创建MFC应用程序并使用teechart绘制曲线,适合新手,详细得已经不能再详细了吧。
VC++6.0 使用TeeChart v8.0 绘制多条曲线及圆滑处理.
VC++6.0 使用TeeChart v8.0 绘制多条曲线及圆滑处理. 博客地址http://blog.youkuaiyun.com/zdw86/article/details/71082022
VS2013 TeeChart_v5 MFC C++ 使用手册干货(一)TeeChart的导入与第一个TeeChart图像
奥术大师多
TeeChart ProFS 2023.38 源码版, 本人一直在用,稳定可靠
TeeChart ProFS 2023.38 源码版, 本人一直在用,稳定可靠。
亲测可用 TeeChartpro Source fo delphixe10.4.2 源码与教程demo详解.zip
亲测 delphixe10.4、10.2,在win32下和安卓32和安卓64下可用,其他版本没测,有安装手册,教程详解,以及详解demo的源码。 TeeChartpro拥有数百种2D/3D图形样式 TeeChart Pro VCL/FMX是一款主流的图表制作工具。提供了数百种用于可视化的2D、3D图形样式、56种数学、统计和金融函数,以及不限数量的坐标轴和30种调色板组件。
VS2013 TeeChart_v5 MFC C++ 使用手册干货(三)TeeChart ColorGrid类的简单使用
前面几步安装上面两节进行 1.注册TeeChart5 2.VS添加TeeChart控件并添加变量 3.添加所需类 ColorGrid绘制示例:此方法只适用于TeeChart_v5 VS2010, 在C++ 11.0 之后的版本需要对函数参数做以调整 void CMFCDemoDlg::CreateColorGrid() { //image colorgrid COleSafeArr...
vs c++安装图表插件teechart8操作步骤及64组件
vs c++安装图表插件teechart8操作步骤及64组件vs c++安装图表插件teechart8操作步骤及64组件
VS2013 TeeChart_v5 MFC C++ 使用手册干货(二)TeeChart 实时数据图表
在MFC中,要想用TeeChart实现对数据的实时可视化,则需要借助c++中的定时器。关于定时器的具体内容可以在鸡啄米的MFC教程中查看(感谢大神,同时鸡啄米的MFC入门教程也非常棒!我也是看他入得门): 鸡啄米MFC常用类:c++定时器 那么下面直接上东西了: 首先当然是按照上一篇文章中的方法添加TeeChart以及引入相关类,然后需要两部来实现数据显示的实时化。 一、为MFC添加定时器消息处...
c#使用teechart的demo
c#使用teechart的demo
ccproxy 6.61 注册机(纯绿/傻瓜/真正去除线程限制)
导读: 软件介绍 1、 CCPROXY 6.61 注册机(纯绿/傻瓜/真正去除线程限制) ***前言,这次的升级官方改动不大,据说只是为了不被某些软件当病毒*** 附件包中解压即免安装版,CcREGTOOLFF.exe为注册机。 本人继续向大家隆重推出《CCPROXY6.61哎呀……破解版》 还是那个提示: 在此之前,本人还是那句老话想提示大家,CCPROXY是
VS + MFC + Teechart 离线安装及输出三维曲线
记录了 VS 、MFC组件和TeeChart 8插件的离线安装流程,以及利用 MFC 模块和 TeeChart 插件制作GUI界面并输出三维曲线的方法。
Zoom AI 技术架构研究:联合式方法与多模态集成
通过 Zoom AI 开放平台,企业可以自定义 AI 模块 (如法律合规审查、客户反馈分析),扩展应用场景。这种开放平台策略使企业能够根据自身需求定制 AI 功能,满足特定业务需求。
8620



被折叠的 条评论
为什么被折叠?



