C++Builder的一些学习资料

当然是转载的叻...
1. C++ Builder 网上资源

C++ Builder 研究
http://www.ccrun.com/

C++ Builder
程序员
http://mybcb.diy.myrice.com/

电脑学习 C++ Builder 版块
http://www.itcomputer.com.cn/Programs/C/CB/

c++ Builder
快捷键大全:
http://www.itcomputer.com.cn/Programs/C/CB/200512/11211.html

C++ Builder IDE
使用技巧:
http://www.itcomputer.com.cn/Programs/C/CB/200512/11199.html

---------------------------------------------------------------------------

2. C++ Builder
里的快捷键

这里只是一个摘要式的说明,摘出了我认为比较有用也比较常用的,详情请参考:
http://www.itcomputer.com.cn/Programs/C/CB/200512/11211.html
说明:其中的区块操作快捷键要在选定某块之后才能起作用。

名称作用备注
系统:
F3 查找下一个
F5 设置/取消断点
F7 跟踪(进入子程序)
F8 单步(不进入子程序)
F9 运行工程,包括了编译
F11 切换到对象查看器
F12 切换设计窗体和代码窗口很有用,特别是在窗口互相覆盖的时候
Ctrl+F2 结束调试或运行
Ctrl+F5 设置Watch变量
Ctrl+F9 编译工程
Alt+F9 编译单元

代码自动完成类:
Ctrl+J 代码模板很有用,尤其是对代码规范而言
Ctrl+Space 代码补全很有用,可以省很多敲键盘和查错的时间
这个因为跟 Windows 默认的中英文输入法切换快捷键冲突,所以需要作如下设置:
1) 右键点击任务栏上的输入法图标,选择设置
2) 在跳出的窗口中点击键设置按钮;
3) 在跳出的窗口中选中中文(简体)输入法 - 输入法/非输入法切换,勾选启用按键顺序,然后点确定即可;

编辑类:
Ctrl+C 复制基本快捷键
Ctrl+V 粘贴基本快捷键
粘贴大段代码时请特别注意,很多问题来源于复制粘贴。
Ctrl+X 剪切基本快捷键
Ctrl+S 保存基本快捷键
Ctrl+Home 跳到文件开头较有用
Ctrl+End 跳到文件结尾较有用
Ctrl+Left 跳到上一个字较有用
Ctrl+Right 跳到下一个字较有用
Ctrl+Up 鼠标位置不动,滚动条上移
Ctrl+Down 鼠标位置不动,滚动条下移
Ctrl+Y 删除一行较有用,减少无谓的空行,有助于代码规范
Ctrl+Shift+Y 删除到行尾
Ctrl+T 删除到字尾
Ctrl+Shift+I 块增加一级缩进很有用,有助于代码规范
Ctrl+Shift+U 块减少一级缩进很有用,有助于代码规范
Ctrl+K+I Ctrl+Shift+I
Ctrl+K+U
Ctrl+Shift+U

---------------------------------------------------------------------------

3.
编辑器选项设置

主菜单里的“Tools” -> “Editor Options...” 或者在编辑器窗口右键点击,在弹出的菜单里选择“Properties”

---------------------------------------------------------------------------

4.
Form 不自动创建

在主菜单里的“Project” -> “Options...” -> “Forms”中,将不想要其自动启动的 Form “Auto-created forms”移到“Available forms”即可。

---------------------------------------------------------------------------

5.
关掉数据库的登录窗口

TADOConnection 控件的 LoginPrompt 属性设为 false

---------------------------------------------------------------------------

6.
设置密码框

