程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> BCB編程經驗幾則

BCB編程經驗幾則

編輯:關於C++

問:怎麼實現TRichEdit的自動滾行?象某些閱讀器那樣的功能。

答:用ScrollWindowEx或者ScrollWindowEx就可以了。

ScrollWindow(RichEdit1- >Handle, 0, -1, NULL, NULL); //向下滾1個像素

ScrollWindow(RichEdit1- >Handle, 0, 1, NULL, NULL); //向上滾1個像素

問:在下最近在自己編組件,按照BCB的幫助提示做好了圖標,也按照它的提示建立了聯系,

但就是看不到自己的圖標,只有默認的!!!

答:用IMAGE EDITOR編輯DCR文件,記信圖標名稱必須和組件名稱相同,我說的是圖標名稱,不是文件名稱。生成DCU文件後,用BRCC32.EXE對該DCR文件進行編譯生成DCU文件,將DCU文件加入到BPK包中,編譯、安裝包應可以看到你自制組件的包了。

問:物理刪除記錄,用ADO壓縮Access2000庫的方法?

答:用ADO壓縮Access2000庫

#include "utilcls.h"
void CompactDatabase(String f1,String psw1, String f2,String psw2)
{
String Provider1="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
  + f1 + ";Jet OLEDB:Database Password=" + psw1;
String Provider2="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
  + f2 + ";Jet OLEDB:Database Password=" + psw2;
Variant Adoobj=Variant::CreateObject("JRO.JetEngine");
Adoobj.OleProcedure("CompactDatabase",Provider1,Provider2);
AdoObj.Clear();//釋放ADO對象
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String f1="yhecdagl1.mdb"; // 源庫1
String psw1="yhecdagl"; // 密碼1
String f2="yhecdagl2.mdb"; // 新目的庫2
String psw2="yhecdagl2"; // 新密碼2
String dir=ExtractFilePath(Application->ExeName);
if(FileExists(f2))
  DeleteFile(f2);
CompactDatabase(dir+f1,psw1,dir+f2,psw2);
ShowMessage("Finished");
}

問:能否通過按鈕使用SQL創建一個名為a.db的文件?

答:這兒一個db文件就是一個數據表,所以可以通過創建表的方式來創建。

通過SQL語句就可以了,通過SQL語句我們可以創建不僅僅是表,還有別的很多,如字段等

Query1->Close;
Query1->DatabaseName="c:\temp";
Query1->SQL->Text="create table a.db (field1 varchar(10),field2 varchar(10))";
Query1->ExecSQL;

問:TMediaPlayer如何用MediaPlayer1播放mp3?

設備類型指定了好幾種怎麼都不行?MediaPlayer1->DeviceType 為dtCdAudio,

dtDAT,dtOther,dtSeqencer,dtWaveAudio,dtAutoSelect都不行!;應怎麼做才行?

答:

1.我來說說。MediaPlayer本身是高用windows提供的dll來工作的,但是由於bcb不是ms的,所以。。。在win98下的話,你可以查找到win.ini,在win.ini裡修改東東就行了。

[mci extensions]

mp3=MPEGVideo

2.你可以用SndPlaySound函數來播放

char *tStream=new char...;

可以先用TFileStream把文件讀到內存中,Read到tStream中

SndPlaySound(tStream,SND_MEMORY);

問:[TRichedit]:如何帶格式存儲Richedit內容到Access?

答:用AnsiString!!!!

具體方法如下,設保存RichEdit的字段為RichField:

TStringStream *pms=new TStringStream(NULL);
TStringList *StrList=new TStringList();
RichEditContent->Lines->SaveToStream(pms);
pms->Position = 0;
StrList->LoadFromStream(pms);
RichField->AsString=StrList->Text;

問:請問有什麼辦法使得子form一直留在最前面?

答:主要是重載Form的虛擬函數CreateParams, 改變TCreateParams的成員WndParent就可以了

class TForm2 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
protected:
   virtual void __fastcall CreateParams(TCreateParams & Param);
public: // User declarations
   __fastcall TForm2(TComponent* Owner);
};
void __fastcall TForm2::CreateParams(TCreateParams & Param)
{
//調用基類的函數
TForm::CreateParams(Param);
Param.ExStyle |= WS_EX_TOPMOST;
//這兒最關鍵的是只要Param.WndParent不是Application- >Handle就可以了,
//不一定非要用GetDesktopWindow(),用其它的窗口也可以。
Param.WndParent = GetDesktopWindow();
}

問:[TTabSheet]怎麼改變TabSheet標題部分的小矩形顏色。

小弟這樣做的:

//TabSheet1- >PageControl = PageControl1;

TabSheet1- >Brush- >Color = clBlue;

上面的小矩形仍然為灰色。

PageControl1- >Brush- >Color = clBlue;

整個pagecontrol都變藍色了,就是那個小矩形還灰色。

答:OwnDraw=true;

void __fastcall TForm1::TabControl1DrawTab(TCustomTabControl *Control,
int TabIndex, const TRect &Rect, bool Active)
{
  Control- >Canvas- >Brush- >Color=clRed;
  Control- >Canvas- >Rectangle(Rect);
}
-----------------------------------------

PageControl也差不多,如果要不同的TabSheet有不同的顏色,可以判斷TabIndex

void __fastcall TForm1::PageControl1DrawTab(TCustomTabControl *Control,
int TabIndex, const TRect &Rect, bool Active)
{
  Control- >Canvas- >Brush- >Color=clGreen;
  Control- >Canvas- >Pen- >Color=clGreen;
  Control- >Canvas- >Rectangle(Rect);
}

問:我想寫一個互斥量,但是怕和系統中的互斥量同名,有不有辦法便利系統中的互斥量?

答:看CreateMutex 的幫助,如果你創建時返回ERROR_ALREADY_EXISTS,表示已經存在了,你就再換一個名字創建啊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved