大白鯊經驗集 (轉)
大家新年好!!學的越來越多,錢/前途無量!!
我的並非是好的,大家既然來到這裡就是志同道合,互相學習。所以也希望您把你的經驗共享出來,
以某某人的經驗集為標題,方便朋友查詢。
我一直認為要成為高手必定要經過四個階段:
:就是熟悉該語言的環境,比如說編譯設定,環境設定,工程,語法,通用使用。
掌握:就是該語言的所有的功能,比如 DLL,RES,OPP(類和模板),訊息,自定元件,內嵌,DCOM,檔案與操作,/SDK,登錄檔,
VXD/WDM,透過一個小學會的規範化。
熟練:想背英語言6級樣記住個元件的屬性,方法,事件的功能,聯絡,注意事項。工作時不會經常性地翻書。
精通:1給一個普通的任務能實現,2給出一個高難度地,象編出水紋波的。
我現在進入了掌握階段,看來要化很長的時間!!
為了讓更多的朋友看到這帖子,請你告訴我們你現在處於哪個階段
用程式取得資訊
---- 很 多 軟 件 可 以 判 斷 所 運 行 的 電 腦 類 型 而 自 動 做 不同 的 處 理。 如PhotoShop 5 可 以 探
測CPU 是 否 有MMX 支 持 而 調 用 不同 的 處 理 函 數,《 金 山 詞 霸》 發 現 有MMX 支 持 會 產 生 半 透 明的
翻 譯 提 示, 很 多 軟 件 可 以 區 分,Cyrix, 的CPU...
---- 現 在, 且 讓 我 細 細 道 來 如 何 讓 你 在 自 己 的 程 序 中 取得CPU 信 息。
---- 主 要 可 利 用 CPUID 匯 編 指 令( 機 器 碼:0FH A2H, 如 果 你 的編 譯 器 不 支 持CPUID 指 令,
只 有 emit 機 器 碼 了) 該 指 令 可 以 被如 下CPU 識 別
Intel 486 以 上 的CPU,
Cyrix M1 以 上 的CPU,
AMD Am486 以 上 的CPU
(1) 取CPU OEM 字 符 串, 判 斷CPU 廠 商
先 讓EAX=0, 再 調 用CPUID
Inel 的CPU 將 返 回:
EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX 將 連 成"GenuineIntel", 真 正 的Intel。
Cyrix 的CPU 將 返 回:
EBX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix 來 代 替"。
AMD 的CPU 將 返 回:
EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD", 可 信 的AMD。
---- 在98 中, 用 右 鍵 單 擊" 我 的 電 腦", 選 擇" 屬 性- 常規" 在 計 算 機 描 述 處 就 可 看
見CPU OEM 字 符 串。
(2)CPU 到 底 是 幾86, 是 否 支 持MMX
先 讓EAX=1, 再 調 用CPUID
EAX 的 8 到11 位 就 表 明 是 幾86
3 - 386
4 - i486
5 - Pentium
6 - Pentium Pro Pentium II
2 - Dual Processors
EDX 的 第0 位: 有 無FPU
EDX 的 第23 位:CPU 是 否 支 持IA MMX, 很 重 要 啊!如 果 你 想 用 那57 條 新 增 的 指 令, 先 檢 查 這
一 位 吧, 否 則 就等 著 看Windows 的" 該 程 序 執 行 了 非 法 指 令, 將 被 關 閉" 吧。
(3) 專 門 檢 測 是 否P6 架 構
先 讓EAX=1, 再 調 用CPUID
如 果AL=1, 就 是Pentium Pro 或Pentium II
(4) 專 門 檢 測AMD 的CPU 信 息
先 讓EAX=80000001H, 再 調 用CPUID
如 果EAX=51H, 是AMD K5
如 果EAX=66H, 是K6
EDX 第0 位: 是 否 有FPU
EDX 第23 位,CPU 是 否 支 持MMX,
程 序 如 下: 是C++Builder 的 控 制 臺 程 序, 可 以 給 出 你 的" 心" 的 信 息。 如 果 把 這 個 技 術 用 於
DLL 中, 便 可 以 使程 序 也 知道" 心" 的 信 息。
Instruction Demo Program------------
#include < conio.h >
#include < iostream.h >
#pragma hdrstop
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm {
mov eax,0
cpuid
mov D PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
cout< < "This CPU 's OEM String is:"< < OEMString< < endl;
_asm {
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
if(iEDXValue&0x800000)
cout < < "This is MMX CPU"< < endl;
else
cout < < "None MMX Support."< < endl;
int iCPUFamily=(0xf00 & iEAXValue) > >8;
cout < < "CPU Family is:"< < iCPUFamily< < endl;
_asm{
mov eax,2
CPUID
}
if(_AL==1)
cout < < "Pentium Pro or Pentium II Found";
getch();
return 0;
}
ShowMessage("Could not MakeCurrent");
請問如何用ENTER鍵進行焦點轉移,?
1 在Windows 環 境 下, 要 使 一 個 控 件 取 得 焦 點, 可 在 該 控 件 上 用 鼠 標 單 擊 一 下,
或 按Tab 鍵 將 焦 點 移 至 該 控 件 上。 這 種 控 制 焦 點 切 換 的 方 法 有 時 不 符 合 用 戶
的 習 慣。 就 圖 一 而 言, 用 戶 就 希 望 用Enter 鍵, 控 制 焦 點 由Edit1 切 換 到Edit2。
要 實 現 這 樣 的 功 能 需 借 助WinAPI 函 數SendMessage 來 完 成。 方 法 是:
先 設Form1 的KeyPreview 屬 性 為true, 然 後 在Form1 的OnKeyPress 事 件 中 加 入 如 下 的 代 碼。
這 樣, 用 戶 就 可 以 通 過 按Enter, 鍵 控 制 焦 點 按 定 義 好 的Taborder 順 序 來 移 動 了 !
void __fastcall TForm1::
FormKeyPress(T *Sender, char &Key)
{
if(Key==VK_RETURN)
{
SendMessage(this- >Handle,WM_NEXTDLGCTL,0,0);
Key=0;
}
}
2 在edit1的OnKeyPress(event)中加入
if(Key==VK_RETURN)Edit3->SetFocus();
螞蟻的視窗消失??
Timer->Intrval=10;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form1->Width-=20;
Form1->Height-=20;
if(Form1->Width==108&&Form1->Height==27)
{Form1->Close ();}
Form1->Top+=10;
Form1->Left+=10;}
(2)TDateTime t1;
Form1->Caption="今天是:"+DateToStr(Date())+"現在時間是:"+TimeToStr(Time());
(3) AnsiString S;
S = "";
if (Directory("Select Directory", "", S))
SetPath(S);
(4) AnsiString S;
InputQuery("標題","提示",s);
視窗背景
public:
Graphics::TBitmap *bitmap;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
bitmap=new Graphics::TBitmap;
bitmap->LoadFromFile("Arc.bmp");
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
int x,y;
y=0;
while(y
while(x
x=x+bitmap->Width ;
}
y=y+bitmap->Height ;
}
}
如何把JPG檔案轉成BMP檔案???
先用TImage Image1->Picture->LoadFromFile(你的Jpeg檔案)
然後
Graphics::TBitmap*tmp=new Graphics::TBitmap();
tmp->Assign(Image1->Picture->Graphic);
tmp->SaveToFile(FileName);
檔案讀取寫入
int i=0;
char sn[]="123";
if(!FileExists("aaa.txt"))
{
i=FileCreate("aaa.txt");
FileWrite(i,sn,strlen(sn));
FileClose(i); ShowMessage("ok");}
{char buf[3];
AnsiString str;
int i;
i=FileOpen("d:aaa.txt",fmOpenReadWrite);
FileRead(i,buf,3);
FileClose(i);
if(Edit1->Text==AnsiString(buf,3))
{ShowMessage("ok'");}
按鍵發聲
#include
AnsiString SoundFile="d:ding.wav";
sndPlaySound(SoundFile.c_str() ,SND_ASYNC);
怎麼來使休眠
SetSystemPowerState(true,true);
其中的第一個引數指定是休眠還是掛起(true :前者;false:後者)
第二個引數指定是否強制。
如 何 將 浮 點 數 轉 成AnsiString同 時 控 制 其 只 保 留 兩 位 小 數
FLOAT aa=9032.569;
AnsiString bb=FormatFloat("0.00",aa);
能否從AnsiString a="FF";把a轉成10進位制?
這樣更簡單: 前面補上16進位制標誌0x再轉換,
AnsiString s="FF";
s="0x"+s;
int x=s.ToInt();
如何獲取螢幕的解析度?
自動定義了一個全域性變數Screen,
可在程式任何地方用Screen->Height,Screen->Width獲得當前螢幕解析度。
誰知道動態陣列怎樣用
動態陣列必須在程式執行期間動態改變大小。
用malloc():為指標分配空間和realloc():動態調整指標分配空間
配合實現。注意要包含stdlib.h。示例如下:
#include
#include
#include
int main(void)
{
char *str;
str = (char *) malloc(10);
strcpy(str, "Hello");
printf("String is %sn Address is %pn", str, str);
str = (char *) realloc(str, 20);
printf("String is %sn New address is %pn", str, str);
free(str);
return 0; }
怎樣顯示隨機數?
Timer->Interval = 150, 效果不錯
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ Label1->Caption = ran(100);}
void __fastcall TForm1::Button1Click(TObject *Sender)
{Timer1->Enabled = ! Timer1->Enabled; }
不要用執行緒了, Timer佔用很小, 不影響程式的響應。
如果要過一段時間停下來:(比如是 1分鐘 = 60 秒 =60000ms = 400次*150ms/次
int TimeOut = 400;
>Interval = 150, 效果不錯
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label1->Caption = random(100);
if(--Timeout==0)
Timer1->Enabled = ! Timer1->Enabled;
}
Timer的最小解析度是55ms也就是18.2次一秒,和8253/8254的頻率一樣。
最小間隔可以達到1ms
使用
TQuery的引數設定
一、TQuery的引數設定
1. 在屬性中:Select * from 表名 where 欄位名=:變數名
跟在“ : ”後面的是變數。這樣寫後,在引數屬性中就可以修改該變數的數
據型別等。
2. 對變數的賦值:
Query1->Active=false;
Query1->Params->Items[0]->AsString=Edit1->Text;
Query1->Active=true;//查詢符合變數的記錄
3. 用Grid顯示結果
DBGrid的Data與DataSource1連線,而DataSource1的DataSet與Tquery1
連線。
二、嵌入SQL語言
透過Query控制元件嵌入SQL語句建立的查詢比Table更簡單、更高效。
用一個簡單的程式碼來說明如何建立查詢程式:
例如,要建立一個檢索表1中書名為book1的程式則在表單上放置
DBGrid,DataSource,Query三個控制元件加入以下程式碼:
DBGrid1-〉DataSource=DataSource1;
DataSource1-〉DataSet=Tqery1;
Query1-〉Close();
Query1-〉SQL-〉Clear();
Query1-〉SQL-〉Add(″Select * From 表 Where (書名=′book1′ ″);
Query1-〉ExecSQL();
Query-〉Active=true;
你就可以在生成的表格中看到所有名稱為book1的記錄。
視窗漸變背景色
TColor StartColor,EndColor;//全域性變數
得開始顏色
if(ColorDialog1->Execute ())
StartColor=ColorDialog1->Color;
得結束顏色
if(ColorDialog1->Execute())
EndColor=ColorDialog1->Color;
float pwidth;
int redstart,greenstart,bluestart,redend,greenend,blueend;
float redinc,greeninc,blueinc;
pwidth=float(PaintBox1->Width);
過Get(X)Value函式來獲得開始的顏色的紅,藍,綠
redstart=GetRValue(StartColor);
greenstart=GetGValue(StartColor);
bluestart=GetBValue(StartColor);
過Get(X)Value函式來獲得結束的顏色的紅,藍,綠
redend=GetRValue(EndColor);
greenend=GetGValue(EndColor);
blueend=GetBValue(EndColor);
置顏色變化率
redinc=(redend-redstart)/pwidth;
greeninc=(greenend-greenstart)/pwidth;
blueinc=(blueend-bluestart)/pwidth;
for(int i=0;i
{ 義畫筆顏色
PaintBox1->Canvas->Pen->Color=TColor(RGB(redstart+int(redinc*i),greenstart+int(greeninc*i),bluestart+int(blueinc*i)));
動畫筆到
PaintBox1->Canvas->MoveTo(i,0);
PanitBox1的上向下畫
PaintBox1->Canvas->Lo(i,PaintBox1->Height);
如何分別對DBGrid和SrtingGRid的行換背景色?
TForm1::DBGrid1DrawColumnCell( )
if(Column->Field->DataSet->RecNo%2)
{
DBGrid1->Canvas->Brush->Color=clYellow;
DBGrid1->Canvas->FillRect(Rect);
}
DrawText(DBGrid1->Canvas->Handle, Column->Field->Text.c_str(),-1,(RECT*)&Rect,DT_SINGLELINE | DT_VCENTER |DT_CENTER);
如何分別對DBGrid和SrtingGRid的列動態換背景色?
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(Memo1->Text);
Query1->Open();
for(int i=0;i
{ if(i%2==0)DBGrid1->Columns->Items[i]->Color=clAqua;
else DBGrid1->Columns->Items[i]->Color=clInfoBk;
}
怎樣得到當前的月份是多少啊
TDateTime time=Now();
AnsiString Time=time.FormatString("yyyy-mm-dd");
AnsiString month=Time.SubString(6,2);
Label1->Caption=month;
AnsiString sMonth;
sMonth=Now().FormatString("mm");//取出當前月分
Label2->Caption=sMonth;
窗體標題閃爍
Timer()
{FlashWindow(Form1->Handle,TRUE):}
像星際爭霸開頭由大到小的字幕特效
在窗體中加入一個Timer(定時器),標籤(Label)
Label1->AutoSize=true
Label1->Caption=歪歪的VB教程"
Label1->Font->Name = "宋體"
Label1->Font->Size = 150
Label1->Fore->Color = vbGreen
Label1->Visible = true
Time1->Interval = 1
Time1Enabled = true
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Label1->Font->Size >=2)
{Label1->Font->Size =Label1->Font->Size-2;
Label1->Left = (Form1->Width-Form1->Width)/2;
Label1->Top = (Form1->Height -Label1->Height) / 2 ;}
else{
Label1->Visible = false;
Timer1->Enabled = false;
}
}
CPUID
GetCPUID(void)
{
asm
{
PUSH EBX Save affected register}
PUSH EDI
MOV EDI,EAX Resukt}
MOV EAX,1
DW 0xa20f CPUID Command}
STOSD CPUID[1]} 名稱
MOV EAX,EBX
STOSD CPUID[2]}//無用
MOV EAX,ECX
STOSD CPUID[3]}//無用
MOV EAX,EDX
STOSD CPUID[4]}//cpu編號
POP EDI Restore registers}
POP EBX
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption=(AnsiString)GetCPUID();
}
自動呼叫或程式
Windows 提供了Execute函式,用來呼叫外部程式或與某程式關聯的檔案。
其原型如下:
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
如若要自動瀏覽器程式訪問我的主頁,程式程式碼如下:
ShellExecute(Handle,NULL,"",NULL,NULL,SW_SHOWNORMAL);
若要啟動系統預設郵件程式,給我寫信,程式程式碼如下:
ShellExecute(to:Handle,NULL,"mailto:lmq@4y.com.cn",NULL,NULL,SW_SHOWNORMAL'>Handle,NULL,"mailto:lmq@4y.com.cn",NULL,NULL,SW_SHOWNORMAL);
BCB中的獲取印表機函式是Printer();
其返回值是一個TPrinter,你可以查詢TPrinter物件的幫助。
你需要新增引用的標頭檔案是#include
其中Printer()->Printers->Count是印表機的數目
Printer()->Printers->Strings[]是列舉印表機的名稱
Printer()->BeginDoc()開始列印準備
Printer()->EndDoc()結束列印準備,開始真正列印
Printer()->AbortDoc()終止列印準備。
在BeginDoc()和EndDoc()之間可以使用Printer()->Canvas來畫列印頁
畫完一頁後就可以用Printer()->NewPage()開始新的一頁
此外Printer()->Handle是一個HDC,使用GetDeviceCaps(Printer()->Handle, ...)
可以得到當前印表機的解析度等等很多屬性,而不需要BeginDoc()
(如果使用Printer()->Canvas->Handle則需要BeginDoc()才能得到準確資訊)
獲取螢幕的顏色
void __fastcall TForm1::Button1Click(TObject *Sender)
{int BitsPerPixel = GetDeviceCaps(Canvas->Handle,BITSPIXEL);
int Planes = GetDeviceCaps(Canvas->Handle,PLANES);
BitsPerPixel *= Planes;
bool UsesPalettes =
(bool)(GetDeviceCaps(Canvas->Handle, RASTERCAPS) & RC_PALETTE);
if(UsesPalettes)
Label1->Caption = "螢幕使用餓調色盤";
else
Label1->Caption = "螢幕沒有使用調色盤";
switch (BitsPerPixel)
{ case 32:
Label2->Caption ="32-位 真彩";
case 24:
Label2->Caption = "24-位 真彩";
break;
case 16:
Label2->Caption = "16-位 高 彩";
break;
case 8:
Label2->Caption = "256 色 ";
break;
case 4:
Label2->Caption = "16 色模式";
break;
case 1:
Label2->Caption = "單色模式";
break;
default:
Label2->Caption = "螢幕支援 " + IntToStr(1<< BitsPerPixel) +" 不同色";
break;
}
使用自己的函式庫:
new->cpp int jia(int a,int b){return (a+b);} save to File1.cpp
at unit.cpp #include "File1.cpp"
int c=jia(a,b);
如何使Statar上的文字滾動起來??
如下操作可使StatusBar中的字串向左運動
StatusBar1->SimpleText=StatusBar1->SimpleText.SubString(2,StatusBar1->SimpleText.Length()-1)+StatusBar1->SimpleText.SubString(1,1);
設計時定
simplePanel=true;
SimpleText=love you
SizeGrip=false;
在TStringGrid控制元件中怎麼顯示double型數?
double aaa = 1.1;
AnsiString str = FloatToStr(aaa);
StringGrid1->Cells[1][2]=str;
StringGrid1->Cells[1][1]= FormatFloat("0.00000",3.1415926);
Table1查詢 輸入員只能修改自己輸入的表的內容(好比是輸入本月工資可以修改輸入的錯誤確不可修改上月的工資) C++Builder5提供了一個瀏覽器控制元件CppBrowser,它位於internet控制元件欄,其的主要方法有: Navigate函式,用於瀏覽給定的url的資源 GoBack(),瀏覽上一頁 GoForward(),瀏覽下一頁 Stop(),停止瀏覽 Refresh(),重新整理當前頁面 新建一應用程式,將工程名儲存為myie,設定Form1的Name為Main_Form,在Main_Form上加入一CppWebBrowser控制元件和一個ToolBar控制元件, TB_Navigate的OnClick事件程式碼如下: void __fastcall TMain_Form::NavigateExecute(TObject *Sender) { CppWebBrowser1->Navigate((WString)CB_URL->Text, TNoParam(), TNoParam(), TNoParam(), TNoParam()); } ComBox1的OnKeyPress事件程式碼如下: void __fastcall TMain_Form::CB_URLKeyPress(TObject *Sender, char &Key) { if(Key==13) 按下的鍵為Enter鍵 NavigateExecute(Sender); } 其餘的程式碼類似… 編譯執行,一個具有基本瀏覽功能的瀏覽器就生成了。 2、獲得html檔案的原始檔 我們在用IE瀏覽主頁時,若點選右鍵,選擇“檢視原始檔”,系統會自動啟動記事本顯示此html的原始檔。在程式設計時, 新建 一工程,從FastNet控制元件欄拖一NMHTTP控制元件到窗體上,再拖一Memo控制元件到窗體,假設要獲得本人主頁()的原始檔, void __fastcall TForm1::FormCreate(TObject *Sender) { Memo1->Clear(); 空Memo1 NMHTTP1->Get(""); Memo1->Text = NMHTTP1->Body; } 編譯執行程式,Memo1框中立即顯示本人主頁的原始檔. 另外,NMHTTP控制元件還支援,其屬性Proxy和Port分別指代理的和埠號。 三、自動呼叫瀏覽器或郵件程式 Windows 提供了ShellExecute函式,用來呼叫外部程式或與某程式關聯的檔案。 其原型如下: HINSTANCE ShellExecute( HWND hwnd, // handle to parent window LPCTSTR lpOperation, // pointer to string that specifies operation to perform LPCTSTR lpFile, // pointer to filename or folder name string LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters LPCTSTR lpDirectory, // pointer to string that specifies default directory INT nShowCmd // whether file is shown when opened ); 如若要自動瀏覽器程式訪問我的主頁,程式程式碼如下: ShellExecute(Handle,NULL,"",NULL,NULL,SW_SHOWNORMAL); 若要啟動系統預設郵件程式,給我寫信,程式程式碼如下: ShellExecute(); 以上程式在Pwin98+BCB5下執行透過。 BCB下如何改變CppWebBrowser的Html內容 void __fastcall TForm1::SetHtml( TCppWebBrowser *WebBrowser,AnsiString Html ) if( WebBrowser->Document == NULL ) CopyMemory( hHTMLText, Html.c_str(), Html.Length() ); OleCheck( CreateStreamOnHGlobal( hHTMLText, true, &Stream ) ); try { #ifndef fmTestH #include #include "fmTest.h" MInfo->Lines->Clear(); MInfo->Lines->Add(Format("There are %d total CPU in your system",ARRAYOFCONST((GetCPUCount())))); for (i=0; i < GetCPUCount(); i++) MInfo->Lines->Add(""); CollectCPUData(); MInfo->Lines->BeginUpdate(); for(i=0; i < GetCPUCount(); i++) MInfo->Lines->EndUpdate(); 現在許多把程式中需要的資料儲存在登錄檔中,這樣當裝的軟體越來越多時,致使登錄檔越來越龐大,容易使系統出錯。 一、下面的例子使用 Winsock API 取得本地主機的名字及地址 #ifndef Unit1H ////unit.cpp #include #include "Unit1.h" } void __fastcall TForm1::Button1Click(TObject *Sender) AnsiString t; void __fastcall TForm1::Button2Click(TObject *Sender) for(i=0;i void __fastcall TForm1::Button3Click(TObject *Sender) 怎樣實現將Memo的文字資訊列印出來 TPrinter * pPrinter=Printer();
Table1->Filtered=false;
Table1->Filter=Edit1->Text;
Table1->Filtered=true;
Edit1->Text=內容是:欄位是字元 name='zzz' and age>18 and sex!='男'
FilterOption<
建立臨時表createbuttonclike()
{ if(!Table1->Exists){
Table1->Active=false;
Table1->DatabaseName="MSACCESS1";//建立一樣的表結構
Table1->TableType=ttDefault;
Table1->TableName="SCadd";
Table1->FieldDefs->Clear();
Table1->FieldDefs->Add("Sno",ftInteger,0,false);//欄位名,型別,小數位或長度,是否唯一
Table1->FieldDefs->Add("Cno",ftInteger,0,false);
Table1->FieldDefs->Add("Grade",ftInteger,0,false);
Table1->CreateTable();}
Table1->Active=true;}
ExitButtonClik()
{ Table2->BatchMove(Table1,batAppend);
batUpdate//用原表的記錄目標表的記錄;
batAppendUpdate//把原表不存在於目標表的記錄新增到目標表的末尾
batDelete//刪除原表在目標表中重複的記錄
batCopy//把原表複製到目標表
Table1->Active=false;
Table1->DatabaseName="MSACCESS1";
Table1->TableType=ttDefault;
Table1->TableName="SCadd";
Table1->DeleteTable();
}
一、用C++Builder設計自己的瀏覽器
在此ToolBar控制元件放入一ComBox框,並加上五個ToolButton,設定其Name屬性分別為“CppWebBrowser1”,“ToolBar1”,“ CB_URL”,
“ TB_Prior,TB_Forward,TB_Stop,TB_Fresh,TB_Navigate”。
有時需分析html檔案的原始檔,用C++ Builder的 NMHTTP控制元件可以輕鬆解決這個問題。
在Form1的OnCreate事件鍵入程式碼:
{
IStream *Stream;
HGLOBAL hHTMLText;
IPersistStreamInit *psi;
return;
hHTMLText = GlobalAlloc( GPTR, Html.Length() + 1 );
if( 0 == hHTMLText ) {
ShowMessage( "GlobalAlloc Error" );
return;
}
OleCheck( WebBrowser->Document->QueryInterface( __uuidof(IPersistStreamInit), (void **)&psi ) );
try {
OleCheck( psi->InitNew() );
OleCheck( psi->Load(Stream) );
} catch( ... ) {
delete psi;
}
} catch( ... ) {
delete Stream;
}
delete psi;
delete Stream;
}
cpu使用情況
#define fmTestH
#include
#include
#include
#include
#include
class TTestFo: public TForm
{
__published: // IDE-managed Components
TLabel *LbAldynUrl;
TMemo *MInfo;
TTimer *Timer;
void __fastcall LbAldynUrlClick(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall TimerTimer(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TTestForm(TComponent* Owner);
};
extern PACKAGE TTestForm *TestForm;
#endif
#pragma hdrstop
#include "adCpuUsage.hpp"
#pragma package(smart_init)
#pragma resource "*.dfm"
TTestForm *TestForm;
__fastcall TTestForm::TTestForm(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TTestForm::LbAldynUrlClick(TObject *Sender)
{
ShellExecute(Application->Handle, "open", ",
NULL, NULL, SW_SHOWDEFAULT);
}
void __fastcall TTestForm::FormCreate(TObject *Sender)
{
int i;
}
void __fastcall TTestForm::TimerTimer(TObject *Sender)
{
int i;
MInfo->Lines->Strings[i+1] = Format("CPU #%d - %5.2f%%",ARRAYOFCONST((i,GetCPUUsage(i)*100)));
如何儲存程執行資訊到ini檔案
當然,也建議在登錄檔中儲存資料,但當我們需要儲存的資料不多時完全可以把資料儲存在WIN.INI中,這樣可以很方便地維護,
實現方法相對來說比較簡單。下面我以Borland C++ Builder為例來說說如何實現。
原理其實很簡單,只需呼叫API的 WriteProfileString和GetProfileInt函式就可以了。這兩個函式的原型是:
BOOL WriteProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString );
UINT GetProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault);
其中lpAppName指在WIN.INI中段的名字,即用[]括起來的字串,lpKeyName指在這個段中每一個專案的名字,lpString指這個專案的值,
即“=”後的數, nDefault為當GetProfileInt沒有找到lpAppName和lpKeyName時返回的值,即預設值,前者返回為布林值(true 或 false),
後者返回為無符號整形值。當在WriteProfileString函式中 lpKeyName 為空(NULL)時,則清除這個段的全部內容,lpString 為空時,
則清除這一專案的內容,即這一行將清除掉。
下面舉一例子來說明這兩個函式的用法。新建一個應用程式,在Form1上放兩個Edit和三個Button,其中Edit的Text為空,
三個Button的Caption分別為“新增”、“檢視”、“清除”。雙擊“新增”按鈕加入下面程式碼:
WriteProfileString(“例子程式”,“專案”,Edit1→Text.c_str());
雙擊“檢視”按鈕加入如下程式碼:
unsigned int Temp;
Temp=GetProfileInt(“例子程式”,“專案”,100);
Edit2→Text=IntToStr(Temp);
雙擊“清除”按鈕加入如下程式碼:
WriteProfileString(“例子程式”,NULL,NULL);
然後按F9鍵執行程式。
下來可以檢驗一下程式的正確性。在Edit1中輸入數字,如“3265”,按“新增”按鈕,這時執行“sysedit”來檢視
“WIN.INI”檔案的最後面,可以看到加入瞭如下內容:
[例子程式]
專案=3265
其中“[]”和“=”是函式自動加上的。按下“檢視”按鈕,在Edit2中出現“3265”,當按下“清除”按鈕可清除新增的部分。
經過檢視可知程式已達到預期的目的。
喜愛程式設計的朋友可以把上述方法應用到自己的程式中去,來達到儲存資料資訊的作用。當確實要把資訊儲存到登錄檔中,
可以在C++ Builder中定義一個TRegistry類的物件來進行相關的操作,或者直接呼叫Windows的API函式.
取得本地internet機器的名字及IP地址取得本地internet機器的名字及IP地址
void __fastcall TForm1::Button1Click(TObject *Sender)
{
hostent *p;
char s[128];
char *p2;
the computer name
gethostname(s, 128);
p = gethostbyname(s);
Memo1->Lines->Add(p->h_name);
the IpAddress
p2 =_ntoa(*((in_addr *)p->h_addr));
Memo1->Lines->Add(p2);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WORD wVersionRequested;
WSADATA wsaData;
up WinSock
wVersionRequested = MAKEWORD(1, 1);
Wtartup(wVersionRequested, &wsaData);
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
WSACleanup();
}
修改顯示方式的:
#define Unit1H
#include
#include
#include
#include
#include "MyEdit.h"
#include
#include
#include
#include
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TButton *Button1;
TLabel *Label1;
TButton *Button2;
TListBox *ListBox1;
TButton *Button3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
DEVMODE table[400];
bool Listed;
};
extern PACKAGE TForm1 *Form1;
#endif
#include
#pragma hdrstop
#pragma package(smart_init)
#pragma link "MyEdit"
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Listed=false;
Button2->Enabled=false;
Button3->Enabled=false;
{
DWORD index=0;
bool flag;
do{
flag=EnumDisplaySettings(NULL,index,& table[index]);
if(flag)
{
if( table[index].dmPelsWidth<640) ;
else if (table[index].dmBitsPerPel<8) ;
else if (table[index].dmDisplayFrequency>85);
else if( table[index].dmPelsWidth>1024) ;
else
{
AnsiString st;
st=index;
st+=" ";
st+=table[index].dmPelsWidth;
st+=" X ";
st+=table[index].dmPelsHeight;
st+=" X ";
st+=table[index].dmBitsPerPel;
st+=" X ";
st+=table[index].dmDisplayFrequency;
ListBox1->Items->Add(st);
}
}
index++;
}while(flag & index<300);
t.sprintf(" %d Modes Found",index);
Label1->Caption=t;
Listed=true;
Button2->Enabled=true;
}
{
int i;
if(!Listed)
{
Label1->Caption="List display modes first.";
return;
}
{
if(ListBox1->Selected[i])
{
int x;
String st,st1;
st=ListBox1->Items->Strings[i];
x=st.Pos(" ");
st1=st.SubString(1,x-1);
x=st1.ToInt();
Label1->Caption=x;
ChangeDisplaySettings(&table[x],0);
break;
}
}
if(i==ListBox1->Items->Count)
Label1->Caption="Select a modes first.";
Button3->Enabled=true;
int r=MessageBox(0,"can you see anything?","display",MB_OKCANCEL);
if(r==IDCANCEL)
Button3Click(Sender);
else
Button3->SetFocus();
}
{
ChangeDisplaySettings(NULL,0);
Button3->Enabled=false;
}
pPrinter->Title="列印Memo1中的資料";
pPrinter->BeginDoc();
int y=10;
for(int i=0;i
{
pPrinter->Canvas->TextOut(10,y,Memo1->Lines->Strings[i]);
y+=pPrinter->Canvas->TextHeight("A");
}
pPrinter->EndDoc();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle經驗集錦(轉)Oracle
- 經驗談集
- PHP經驗集錦PHP
- Oracle經驗技巧集Oracle
- 前端經驗 – 收藏集 – 掘金前端
- ORACLE使用經驗(轉)Oracle
- Lotus 經驗談(轉)
- Oracle erp 經驗問題集Oracle
- JAVA一年經驗的面試集Java面試
- Tcpdump的小經驗(轉)TCP
- ERP經驗談(轉)
- vc除錯經驗 (轉)除錯
- PMP備考經驗(轉)
- 博文推薦|零經驗玩轉隔離策略:多個 Pulsar 叢集
- JBOSS維護經驗(轉載)
- ORACLE應用經驗(2)(轉)Oracle
- TurboLinux使用經驗談(轉)Linux
- CVS使用經驗談 (轉)
- UNIX 安全構架經驗(轉)
- ORACLE應用經驗(1)(轉)Oracle
- Native轉型Flutter經驗分享Flutter
- 轉載-知乎工作後的經驗
- 10年跳槽經驗總結(轉)
- PMP考試經驗談(五)(轉)
- PMP考試經驗談(一)(轉)
- PMP考試經驗談(二)(轉)
- CCNA初學者學習經驗!(轉)
- SCO UNIX 一些經驗(轉)
- 工程專案經理部組織經驗談(轉)
- 一個專案經理的經驗總結(轉)
- 世界經濟論壇:產業叢集轉型產業
- 【轉】外企英文面試經典考題集錦面試
- (轉)例項分析:MySQL優化經驗MySql優化
- 城市駕車21條經驗(轉貼)
- Win32ASM經驗點滴 (轉)Win32ASM
- .Net設計經驗(轉自評論)
- 英文投稿的一點經驗【轉載】
- UniX技術 AIX實戰經驗(轉)AI