将文本框的 PasswordChar 属性设为 * (其他字符也行,除了 #0 之外)。这里设为啥,输入密码时就显示啥。

---------------------------------------------------------------------------

7.
登录窗口先于多文档(MDI)主窗口显示

在项目源文件(Project Source)里先 new 一个登录窗口,登录成功再创建主窗口。如下所示:
Application->Initialize();
frmLogin = new TfrmLogin(Application);
frmLogin->ShowModal();
Application->CreateForm(__classid(TfrmMain), &frmMain);
Application->Run();

剩下的事情就是在 TfrmLogin 的登录成功事件中 Close() 关闭登录窗口,登录失败事件中 Application->Terminate() 关闭主程序。

---------------------------------------------------------------------------

8.
字符串下标

AnsiString, String 的下标都是从一开始的,从 1 length()

---------------------------------------------------------------------------

9.
关于 TEdit 控件的复合赋值

+= TEdit 控件的 Text 属性赋值无效。编译能通过,但赋不上值。

---------------------------------------------------------------------------

10. OnKeyPress
OnKeyDown 的区别

OnKeyPress是经过系统转换后的按键,根据ASCII码区分的,比方说你按了Shift+a,则相当于输入了A。这个函数相当于处理WM_CHAR消息。

OnKeyDown没有经过系统转换,是根据虚拟按键值来判断的,比方说你按下了Ctrl+F3,则相当于在控制字符方面输入了Control,并按下了VK_F3这个虚拟键。这个函数相当于处理WM_KEYDOWN消息。

---------------------------------------------------------------------------

11.
MDI程序不重复打开相同子窗口

1) 先写一个 openForm 函数,作用是判断将要创建的子窗口是否已存在。若已存在,则显示之,并将鼠标焦点转移到该窗口,并返回 true;若不存在,则返回 false

bool __fastcall TfrmMain::openForm(TForm *frm)
{
bool frmExist = false;

//
判断该窗口是否已经被创建。
if (frm == NULL)
{
return false;
}
for (int i = 0; i < Screen->FormCount; i++)
{
if (Screen->Forms[i]->ClassType() == frm->ClassType())
{
frmExist = true;
break;
}
}
if (false == frmExist)
{
return false;
}

//
如果此窗口已经被创建,则判断该窗口当前状态,
// 如果其当前状态为最小化状态或隐藏状态,则显示之。
if (wsMinimized == frm->WindowState)
{
ShowWindow(frm->Handle, SW_SHOWNORMAL);
}
else
{
ShowWindow(frm->Handle, SW_SHOWNA);
}
if (! frm->Visible)
{
frm->Visible = true;
}

//
将光标的焦点转移到此窗口上。
frm->BringToFront();
frm->SetFocus();

return true;
}

2)
在创建子窗口时,先调用该函数。若返回 false (即不存在),则创建之。

if (false == openForm(formName))
{
formName = new formType(Application);
}

---------------------------------------------------------------------------

12. ADOQuery
的使用

★一个例子
if (! ADOConnection1->Connected)
{
ADOConnection1->Connected = true;
}
ADOQuery1->Active = false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT * FROM table_name");
ADOQuery1->Active = true;
Edit1->Text = ADOQuery1->RecordCount;
Edit2->Text = ADOQuery1->Fields->Fields[1]->AsString;
ADOQuery1->Next();
Edit3->Text = ADOQuery1->Fields->Fields[1]->AsString;

★往数据集里添加纪录
TADOQuery1->Edit();
TADOQuery1->Append();

★从数据集里删除纪录
TADOQuery1->Edit();
TADOQuery1->Delete();

★保存修改到数据集
TADOQuery1->Edit();
TADOQuery1->Post();

★取消对数据集的修改
TADOQuery1->Edit();
TADOQuery1->Cancel();
TADOQuery1->Close();

---------------------------------------------------------------------------

13.
关闭窗口事件

OnClose 消息阶段的事件,控制关闭时执行什么动作。这里也可以控制不允许关闭窗口,方法是将 Action 参数设为 caNone
OnCloseQuery 处理阶段的事件,控制是否允许关闭窗口。如果不允许关闭,将 CanClose 参数设为 false

---------------------------------------------------------------------------

14.
如何让窗口右上角的按钮不可用?

1) 直接重载窗口过程将关闭功能屏蔽
头文件
class TForm1:public TForm
{
private:
public:
protected:
virtual void __fastcall WndProc(TMessage &Message)
}
源文件
void __fastcall TForm1::WndProc(TMessage &Message)
{
if(Message.Msg==WM_SYSCOMMAND)
{
if(Message.WParam==SC_CLOSE)
{
Message.WParam=0;
}
}
}

2)

HMENU hSysMenu = GetSystemMenu(Handle,0);//得到系统菜单句柄
EnableMenuItem(hSysMenu,SC_CLOSE,MF_DISABLED);//使"关闭"项不可用.此时"关闭"按钮变灰,但系统菜单中的"关闭"没有变灰,只是不能选择.
第二句也可以改为:
EnableMenuItem(hSysMenu,SC_CLOSE,MF_GRAYD);
与上面不同的是,这时系统菜单中的"关闭"项也变灰了.


