荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Chair (ASD), 信区: Program
标  题: C++BUILDER FAQ1
发信站: BBS 荔园晨风站 (Wed Feb  2 11:24:43 2000), 转信

--------------------------------------------------------------------------------
----------------------
标  题: Re: 谁能介绍一下多线程编程的经验?
发信站: BBS 水木清华站 (Sun Jan  9 11:21:13 2000)

1,要#include <process.h> 在VC里要/MT编译,要连接正确的LIB
2,开个线程,用WIN32的函数。线程要修饰一下怎么调用,如__stdcall....
3,thread safe. 同步。
【 在 jugular (面色惨白) 的大作中提到: 】
: 希望能不吝指教。

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

发信人: fixit (螺丝钉), 信区: C++Builder
标  题: Re: C++Builder 作出来的DLL怎么在VC中使用?
发信站: BBS 水木清华站 (Sat Jan  8 22:32:59 2000) WWW-POST

【 在 TopazY (sable) 的大作中提到: 】
: 用 CB中 implib生成的输入库VC不认,而VC(5。0以上版本)又未带该
: 工具。
: 怎么办?
: 不要建议我用动态装载,我试了,好使,不过太麻烦。



关于这个问题我是采用以下方法解决的:

1、首先建立一个DEF文件(假设为A.DEF),内容如下所示:

    LIBRARY dllname.dll
    EXPORTS
        function1       @1
        function2       @2
        function3       @3

其中functionx名称的字母排序必须与@后面的顺序号一致(不要问我为什么,
这是我通过反复的试验才知道的)。

2、然后生成库文件,命令行格式如下(假设你的机器为Intel或其兼容机):

    lib /machine:ix86 /def:A.DEF

成功后回生成文件dllname.lib,

3、建立正确的头文件,格式如下:

    extern "C" __declspec(dllimport) type1 funparent属性为true即可.

【 在 sender (你好 ) 的大作中提到: 】
: 大虾们,我想使一个label在一个Form中只显示
: Caption的文字,看不到他的背景
: 那为大虾能够告知?



下面这段代码也许可以让你实现:
    先将Form属性设为bsSizeable,将WindowState设为wsMaximized,然后(~WS_CAPTION));
        ClientHeight=Height;
   }

    贺国华( heguohua@263.net ) 于 1998.9.7

-----Original Message-----
楷璃 : 许浈翔 <nep2314@ms21.hinet.net>
 璃 : <BCBChat@vclxx.com>
  : 1998烂9 5  21:23
  : [BCB][Component] 请问Fomt

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

发信人: zodiac (zozo), 信区: BCB
标  题: Re: 修改注册表的问题
发信站: BBS 水木清华站 (Fri Mar  5 14:23:54 1999)

【 在 dyfu (windwolf) 的大作中提到: 】
:   在修改时要指定路径应该用TRegIniFile的什么方法?
: 是不是用RootKey或CurrentKey中的一个?
RootKey是注册表的根键值,比如运行regedit后看到的HKEY_USERS,HKEY_LOCAL_MACHINE
就是RootKey,在TRegIniFile中缺省的RootKey是HKEY_USERS.
下面的例子是TRegistry的,TRegIniFile也差不多

