zoukankan      html  css  js  c++  java
  • C++ Builder技巧集锦

      1 /*
      2 调用DOS程序时不显示窗口
      3 使 用 ShellExecute调 用 DOS程 序 时 可 以 不 显 示 窗 口 , 如 :*/
      4 ShellExecute(0, "open", "c:\tools\arj.exe", "a c:\p.arj c:\*.bat c:\*.sys", NULL, SW_HIDE);  
      5 /*产生随机数代码*/
      6 int SecVal;
      7 AnsiString Hour,Minute,Second;
      8 int RandomVal;
      9 Hour=Now().FormatString("hh");
     10 Minute=Now().FormatString("nn");
     11 Second=Now().FormatString("ss");
     12 SecVal=StrToInt(Hour)*3600+StrToInt(Minute)*60+StrToInt(Second);
     13 for(int i=1;i<=SecVal;i++)
     14 {
     15     RandomVal=random(1000);
     16 }
     17 Form1->Caption=IntToStr(RandomVal);
     18 /*得到文件版本的函数*/
     19 AnsiString __fastcall TMainForm::returnversion( void )
     20 {
     21     int ii;
     22     unsigned int jj = sizeof( VS_FIXEDFILEINFO );
     23     char *pp, pp2[100];
     24     AnsiString ss;
     25     VS_FIXEDFILEINFO *aa;
     26     void **pp1 = (void **)&aa;
     27     pp2[0] = 0;
     28     ss = "()";
     29     ii = GetFileVersionInfoSize( Application->ExeName.c_str(), NULL );
     30     if( ii != 0 ) {
     31         pp = new char[ii];
     32         if( GetFileVersionInfo( Application->ExeName.c_str(),
     33             0, ii, pp ) ) {
     34             if( VerQueryValue( pp, "\", pp1, &jj ) ){
     35                 ss = " V";
     36                 ss += IntToStr( HIWORD(aa->dwFileVersionMS) )+".";
     37                 ss += IntToStr( LOWORD(aa->dwFileVersionMS) )+".";
     38                 ss += IntToStr( HIWORD(aa->dwFileVersionLS) )+"(build:";
     39                 ss += IntToStr( LOWORD(aa->dwFileVersionLS) )+")";
     40             }
     41         }
     42         delete pp;
     43     }
     44     return ss;
     45 }
     46 /*
     47 得到正在运行的WINDOWS版本
     48 WINDOWS版本多的很,你想这么多总是会存在着不兼容性,所以看看清它是什么有时会很重要!
     49 加入下要的代码吧:*/
     50 void __fastcall TForm1::FormCreate(TObject *Sender)
     51 {
     52     OSVERSIONINFO info ;
     53     info.dwOSVersionInfoSize = sizeof (info) ;
     54     GetVersionEx (&info) ;
     55     switch (info.dwPlatformId)
     56     {
     57     case VER_PLATFORM_WIN32s:
     58         Label1->Caption = "System: Windows Win 32s" ;
     59         break ;
     60     case VER_PLATFORM_WIN32_WINDOWS:
     61         Label1->Caption = "System: Windows 95" ;
     62         break ;
     63     case VER_PLATFORM_WIN32_NT:
     64         Label1->Caption = "System: Windows NT" ;
     65         break ;
     66     default:
     67         Label1->Caption = "System: Unknown" ;
     68         break ;
     69     }
     70     Label2->Caption = String ("Version: ")
     71         + String ((int) info.dwMajorVersion) + "." + String((int)info.dwMinorVersion) ;
     72     Label3->Caption = String ("Build: ") + String ((int) (info.dwBuildNumber & 0xFFFF)) ;
     73     Label4->Caption = String ("System Info: '") + info.szCSDVersion + "'" ;
     74 }
     75 
     76 /*
     77 让TRichEdit自动滚动
     78 我们用TIMER加上对WINDOWS发消息就可以实现了!
     79 */
     80 void __fastcall TForm1::Timer1Timer(TObject *Sender)
     81 {
     82     SendMessage(RichEdit1->Handle, EM_SCROLL, SB_LINEDOWN, 0);
     83 }
     84 
     85 /*
     86 除了一行一行的向下滚还可以有什么效果呢?看看下面!
     87 */
     88 SB_LINEDOWN 向下一行
     89 SB_LINEUP 向上一行
     90 SB_PAGEDOWN 向下一页
     91 SB_PAGEUP 向上一页
     92 
     93 /*
     94 改一下就行了。
     95 如何加入主页链接
     96 你是不是有注意在一些软件中有一个htpp://www.XXX.com/一点就会在浏览器中自动打开这个主页。我们要如何实现这一步呢?简单的很看看下面!
     97 在窗体上加入一个LABEL;
     98 定义Label的CAPTION为“加密金刚锁主页”;
     99 加入下面代码:
    100 */
    101 void __fastcall TForm2::Label1Click(TObject *Sender)
    102 {
    103     ShellExecute(Handle,"open","http/www.encrypter.net",0,0,SW_SHOW);
    104 }
    105 
    106 /*
    107 好了,你可以点了,当然你出入一些特效如Cursor变成手形就更好了!
    108 如何检测本机是否与Internet连接
    109 */
    110 HRASCONN TMainForm::CheckForConnections()
    111 {
    112     char buff[256];
    113     RASCONN rc;
    114     rc.dwSize = sizeof(RASCONN);
    115     DWORD numConns;
    116     DWORD size = rc.dwSize;
    117     // Enumerate the connections.
    118     DWORD res = fRasEnumConnections(&rc, &size, &numConns);
    119     if (!res && numConns == 0)
    120         // No connections, return 0.
    121         return 0;
    122     if (res) {
    123         // Error. Report it.
    124         fRasGetErrorString(res, buff, sizeof(buff));
    125         Memo1->Lines->Add(buff);
    126     } else {
    127         // Get the connection status.
    128         RASCONNSTATUS status;
    129         status.dwSize = sizeof(status);
    130         res = fRasGetConnectStatus(rc.hrasconn, &status);
    131         if (res) {
    132             // Error. Report it.
    133             fRasGetErrorString(res, buff, sizeof(buff));
    134             Memo1->Lines->Add(buff);
    135             return 0;
    136         } else {
    137             // Found connection, show details.
    138             if (status.rasconnstate == RASCS_Connected) {
    139                 Memo1->Lines->Add("Existing connection found:");
    140                 Memo1->Lines->Add(" Device type: " +
    141                     String(rc.szDeviceType));
    142                 Memo1->Lines->Add(" Device name: " +
    143                     String(rc.szDeviceName));
    144                 Memo1->Lines->Add(" Connected to: " +
    145                     String(rc.szEntryName));
    146                 return rc.hrasconn;
    147             } else {
    148                 // A connection was detected but its
    149                 // status is RASCS_Disconnected.
    150                 Memo1->Lines->Add("Connection Error");
    151                 return 0;
    152             }
    153         }
    154     }
    155     return 0;
    156 }
    157 
    158 /*
    159 如何显示和不显示鼠标
    160 在超级解霸中我们以发现,在播放的时候MOUSE会自动消失,这样的效果有时真的有用,它是如何实现的。
    161 在WINDOWS中API函数ShowCursor(bool bShow);是这个程序的主角。当bShow为true,Mouse出现,为false,MOUSE消失。下面我们来做一个单击窗体MOUSE消失,再击又出来的效果。
    162 */
    163 void __fastcall TForm1::FormClick(TObject *Sender)
    164 {
    165     if(i==1)
    166         ShowCursor(false);
    167     if(-i==1)
    168         ShowCursor(true);
    169     i=-i;
    170 }
    171 
    172 /*
    173 你可以跟据需要来做出各种效果!
    174 如何显示透明图片
    175 GIF是可以透明的,但是只能支持256色,BMP不支持透明但可以支持真彩,有没有方法可以实现BMP的透明呢?答案是肯定的。
    176 我们点一个BUTTON是出现透明的图片画在FORM上的效果!
    177 */
    178 void __fastcall TForm1::Button1Click(TObject *Sender)
    179 {
    180     Graphics::TBitmap *pBitmap=new Graphics::TBitmap();
    181     pBitmap->LoadFromFile("test.bmp");//图片文件
    182     pBitmap->Transparent = true; //设置透明属性为真
    183     pBitmap->TransparentColor=clBlack;//设置透明色为黑色
    184     pBitmap->TransparentMode = tmAuto;
    185     Form1->Canvas->Draw(0,0,pBitmap);
    186     delete pBitmap;
    187 }
    188 
    189 /*
    190 如何自己写代码遍历文件夹?
    191 比如 遍历C:winnt 下的所有文件夹,并把所有文件夹的名字写入到C:folder.txt中去
    192 */
    193 void __fastcall TForm1::Button1Click(TObject *Sender)
    194 {
    195     TSearchRec sr;
    196     TStringList* sss=new TStringList();
    197     if (FindFirst("c:\winnt", iAttributes, sr) == 0)
    198     {
    199         do
    200         {
    201             if ((sr.Attr & iAttributes) == sr.Attr)
    202             {
    203                 sss->Add(sr.Name);
    204             }
    205         } while (FindNext(sr) == 0);
    206         FindClose(sr);
    207     }
    208     sss->SaveToFile("c:\folder.txt");
    209 }
    210 
    211 /*
    212 锁定鼠标
    213 以下是锁定在Form中的例子,如果你想锁定你规定的区域,改变 R 即可。
    214 譬如
    215 */
    216 R = Rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
    217 
    218 /*
    219 锁定在Form中:
    220 */
    221 TRect R;
    222 R = BoundsRect;
    223 ClipCursor(&R);
    224 
    225 /*
    226 解锁
    227 */
    228 TRect R;
    229 R = Rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
    230 ClipCursor(&R);
    231 
    232 /*
    233 拖动一个无标题栏的窗体
    234 在前面我们刚说了如何做一个不规则的窗体,这时我们会有一个新问题,不规则的窗体我们不能让标题栏还在上面,这样多不好看,那没有有标题栏我们如何来拖动这个窗体呢?下面我们先看看分析吧!
    235 */
    236 Windows分客户区和非客户区(标题栏、菜单、窗口框),我们只要在点下客户区时发出在非客户区标题栏的消息就能达到目的了。看看是如何做到的。
    237 void __fastcall TForm1::CreateParams(TCreateParams &Params)
    238 {
    239     TForm::CreateParams(Params);
    240     Params.Style &= ~WS_CAPTION;
    241 }
    242 void __fastcall TForm1::WMNCHitTest(TMessage &Msg)
    243 {
    244     if (GetAsyncKeyState(VK_LBUTTON)<0)
    245         Msg.Result = HTCAPTION;
    246     else
    247         Msg.Result = HTCLIENT;
    248 }
    249 
    250 /*
    251 获取进程句柄后如何和窗口句柄相联系?
    252 按钮按下调用函数CreateProcess(strFileName,NULL,NULL,NULL,FALSE,0,NULL,&StartupInfo,&ProcessInfo);
    253 */
    254 //ProcessInfo是一个全局变量,据此可获取进程句柄,进程ID,线程ID等
    255 
    256 /*
    257 进程启动完毕,然后调用函数EnumWindows(EnumWindowsProc,0)
    258 */
    259 //EnumWindowsProc是回调函数
    260 
    261 /*
    262 回调函数EnumWindowsProc为:
    263 */
    264 BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam)
    265 {
    266     CString strPrompt;
    267     DWORD ProcId;
    268     DWORD ThreadId;
    269     ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)
    270         if(ProcId==ProcessInfo.dwProcessId)
    271         {
    272             HWND targetWin;
    273             targetWin=hwnd;
    274             while(true)
    275             {
    276                 HWND hTemp;
    277                 hTemp=GetParent(targetWin);
    278                 if(hTemp==NULL)
    279                     break;
    280                 else
    281                     targetWin=hTemp;
    282             }
    283             char szTemp[255];
    284             sprintf(szTemp,"%x",ProcId);
    285             CString strTemp=szTemp;
    286             GetWindowText(targetWin,strTemp.GetBuffer(255),255);
    287             return FALSE;
    288         }
    289         else
    290             return true;
    291 }
    292 
    293 /*
    294 最小化和恢复程序的方法
    295 1)
    296 */
    297 // To minimize, pass SC_MINIMIZE as the WPARAM
    298 SendMessage(Application->Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
    299 // To restore, pass SC_RESTORE as the WPARAM
    300 SendMessage(Application->Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
    301 2)
    302 // To minimize, pass SW_MINIMIZE to ShowWindow
    303 ShowWindow(Application->Handle, SW_MINIMIZE);
    304 // To restore, pass SW_RESTORE to ShowWindow
    305 ShowWindow(Application->Handle, SW_RESTORE);
    306 3)
    307 // To minimize the app, call Minimize
    308 Application->Minimize();
    309 // To restore the app, call Restore
    310 Application->Restore();
    311 
    312 /*
    313 个人看法,第一组方法最为灵活,可能用处比较的大,如果网友象再最小化窗口是搞出一些动画效果,那么用第二组函数,第三组没有什么特别的地方。
    314 关闭外部应用程序
    315 先利用FindWindow函数找出要关闭的应用程序的主窗口名字,然后发送一个消息即可。
    316 实例如下:
    317 */
    318 HWnd HWndCalculator;
    319 HWndCalculator = Winprocs->FindWindow(nil, "计算器"); // close the exist Calculator
    320 if (HWndCalculator)
    321 SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
  • 相关阅读:
    HDu 2830 Matrix Swapping II(dp)
    服务器http处理流程
    iOS网络缓存机制
    软件设计需要的两项能力:理解与抽象
    编程思想的本质
    编程思想:面向对象与面向过程
    You Can Customize Synthesized Instance Variable Names @property
    nil / Nil / NULL / NSNull VS objc_msgSend
    对OC中property的一点理解
    @property 的本质是什么?
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3281615.html
Copyright © 2011-2022 走看看