当然是转载的叻...
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 目录即可