void __fastcall TfrmMainForm::WriteToMyRegistry(int table_count)
{
    //TODO: Add your source code here
    TRegistry *MyRegistry=new TRegistry;
    MyRegistry->RootKey=HKEY_LOCAL_MACHINE;
     //改变缺省Rootkey
    if(!MyRegistry->OpenKey("Software\\Microsoft\\Windows\\Current\
                                Version\\Run",true)) //打开主键
       //这样双引号里面的东西就变成了CurrentKey
       {
         Application->MessageBox("注册表内容无效",
                                 "读取注册表出错",MB_ICONE
          "读取注册表出错",MB_ICONERROR);
         MyRegistry->CloseKey();
         delete MyRegistry;
         return;
        }
    MyRegistry->WriteString("myrun","c:\\sthvcd\\sthvcd.exe");
     //超级结巴就是这么干的;-)
    MyRegi------------------------


标  题: Re: 请教:为啥bcb编译后的程序不能在没有bcb编译的系统上运行(bcb3.0)
发信站: BBS 水木清华站 (Wed Dec  2 20:25:52 1998) WWW-POST

【 在 racoon (不可不戒) 的大作中提到: 】
:
: 【 在 aitsing (Lover tsing) 的大作中提到: 】
:
:   Project->Options->linker页中的项全部选空,再转道compiler页,按下release键
: 。
:
: 重新builder,然后将生成的exe文件和vcl35.bpl文件拷到同一目录下。
:  还有一种更简单的,但一时想不起来了。

总共两处要设置:
  1. 如上,把linker页里的Use Rtl 检查框取消即可,其他可以不理。
  2. 在opions->Directorys/Conditionals页里,有一个Conditional Defines:字符后面
 的 Edit框 里面如果有字符串"USEPACKAGE" 把它去掉后(去掉它可能稍麻烦点),要确
信把它
去掉。
   重新Builder 就一切OK了。不需要VCL35.BPL文件,独立的EXE 文件随便到你喜欢的地
方使用。用到的.OCX文件当然不能少。

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

发信人: sbpl (中国人), 信区: C++Builder
标  题: Re: [Database]怎么才能让BCB支持MS ACCESS?
发信站: BBS 水木清华站 (Mon Dec 13 12:53:00 1999)

【 在 DreamTiger (老虎) 的大作中提到: 】
: 好象只能用dbase和paradix的,怎么才能用access的库文件?
  拖一个TDatabase 部件,在对象管理器中设置DriverName的值为MSACCESS,
  Params中添加一行 Database Name = Driver:\path\??????.mdb
 一个字符串假设为'firstmdb'。
  好啦,你可以用啦。
  当你拖一个TTable 部件后在对象管理器中的Database属性中,会多出一个选项
  “firstmdb”
  知道怎么用了吗? Ok,Good-bye!

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

发信人: xinhe (心鹤), 信区: BCB
标  题: Re: Form上被覆盖的东西如何重新paint?
发信站: BBS 水木清华站 (Mon Nov  9 13:31:00 1998) WWW-POST

【 在 jy (Goldren) 的大作中提到: 】
:    ------Just try use the mothed named repaint.

  BCB里的Canvas和Windows SDK编程里的HDC一样,只是表示了屏幕上的某
  一个区域,而并不负责保存窗口里的内容,所以窗口的刷新应该由自己控
  制,也就是响应WM_PAINT消息,即BCB里的OnPaint事件。

void __fastcall TForm1::FormPaint(TObject *Sender)
{
    Canvas->TextOut(0,0,"I Love BCB");
}
//---------------------------------------------------------------------------


void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    Panel1->Visible=true;

}
}
//---------------------------------------------------------------------------


void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
     Panel1->Visible=false;
}


  另外一种方法就是显示“I Love BCB”里也用一个Image控件,因为Image本身
  包含了TBitmap对象,可以保存图像信息,所以也可以完成同样的功能。

void __fastcall TFoer)
{
    Panel1->Visible=true;

}
//---------------------------------------------------------------------------


void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
     Panel1->Visible=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
    Image1->Picture->Bitmap->Width=Image1->Width;
    Image1->Picture->Bitmap->Height=Image1->Height;
    Image1->Picture->Bitmap->Canvas->TextOut(0,0,"I Love BCB");
--------------------------------------------------------------------------------
--------


发信人: capton (一刀斋(发呆中)), 信区: BCB
标  题: Re: 怎样得到应用程序的当前路径?
发信站: BBS 水木清华站 (Fri Nov  6 17:09:24 1998)

【 在 jy (Goldren) 的大作中提到: 】
:   如题。
:   谢谢!

AnsiString RunningDir;

RunningDir=Application->ExeName.SubString(1,
                Application->ExeName.LastDelimiter("\\"));
这是我每个程序中都有的一句,呵呵
这是程序运行目录。
GetCurrentDir()得到当前目录

用ParamStr(ParamCount),当ParamCount=0时,可得到程序的路径及名称。
ExtractFilePath(Application->ExeName)也行

发信人: FlyingBoy (小飞侠), 信区: BCB
标  题: Re: 如何识别动态加入的控件
发信站: BBS 水木清华站 (Thu Nov 12 18:21:39 1998)