HWND m_hWnd = GetSystemMenu(Form_shuo->Handle,false); //关闭按钮
EnableMenuItem(m_hWnd,SC_CLOSE,MF_GRAYED);

---------------------------------------------------------------------------

15.
窗口最大化不正常

有时候在窗口界面设置里将 WindowState 属性直接设为 wsMaximized 得到的最大化效果不理想(比如控件没有像设想的那样靠右排列、树视图下边缘超出可视范围等),这时候可以通过在窗口的 Show ShowModal 语句后加上设置 WindowState 属性为 wsMaximized 的语句来得到理想的效果。

---------------------------------------------------------------------------

16.
隐藏程序主窗体

程序一开始就隐藏窗口,在工程名.cpp 中修改:
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->ShowMainForm = false;
ShowWindow(Application->Handle, SW_HIDE);
Application->Run();

想显示程序时执行下面这两行代码:
ShowWindow(Application->Handle, SW_SHOW);
Application->MainForm->Visible = true;

注:根据我的经验,要想在程序一开始隐藏主窗体,只要在工程名.cpp 文件中加入
Application->ShowMainForm = false;
即可,其他地方想隐藏只要执行 Hide() 方法;而想要显示时,只要执行 Show() 方法即可。

---------------------------------------------------------------------------

17.
由弹出的右键菜单的菜单项获取触发弹出事件的组件(多个组件关联到一个右键菜单时有用)

例:
void __fastcall TSomeForm::pmiSomeClick(TObject *Sender)
{
TMenuItem *mi = static_cast<TMenuItem *>(Sender);
TPopupMenu *pm = static_cast<TPopupMenu *>(mi->GetParentComponent());
TComponent *comp = pm->PopupComponent;

//
接下来就可以对 comp 进行操作了。
...
}

---------------------------------------------------------------------------

18.
让右键也能选中 TreeView,并且正确响应相应节点(TreeView->Selected 节点自动设为右击的节点)

首先将 TreeView RightClickSelect 属性设为 true,再设置其 OnContextPopup 事件如下所示:
void __fastcall TSomeForm::tvSomeContextPopup(
TObject *Sender, TPoint &MousePos, bool &Handled)
{
TTreeView *tv = static_cast<TTreeView *>(Sender);

//
取鼠标点的地方的TTreeNode
TTreeNode *node = tv->GetNodeAt(MousePos.x, MousePos.y);

if (NULL == node)
{
//
鼠标点的地方没有TTreeNode,菜单不显
Handled = true;
}
else
{
//
右键选中TTreeNode
tv->Selected = node;
}
}

---------------------------------------------------------------------------

19.
在右键菜单弹出之前对右键菜单进行设置

OnContextPopup 事件中设置。

---------------------------------------------------------------------------

20.
将英文提示文字(Yes, No, OK, Cancel...)修改为中文

1) BCB6 安装目录的 Source\Vcl 目录下找到 consts.pas,并复制一份到你的工程目录下;
2) 将刚拷过来的 consts.pas 文件中提示文字由英文改为中文;
3) 在当前工程中加入刚才修改过的 dialogs.pas,具体操作:Project-->Add to Project-->找到该文件,添加进来即可;
4) 设置一下工程选项:Project-->Options-->Packages-->取消 Build with runtime packages 前面的对钩,确定;
5) 重新编译运行工程即可。

出处:http://pc.8s8s.com/pc/pc12990.htm
参考:http://www.ccrun.com/article.asp?d=w74av8&i=620(通过消息实现自定义输入框)
注:其他想改动源代码并且应用到现有的 BCB 工程中去的情况估计也类似,但没测试过。

---------------------------------------------------------------------------

21.
显示和屏蔽任务栏

// 屏蔽任务栏
ShowWindow(FindWindow("Shell_TrayWnd", NULL), SW_HIDE);

//
显示任务栏
ShowWindow(FindWindow("Shell_TrayWnd", NULL), SW_SHOW);

---------------------------------------------------------------------------

22.
禁用和启用任务栏

// 禁用任务栏
EnableWindow(FindWindow("Shell_traywnd", NULL), false);

//
启用任务栏
EnableWindow(FindWindow("Shell_traywnd", NULL), true);

---------------------------------------------------------------------------

23.
自动隐藏任务栏

先定义如下函数:
void __fastcall TfrmSomeForm::autohideTaskBar(bool isAutohide)
{
APPBARDATA AppBarData;
memset(&AppBarData, 0, sizeof(APPBARDATA));
AppBarData.cbSize = sizeof(APPBARDATA);
AppBarData.hWnd = FindWindow("Shell_TrayWnd", NULL);

if (isAutohide)
{
//
设定任务栏自动隐藏
AppBarData.lParam = ABS_AUTOHIDE;
}
else
{
//
取消任务栏的自动隐藏
AppBarData.lParam = ABS_ALWAYSONTOP;
}

SHAppBarMessage(ABM_SETSTATE, &AppBarData);
}

要自动隐藏任务栏时,如下调用该函数:
autohideTaskBar(true);

要取消任务栏的自动隐藏时,如下调用该函数:
autohideTaskBar(false);

---------------------------------------------------------------------------

24.
显示和屏蔽桌面图标

// 屏蔽桌面图标
ShowWindow(FindWindow("ProgMan", NULL), SW_HIDE);

//
显示桌面图标
ShowWindow(FindWindow("ProgMan", NULL), SW_SHOW);

---------------------------------------------------------------------------

25.
屏蔽系统热键

1) 方法一,比较彻底,除 Ctrl + Alt + Del 之外全被屏蔽。

在程序中设置如下全局变量和全局函数:

// 钩子句柄
HHOOK OldHook;

long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *pkbhs;

if (code < 0)
{
return CallNextHookEx(OldHook, code, wParam, lParam);
}

pkbhs = (KBDLLHOOKSTRUCT*) lParam;

if (pkbhs->vkCode == 91 || pkbhs->vkCode == VK_RWIN)//
封锁 win
{
return 1;
}

if (pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) < 0)
{
return 1; //
封锁 CTRL+ESC
}

if (pkbhs->vkCode == VK_TAB && pkbhs->flags&LLKHF_ALTDOWN)
{
return 1; //
封锁 ALT+TAB
}

if (pkbhs->vkCode == 115 && pkbhs->flags & LLKHF_ALTDOWN)
{
return 1; //
封锁 ALT+F4
}

if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
{
return 1; //
封锁 ALT+ESC
}

if (pkbhs->vkCode == VK_SPACE && GetAsyncKeyState(VK_CONTROL) < 0)
{
return 1; //
封锁 CTRL+ ' '
}

return CallNextHookEx(OldHook, code, wParam, lParam);
}

然后就可以屏蔽和启用系统热键了:

// 屏蔽热键
OldHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyProc, HInstance, 0);
//
启用热键
UnhookWindowsHookEx(OldHook);

2)
方法二,只能屏蔽部分热键。

// 屏蔽系统热键
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, &temp, 0);
RegisterHotKey(frmSome->Handle, 1, MOD_ALT, VK_TAB);
RegisterHotKey(frmSome->Handle, 2, MOD_ALT, VK_F4);
RegisterHotKey(frmSome->Handle, 3, MOD_CONTROL, VK_ESCAPE);
RegisterHotKey(frmSome->Handle, 4, MOD_ALT, VK_ESCAPE);

//
恢复系统热键
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, &temp, 0);
UnregisterHotKey(frmSome->Handle, 1);
UnregisterHotKey(frmSome->Handle, 2);
UnregisterHotKey(frmSome->Handle, 3);
UnregisterHotKey(frmSome->Handle, 4);

---------------------------------------------------------------------------

26.
禁止拖动窗口

1) 在类定义的 public (不确定是不是一定要 public) 部分加上如下声明:
void __fastcall WMKillFocus(TMessage &msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NCHITTEST, TMessage, WMKillFocus);
END_MESSAGE_MAP (TForm)

2)
函数 WMKillFocus 实现如下:
void __fastcall TfrmSomeForm::WMKillFocus(TMessage &msg)
{
TForm::Dispatch(&msg);
if (msg.Result == HTCAPTION)
msg.Result = HTCLIENT;
}

---------------------------------------------------------------------------

27.
关于画图

1) TPaintBox 加滚动条方法
TPaintBox 置于 TScrollBox 之上,然后在画图时设定 TScrollBox HorzScrollBar->Range VertScrollBar->Range 即可。

2) TImage 加滚动条方法
TImage 置于 TScrollBox 之上,然后在画图时设定 TScrollBox HorzScrollBar->Range VertScrollBar->Range,同时还需设定 TImage Picture->Bitmap->Width Picture->Bitmap->Height

3) 保存 TPaintBox 图像的方法

Graphics::TBitmap *savePic = new Graphics::TBitmap;
TRect Dect, Sect;
Dect = Rect(0, 0, pb->Width, pb->Height);
Sect = Rect(0, 0, pb->Width, pb->Height);
pb->Canvas->Brush->Style = bsClear;
savePic->Width = pb->Width;
savePic->Height = pb->Height;
savePic->Canvas->CopyRect(Dect, pb->Canvas, Sect);
savePic->SaveToFile("c:\\abc.bmp");
delete savePic;

以上方法的缺点是无法保存超出屏幕大小的图像。

4) 保存 TImage 图像的方法

img->Picture->SaveToFile("c:\\a.jpg");

5) TImage
图像过大导致空间不足错误的处理方法

设一个小点的格式(默认值是 pfDevice)
img->Picture->Bitmap->PixelFormat = pf1bit;

6)
画笔颜色(上一条的副作用)

如下语句将使得 TImage 变成黑白图片:
img->Picture->Bitmap->PixelFormat = pf1bit;
如果想恢复彩色,应该设成大一些的格式(pf4bit 以上)
img->Picture->Bitmap->PixelFormat = pf4bit;

---------------------------------------------------------------------------

28.
压缩图片

BMP 格式图片压缩为 JPG 格式:

TJPEGImage *jpg = new TJPEGImage();
jpg->PixelFormat = jf8Bit; ;//
设置像素格式
jpg->Assign(bmp);
jpg->Compress();
jpg->SaveToFile("C:\\a.jpg");
delete jpg;

要记得导入头文件:
#include <jpeg.hpp>

---------------------------------------------------------------------------

29.
配置备份

1. 将注册表下
HKEY_CURRENT_USER\Software\Borland\C++Builder\6.0
导出为 reg 文件,这里边包含了大部分的设置,包括语法颜色什么的。恢复时导入注册表文件即可。

2. bcb 目录下 Bin 下的 Codding.dst Debugging.dst 备份。这是 bcb 编写代码和 debug 时的窗体位置配置。恢复时将文件复制到 bin 目录即可