【 在 FangQ (奥萨马·本·拉登) 的大作中提到: 】
: 我原来只能用if(this->Component[i ==XXX)或if(this->Component[i]->Tag==XXX)
: XXX为new时设定的这样一来只要访问一次就得把所有的子组件判断一遍,很不划算
: 哪为有好的方法,讨教讨教

用TList,每当创建一个控件,就把指针家入List
--

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

发信人: greenlet (flyingbird), 信区: BCB
标  题: Re: 有响应win98关机时的事件吗?
发信站: BBS 水木清华站 (Mon Nov 16 12:51:22 1998)

参看WM_QUERYENDSESSION和WM_ENDSESSION消息.
萂emo里面,然后用Memo->Lines->Delete(i) i=0~2
然后再SaveToFile
我没试,你试试
【 在 tq (天天) 的大作中提到: 】
: 有一批数据采集文件,前几行均是采集标志,
: 我想编个程序把它们统统删掉,
: 请各位提供简便的编程方法和思路。

那不如读到TStringList中,何必用Memo。

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

发信人: dali (大李), 信区: BCB
标  题: Re: 请教:为啥bcb编译后的程序不能在没有bcb编译的系统上运行(bcb3.0)
发信站: BBS 水木清华站 (Wed Dec  2 20:25:52 1998) WWW-POST

【 在 racoon (不可不戒) 的大作中提到: 】
:
: 【 在 aitsing (Lover tsing) 的大作中提到: 】
:
:   Project->Options->linker页中的项全部选空,再转道compiler页,按下release键
: 。
:
: 重新builder,然后将生成的exe文件和vcl35.bpl文件拷到同一目录下。
:  还有一种更简单的,但一时想不起来了。

总共两处要设置:
  1. 如上,把linker页里的Use Rtl 检查框取消即可,其他可以不理。
  2. 在opions->Directorys/Conditionals页里,有一个Conditional Defines:字符后面
 的 Edit框 里面如果有字符串"USEPACKAGE" 把它去掉后(去掉它可能稍麻烦点),要确
信把它
去掉。
   重新Builder 就一切OK了。不需要VCL35.BPL文件,独立的EXE 文件随便到你喜欢的地
方使用。用到的.OCX文件当然不能少。

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

发信人: scallion ( 清 华 一 颗 葱 ), 信区: BCB
标  题: Re: 如何获得当前拥有Focus的窗口? (转载)
发信站: BBS 水木清华站 (Tue Dec  1 15:40:00 1998)

【 在 likestar (爱星) 的大作中提到: 】
: 【 以下文字转载自 Programming 讨论区 】
: 【 原文由 likestar 所----------------------------------------

发信人: FlyingBoy (小飞侠), 信区: BCB
标  题: Re: SendKey ???
发信站: BBS 水木清华站 (Sat Dec  5 08:51:41 1998)

【 在 likestar (爱星) 的大作中提到: 】
: 如何在BCB中获得类似于VB中的SendKey()的效果?
: 也就是说想在程序中发送Ctrl+C , Ctrl+V的键组合。
: 该怎么办呢?谢谢。

用SendMessage或Postmessage发送WM_CHAR消息。

--------------------------------------------------------------------------------
----------------------
-
发信人: fjl (雪夜流星~~这一次,我绝不放过), 信区: BCB
标  题: [CB]未公开的代码编辑热键----左移或右移整块代码! (转载)
发信站: BBS 水木清华站 (Mon Jan  4 09:38:16 1999)

【 以下文字转载自 VisualBasic 讨论区 】
【 原文由 Zeemon 所发表 】
选中一块代码,反白後,
 (1)按 CTRL+ K,松开,再按 I 是整片往右移;
 (2)按 CTRL+ K,松开,再按 U 是整片文字往左移.
或者,反白後,
 (1)按 CTRL+ SHIFT+ I 是整片往右移,
 (2)按 CTRL+ SHIFT+ U 是整片文字往左移.

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

发信人: fjl (雪夜流星~~这一次,我绝不放过), 信区: BCB
标  题: [CB3]编译含有 MFC 的程式 (转载)
发信站: BBS 水木清华站 (Mon Jan  4 09:38:57 1999)

【 以下文字转载自 VisualBasic 讨论区 】
【 原文由 Zeemon 所发表 】
        C++ Builder 3.0 下编译含有 MFC 的程式


虽然说 C++ Builder 3.0 是 Borland C++ 5.02 的下一个版本,一样支援 MFC ,
但若要在C++ Builder 3.0 下使用 MFC 并不简单。不是直接写个 MFC native
Code 并在 Project Option 中再勾选个 MFC Compatibility 这麽简单,若你只这样
做,保证你在编译时一定会得到一堆的 Warnning 与 Error。

要让你与 BCB 都能够轻松的编译 MFC ,我们所必需的就是自己动点手脚,并将这个
动过手脚的 Project 档给放到 Object Repository;之後,你只需要?:

_X86_
_WINDOWS
_MSC_VER=1100
_AFX_PORTABLE
_AFX_NOFORCE_LIBS
_MT
_CRT_PORTABLE
_AFX_NO_DEBUG_CRT

这几个编译用的参数。
并记得在 include path 加入 $(BCB)\include\MFC 这一项。

Step 3、
接著在 Advance Compilers 这一页里将 MFC Compatibility 给勾选起来,

Step 4、
紧接著,将档案给存起来,里用文字编辑器来修改这个 Project 的 bpr 档。
找到 CFLAG1 = ...... 这一行
将这一行给为
CFLAG1 = -Od -Hc -w -k -r- -y -v -vi- -c -w-par -w-inl -w-hid -w-aus -g0
                -WM -W

再找到 CFLAG3 = ...... 这一行
将这一行给?.. 这一行
将这一行给为
ALLLIB = $(LIBFILES) $(LIBRARIES) nafxcw.lib import32.lib cw32mt.lib


接著就是存档罗!

Step 5、
这样一来,就可以直接在BCB3下享用MFC罗!

不可不知道

在此范例中,所编译出来的档案将会是 static link 的版本,并非 dynamic link,
要怎麽样在 BCB 3 下做 dynamic link MFC library 呢?在此先卖个关子,看看
BCB 里所附上的范例吧!

此外,在 BCB 有很多方式来链结 VCL 与 MFC,大致可分为两类 :

1、以   TApplication 为主体,而程式中混合使用 VCL与 MFC 所提供的其他类,如
CDC、CPoint、CFile 等等.....。
2、以 MFC 的 CApp 为主体,在选单中呼叫 VCL 所组合而成的 Form。

而这两类要怎麽样在 BCB 里完成呢?动动您的脑筋想想看吧!

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

发信人: fjl (雪夜流星~~这一次,我绝不放过), 信区: BCB
标  题: [CB]BCB中派生VCL类及动态地创建控件 (转载)
发信站: BBS 水木清华站 (Mon Jan  4 09:38:40 1999)

【 以下文字转载自 VisualBasic 讨论区 】
【 原文由 Zeemon 所发表 】
以生成一个TMemo的派生类及动态地创建该VCL控件为例。
Class TMemoEx : public TMemo
{
 .
 .
}
extern TMemoEx memoex;

Class TForm1 : Class TForm
{
public:
 TMemoEx   *MemoEx;
 .
 .
}

void _fastcall  TForm1::FormShow(TObject *Sender)

{
 MemoEx=new TMemoEx(this);
 MemoEx->Parent=this;
 .
 .
}
总之,遵循以下步骤即可:
 类定义;
Ex=new TMemoEx(this);
 MemoEx->Parent=this;

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

发信人: fjl (雪夜流星~~这一次,我绝不放过), 信区: BCB
标  题: [CB]实现BLOB字段的读写 (转载)
发信站: BBS 水木清华站 (Mon Jan  4 09:38:46 1999)

【 以下文字转载自 VisualBasic 讨论区 】
【 原文由 Zeemon 所发表 】
        CB中实现BLOB字段的读写
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
BLOB字段的读取:
 TBlobSTream* TemplateStream;
 char* TempPlatePtr;

 TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
                        ("SearchTem"),bmReadWrite);
 TemplatePtr= new char[TemplateStream->Size];
 TemplateStream->Read(TemplatePtr, TemplateStream->Size);

BLOB字段的写入:
 TBlobSTream* TemplateStream;
 char* TempPlatePtr;

 TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
                        ("SearchTem"),bmReadWrite);
 TemplatePtr= new char[TemplateStream->Size];
 TemplateStream->Write(TemplatePtr, TemplateStream->Size);

________________________________________________________________
补充:
获得字段的大小用函数datalength

SQL Server端要作一点设置:
By default, WRITETEXT is a nonlogged operation. This,然后调用Edit函数;
2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
使得TTable(TQuery)是可写的.

下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
script为一个BLOB字段:
   TBlobStream *pScriptStream;
  //插入一条记录
        strSQL1="insert  into  content(file_id,script,key_image) values('";
        strSQL1=strSQL1+m_szFileID+"',null,null)";
        dmStoryEditor->qryExec->SQL->Clear();
        dmStoryEditor->qryExec->SQL->Add(strSQL1);
        dmStoryEditor->qryExec->ExecSQL();
        dmStoryEditor->qryExec->Close();
  //整理要写入的Blob数据
        LockMemories(NewsScript);
        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
        if(NewsScript.m_pScript!=NULL)
        {
   //再将刚插入的记录读出来,使该Query与该条记录关联
        strSQL1="select  file_id,script  from  content  where  file_id='"+
                m_szFileID+"'";
   //允许该Query写
            dmStoryEditor->qryExec->RequestLive=true;
            dmStoryEditor->qryExec->SQL->Clear();
            dmStoryEditor->qryExec->SQL->Add(strSQL1);
            dmStoryEditor->qryExec->Open();
            dmStoryEditor->qryExec->First();
   //将该Query置为可写
            dmStoryEditor->qryExec->Edit();
            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor->
                                qryExec->FieldByName("script"),bmReadWrite);
            pScriptStream->Write(NewsScript.m_pScript,
                                        NewsScript.m_lScriptRealSize);
            dmStoryEditor->qryExec->Post();
            dmStoryEditor->qryExec->RequestLive=false;
            delete pScriptStream;
       }
       GlobalUnlock(NewsScript.m_hScript);
       UnLockMageDlg的caption部分怎样汉化?