转载于:https://www.cnblogs.com/ljianhui/archive/2012/07/15/2695920.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 制作一个简单的计算器  1.1 基础知识  1.1.1 C++ Builder的集成开发环境   1.1.2 C++ Builder控件的使用方法  1.1.3 有关计算器制作中用到控件的介绍  1.2 编程思路  1.3 操作步骤  1.4 创意与超越  1,5 本章小结 第2章 单窗口文本编辑器  2.1 基础知识  2.1.1 TOpenDialog控件和TsaveDialog控件的属性   2.1.2 控件的方法和事件  2.2 编程思路  2.3 操作步骤 2.4 创意与超越 2.5 本章小结 第3章 MDI窗体应用程序 3.1 基础知识 3.1.1 主窗体和子窗体间的通讯 3.1.2 主菜单和子菜单的融合 3.1.3 Dialog控件系列介绍 3.2 编程思路 3.3 操作步骤 3.4 创意与超越 3.5 本章小结 第4章 剪贴板查看器 4.1 基础知识 4.1.1 控件的属性设置 4.1.2 事件处理 4.2 编程思路 4.3 操作步骤 4.4 创意与超越 4.5 本章小结 第5章 我的资源管理器 5.1 基础知识 5.1.1 TreeView控件 5.1.2 ListView控件 5.2 编程思路 5.3 操作步骤 5.4 创意与超越 5.5 本章小结 第6章 系统文件浏览器 6.1 基础知识 6.1.1 注册表和 INI文件简介 6.1.2 TRegistryIniFile的属性和方法 6.2 编程思路 6.3 操作步骤 6.4 创意与超越 6.5 本章小结 第7章 绘制一个简单的图表 7.1 基础知识 7.2 编程思路 7.3 操作步骤 7.4 创意与超越 7.5 本章小结 第8章 图像编辑器 8.1 基础知识 8.2 编程思路 8.3 操作步骤 8.4 创意与超越 8.5 本章小结 第9章 制作一个简单的播放器 9.1 基础知识 9.1.1 AutoEnable属性 9.1.2 Display属性 9.1.3 Fileplayer属性 9.1.4 FileName属性 9.1.5 DeviceType属性 9.1.6 EnabledButton属性 9.2 编程思路 9.3 操作步骤 9.4 创意与超越 9.5 本章小结 第10章 二维图像处理器 10.1 基础知识 10.1.1 OpenGL的工作顺序 10.1.2 程序的基本结构 10.2 编程思路 10.2.1 OpenGL应用程序库 10.2.2 OpenGL对windows系统的扩展库函数 10.2.3 OpenGL辅助函数库 10.3 操作步骤 10.4 创意与超越 10.5 本章小结 第11章 二人对战五子棋 11.1 基础知识 11.1.1 游戏界面设计 11.1.2 游戏所使用的数据结构和算法 11.1.3 TDrawGrid组件的介绍 11.1.4 TTimer组件的使用 11.2 编程思路 11.2.1 TDrawGrid的应用 11.2.2 计时功能 11.3 操作步骤 11.4 创意与超越 11.4.1 数据结构 11.4.2 程序流程 11.5 本章小结 第12章 资料管理程序 12.1 基础知识 12.1.1 数据库基本知识 12.1.2 访问数据库的基本途径 12.2 编程思路 12.3 操作步骤 12.4 创意与超越 12.4.1 中文数据库的字段名 12.4.2 中文输入法的自动切换 12.4.3 对TDBNavigator组件的修改 12.5 本章小节 第13章 高级资料管理程序 13.1 基础知识 13.1.1 TQuery组件与TTable的比较 13.1.2 SQL语言简介 13.1.3 TDBChart组件的使用 13.2 编程思路 13.3 操作步骤 13.4 创意与超越 13.5 本章小结 第14章 多媒体数据库的开发 14.1 基础知识 14.1.1 多媒体数据的特点及处理方法 14.1.2 以文件方式保存和播放多媒体数据 14.1.3 以数据方式保存和播放多媒体数据 14.1.4 TOleContainer组件的简单介绍 14.1.5 利用QuickReport组件制作中文数据报表 14.2 编程思路 14.3 操作步骤 14.4 创意与超越 14.5 本章小结 第15章 简单的CGI程序 15.1 基础知识 15.1.1 TWebModule控件 15.1.2 TPageProducer、TQueryTableProducer和TDataSetTableProducer控件 15.1.3 超文本标识语言 15.1.4 CGI的工作原理 15.2 编程思路 15.3 操作步骤 15.4 创意与超越 15.5 本章小结 第16章 网页浏览 16.1 基础知识 16.1.1 什么是WWW 16.1.2 什么是URL 16.1.3 打开URL和连接 16.1.4 在页面之间跳转 16.1.5 获得浏览器的状态信息 16.2 编程思路 16.3 操作步骤 16.4 创意与超越 16.5 本章小结 第17章 电子邮件客户端程序 17.1 基础知识 17.1.1 POP3协议 17.1.2 SMTP协议 17.2 编程思路 17.3 操作步骤 17.4 创意与超越 17.5 本章小结 第18章 网上聊天程序 18.1 基础知识 18.1.1 TServerSocket控件的属性、方法和事件 18.1.2 TClientSocket控件的属性、方法和事件 18.1.3 处理异常 18.2 编程思路 18.3 操作步骤 18.4 创意与超越 18.5 本章小结 第19章 FTP客户端 19.1 基础知识 19.2 编程思路 19.3 操作步骤 19.4 创意与超越 19.5 本章小结 附录A C++语法基础 A.1 C++的基本数据类型及常量、变量 A.1.1 常用的基本数据类型 A.1.2 变量的定义 A.1.3 常量的定义 A.2 操作符、表达式及语句 A.2.1 操作符 A.2.2 表达式 A.2.3 语句 A.3 数组 A.3.1 数组的定义 A.3.2 初始化数组 A.3.3 数组元素的访问 A.3.4 二维数组 A.4 指针 A.4.1 指针的定义 A.4.2 指针运算 A.4.3 指针与数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值