发信站: BBS 水木清华站 (Thu Jan  7 10:51:20 1999) WWW-POST

可以呀,用MB_OK|MB_ICONWARNING。参考Win32 Reference
【 在 heiheihei (嘿嘿嘿) 的大作中提到: 】
: 【 在 lenlon (九天) 的大作中提到: 】
:
: 我指的是那种带有一个小图片的MessageDialog ,
: 比如warning带一个黄色的"!",confirm带一个
: "?".程序默认的Caption部分是英文,这些东西怎样
: 改为中文?
:
: 如果用MessageBox("text","caption",MB_YESNO);
: 按照帮助上说,是不能加上"!"等小图标的,请问
: 我该怎么办??

发信人: FlyingBoy (天外飞仙), 信区: BCB
标  题: Re: 如何得到控件的ID号?
发信站: BBS 水木清华站 (Sat Jan 16 08:56:32 1999)

【 在 ab (紫琼) 的大作中提到: 】
:   有些API如DlgDirList需要控件的ID号, 而象
: TLabel这样的控件连Handle都得不到,
: 怎么得到ID号?  请高手们指点一下吧.

VCL中有两类控件,一类是可视的,如TLabel,TEdit。另一类是非可视的,如TTimer
可视的又分为两类,一类作为Windows系统的窗口,如TEdit,TMemo等,它们是从
TWinControl继承来的,做为Widnows系统的窗口,当然有Handle属性。
另一类直接从TControl继承来,不作为Windows系统的窗口,如TLabel.
这类控件不能有Focus,Windows不可能直接给它发送消息,Windows把消息发送
给Form,由Form判断是否调用这类控件的消息处理函数。

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

发信人: heiheihei (嘿嘿嘿), 信区: BCB
标  题: Re: 在BcB中如何启动Word,Notepad等应用程序?
发信站: BBS 水木清华站 (Sat Mar  6 14:56:30 1999) WWW-POST

【 在 noix (枭枭) 的大作中提到: 】
: 如题。

俺没看太懂 :(
你意思是说在程序中调用外部应用程序吗?
如果然微软不推荐使用的东西总让人不放心

我建议对一般调用打开文档或什么发送email,打开URL,
都可以使用ShellExecute,简洁,明了.
而且可以不管是不是装了WORD或者其他
比如打开一个DOC文件,万一用户机器里没有WORD呢,是WPS20000
再说你怎么知道用户把WORD放哪儿了......

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

发信人: Fishman (鱼~戒网中...), 信区: BCB
标  题: 谈谈动态建立控件及其事件处理
发信站: BBS 水木清华站 (Wed Apr 14 20:57:23 1999)

             谈谈动态建立控件及其事件处理

说明:1) 最近帮人做一个小程序,用到这方面的内容;
      2) 网上的文章都不是很完整;
      3) 有不足之处或其它建议,请各位网友赐教。

举例:建立10个TLabel控件和10个TButton控件,并使用同一个事件处理函数。

实现:
      1) New Application

      2) 画TButton Button1,在Button1Click(TObject *Sender)中写以下程序:

        void __fastcall TForm1::Button1Click(TObject *Sender)
        {
            TLabel *lbl;
            TButton *btn;

          //建立10个Tlabel控件数组
          for (int i=0;i<10;i++) {
            lbl = new TLabel(this);              //建立一个TLabel
            lbl->Parent=this;                    //设置Parent属性
            lbl->Name="MyLabel"+String(i);       //设置Name属性
            lbl->Caption=lbl->Name;              //设置Caption属性
            lbl->Left=i*80+20;                   //设置坐标
            lbl->Top=0;
            lbl->OnClick=ControlClick;           //设置事件Click Event
            lbl->Visible=true;                   //显示
          }

          //建立10个TButton控件数组
         nder)
        {
         TComponent *ctl;

         ctl=(TComponent *)Sender;

         //这里可以用switch(ctl->Name),case语句做一些复杂的控制
         ShowMessage(ctl->Name);
        }


最后:运行,按一下Button1,出现结果。当然,再按一下就出错啦:PPP

提示:最好把动态建立的控件delete or free掉。

--------------------------------------------------------------------------------
---------------
发信人: johy (earth), 信区: C++Builder
标  题: Re: 在C++Builder 3.0中如何进行文件读写?
发信站: BBS 水木清华站 (Fri Aug  6 11:21:27 1999) WWW-POST

【 在 AhJohn (阿壮) 的大作中提到: 】
: 各位,
:         我新近想用C++Builder 3.0来编写一个程序,其中必须进行
: 文件读写,我用fscanf函数,结果引发程序出错。
:         请问,C++Builder中应该如何进行ASCII文件的读写,达到如
: 同fscanf的功能?
:         谢谢!

方法一(标准函数):
    #include <stdio.h>
    FILE in;
    float x;
    in=fopen("filename","r");
    fscanf(in,"%f",x);
    fclose(in);
方法二(c++流文件):
    #include <fstream.h>
    ifstream in;
    float x;
    in.open("filename",iso::in);
    x<<in;
    in.close();

第三种 vcl对象
TFileStream
Treader
TWrite


C++Builder 4中还有方法四,
我没用过3,
不知道能不能用:

FileOpen(...);
FileRead(...);
FileWrite(...);
FileClose(...);
第三种方法不仅可行,而且可以和VCL中Stream结合起来
使用起来很方便,第四种方法是win32 api吗
我在提供第五种方法
_open
_close
_read
_write
这可是低层无缓冲的文件存取函数了

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

发信人: capton (一刀斋.广西阿毛), 信区: C++Builder
标  题: Re: BCB中如何自定义消息?
发信站: BBS 水木清华站 (Mon Oct 11 16:06:42 1999)

【 在 assisi (天元) 的大作中提到: 】
: please give me a example,ok?
首先在要接收自定义消息的form的头文件中加入自定义的消息
#define CM_MyMsg    (WM_APP+123)

CM_MyMsg是随便起的自定义的消息名称,后面是实际的消息代码(WORD类型)。
一般我喜欢用WM_APP+n,n是自己选的自然数。
也有人喜欢用WM_USER+n,实际上WM_APP和WM_USER都是微软定义的特殊WORD常数,
我感觉很多控件都使用了WM_USER,还是用WM_APP比较好,也是微软推荐的。

然后在头文件的后面Form类定义的末尾加上
protected:
        void __fastcall ProcToDealMyMsg(TMessage& Msg);

BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(CM_MyMsg,TMessage,ProcToDealMyMsg);
END_MESSAGE_MAP(TForm);

很显然,ProcToDealMyMsg方法即是处理CM_MyMsg的函数,消息信息在Msg变量中
然后要做的就是在Form的程序文件中加入ProcToDealMyMsg的函数体即可。

要自己发送消息,最好使用PostMessage标准WINAPI函数,SendMessage也可以,
但不是立即返回的,可能会有些问题。

不知道说清楚了吗。的确不是几句话就能说明白的。
--
  “喝酒伤肝,抽烟伤肺,但是不喝酒不抽烟伤心哪!”
  爱喝汤的一刀斋喃喃自语道

--------------------------------------------------------------------------------
-------------------------------
发信人: hlbbobo (波子), 信区: C++Builder
标  题: Re: 请教: 去掉 Edit1->Text中的空格用什么函数?
发信站: BBS 水木清华站 (Thu Jan 13 00:44:54 2000)

 【 在 mumin (牧) 的大作中提到: 】
: rt

用String->Trim()可以去除前后的空格
String->LTrim()去掉左边空
String->RTrim()去掉右边空



--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.0.189]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店