我爱builder

C++Builder 程序员博客

我在DBgrideh里面的OnGetCellParams事件写如下代码:

    if(DBGridEh1->SelectedIndex==1)
    {
       
        AnsiString ss="";       
        ss=Trim(DBGridEh1->Columns->Items[1]->Field->AsString);
        DBGridEh1->Columns->Items[1]->PickList->Clear();
       
if(ss!="")
        {             
            ADOQuery2->Close();
            ADOQuery2->SQL->Clear();
            ADOQuery2->SQL->Add("select distinct nowLoginNickName from bbs where nowLoginNickName like '%"+ss+"%'");
            ADOQuery2->Open();

            for(ADOQuery2->First();!ADOQuery2->Eof;ADOQuery2->Next())
            {
                  AnsiString temp="";
                  temp=ADOQuery2->Fields->Fields[0]->AsString;
                  DBGridEh1->Columns->Items[1]->PickList->Add(temp);
            }
         
        }
    }

实际运行测试,却发现DBgrideh不能实时的捕抓到输入时候的字符变化,也就是达不到类似Edit控件那种onchange事件那种效果,请问该如何解决这个问题?

靠,你是卖广告的?

引用 1 楼 ssdlkdj 的回复:
这个问题我也遇到过,我现在加了一个群,这个群人气较好,也的确有高手,不但可以交流问题,而且还可以接项目赚钱,QQ群号是:陆.肆.柒.玖.捌.柒.玖.贰,不要说我做广告,看看便知,如需要的话加入试试,如果你发现好的交流群也别忘了告诉我啊!呵呵!

你是卖广告的?

该回复于2008-07-31 22:00:35被版主删除

似乎DBGridEh本身有这个功能。

引用 4 楼 tr5gfd 的回复:
该回复于2008-07-31 22:00:35被版主删除

怎么使用?

  • Filed under: C++ Builder
  • 我使用DBgridEh的OnDrawColumnCell事件,在事件里面我有如下代码:
       
        POINT pt;
        pt.x=Rect.Left;
        pt.y=Rect.Top;
        ::ClientToScreen(DBGridEh1->Handle,&pt);
        Edit3->Text=IntToStr(pt.x);
        Edit4->Text=IntToStr(pt.y);

    ,那么在相同的cell里面我随便输入内容,并且多次回车(此时编辑的焦点依然是在同一个cell里面) 正常来说,Edit显示的坐标每次都是一样的,我单独建立一个工程放1个Dbgrideh上去,测试的时候很正常,但我现在用同样的方法在已做的项目里面的Dbgrideh的OnDrawColumnCell事件加入相同的代码,却发现在同一个cell里面不断的按回车(焦点依然保留在同一个cell里面),定位出来的坐标竟然是在2组不同的坐标之间不断的切换(其中一组当然是正确的),出现这样的情况,我就弄糊涂了,不知道问题出在哪里?

    引用 1 楼 twicave 的回复:
    屏幕刷新是整体刷新的.
    也就是说,OnDrawColumnCell不仅仅是针对一个Cell刷新的.一个Cell内容发生变化,其他的Cell也会跟着刷新.
    所以,估计是刷新的速度很快,只显示出了两组坐标.应该还有别的.

    因为我这样做的目的是为了能够获得这个当前编辑的cell坐标,然后把鼠标移动过去,那你有什么好办法吗?

    该回复于2008-08-03 13:19:11被版主删除

  • Filed under: C++ Builder
  • 我写在csdn博客上了,地址:
    http://blog.csdn.net/hemiya/archive/2008/08/28/2845531.aspx
    这个是简单的例子,希望给和我一样遇到相同问题的人一点帮助.

    firebird数据库用的人比较少吧

    我上次去下了个,不会玩,后来就没有玩了!

  • Filed under: C++ Builder
  • 如何使用ShellExecute调用外部程序, 只能运行一次,再次调用时,显示已经调用过的窗口.
    HANDLE mutex ;
        const char mutexname [] = "EEGSysSet" ;
        mutex = OpenMutex (0, false, mutexname) ;//
        if (mutex == NULL)
        {
            mutex = CreateMutex(0,1,mutexname);
            if(!ERROR_ALREADY_EXISTS == ::GetLastError())
            {
                AnsiString          ans;
                ans.sprintf("%s\\EEGSysSet.exe", CDBIN);
                ShellExecute(NULL, "", ans.c_str(), "EEGSys", CDBIN, SW_MAXIMIZE);
            }
        }
        else
        {
            ShowMessage ("Application Already Running") ;
        } *
    使用以上程序,创建CreateMutex,第二次调用的时候确实没有启动,但是,如果第一次调用的已经关闭了,再次调用的时候就没有反应了,等于CreateMutex还在起作用呀!不知道有没有其它的方法.

    C/C++ code
    //试试这个,你那个看着有点乱,改了改,看是否合适 HANDLE mutex ; const char mutexname [] = "EEGSysSet" ; mutex = CreateMutex(0,1,mutexname); if(!ERROR_ALREADY_EXISTS == ::GetLastError()|| mutex == NULL) { MessageBox(0,"您已经起动了本程序!","提醒:禁止多次运行。",MB_OK); return ; } ShellExecute(NULL, "", ans.c_str(), "EEGSys", CDBIN, SW_MAXIMIZE);

    HANDLE mutex ;
    是个全局的,你有没有注销这个 HANDLE 。

    你程序只能对自己本事多次调用起到作用,但是对于外界关闭程序,并没有促使你释放信号量,所以不可以!

    up

    该回复于2008-07-10 02:38:26被版主删除

    该回复于2008-07-10 02:47:04被版主删除

  • Filed under: C++ Builder
  • C Builder中使用Delphi文件问题中,我还是无法在.pas同目录下找到生成.hpp文件。我就步骤是我把我需要用的text1.pas源文件放到一个文件夹中,打开C++ Builder,打开我的工程选择Projet ⦁dd to Project ,从Add to Project对话框中的文件类型选择PAS文件名选择text.pas,然后点击OK。
    别人说会生成对应的.hpp文件(这个文件和你的单元文件在同一目录下面) ,可我没找到,不知道什么原因,是我做的顺序有问题?

    是不是编译正确了才生成.hpp.在delphi中没错,怎么一加入后出现很多原来没有的错误

    最好把代码/错误贴上来看一下

    要确认你的BCB IDE没有装bcc32pch,或在编译的时候bcc32pch需要关闭。

    怎么知道我的 IDE是否装bcc32pch

    是不是在delphi中showmessage可以全是小写,但其中一个错误是 Undeclared identifier: 'showmessage'。
    这句showmessage("数据开始有非法字符!");还有2个错误
    [Pascal Error] test1.pas(96): Illegal character in input file: '"' ($22) 
    [Pascal Error] test1.pas(96): Illegal character in input file: '非' ($B7C7)

    看上去你是用c++的编译器去编译pas文件了,不要把pas的代码贴入BCB中.只能加入pas的unit,然后再
    #include <pas_unit.hpp>
    具体可参考:
    hnsyf(鱼片儿)写的:
    http://topic.csdn.net/t/20020618/17/813364.html

    我加入的就是pas的unit,我选择Projet ⦁dd to Project 加入test1.pas后上面显示还是test.pas不是test.hpp?

    研究了很长时间了,一直弄不好,心里很急,很需要兄弟的帮忙

    上面只会显示unit的名字test,没有.pas或.hpp

    显示.pas,不过我是按照你和我说的也就是你给我的文章中的步骤做的

    你的BCB是什么版本?

    6.0

    你有QQ吗?,你是否可以用QQ上的远程协助给我演示个简单的例子

    那就奇怪了,可能是你的bcb本身的问题了

    很需要keiy的帮忙,为了这个问题,我愁死了,我现在终于承认自己别正常人笨一些了

    写一个简单的test.pas
    unit test  ;
    interface
    implementation
    function testf:integer;
    begin
    testf:=100;
    end;
    end.
    然后存盘,在同一目录下,新建一个bcb项目,将test.pas加入,BCB的程序为:

    C/C++ code
    //————————————————————————— #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "test.hpp" //————————————————————————— #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //————————————————————————— __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //————————————————————————— void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage(testf()); } //————-

    编译看看结果

    用delphi建简单例子的时候
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;

    type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
    这些东西删掉吗?

    可以,可以生成.hpp
    看来是我的程序有问题
    我的test.pas是我截取的我原来的一个.pas文件的一部分,是不是与这个有关

    上面我的也有小问题:
    unit test  ;
    interface
    function testf:integer; //少了声明
    implementation
    function testf:integer;
    begin
    testf:=100;
    end;
    end.
    不然能编译不能运行

    引用 19 楼 springworker 的回复:
    可以,可以生成.hpp
    看来是我的程序有问题
    我的test.pas是我截取的我原来的一个.pas文件的一部分,是不是与这个有关

    当然有关
    1.unit test 必须后的test必须与文件名一致
    2.在interface中必须含函数声明,如果你用到系统函数或其它VCL函数,必须用uses将它所在的unit包含进来
    如:你用ShowMessage函数必须uses Dialogs
    终于明白你的问题,你的pas没能编译通过,当然不能生成.hpp

    回头再看了一下你的错:

    引用 6 楼 springworker 的回复:
    是不是在delphi中showmessage可以全是小写,但其中一个错误是 Undeclared identifier: 'showmessage'。
    这句showmessage("数据开始有非法字符!");还有2个错误
    [Pascal Error] test1.pas(96): Illegal character in input file: '"' ($22)
    [Pascal Error] test1.pas(96): Illegal character in input file: '非' ($B7C7)

    1.你没有uses Dialogs,就会报:
    Undeclared identifier: 'showmessage'
    2.showmessage("数据开始有非法字符!");
    delphi的字中用不能",要用',要改成
    showmessage('数据开始有非法字符!');

    学无止境哪““

    非常感谢keiy,虽然我的还没做出,但你给我的例子我做,,这贴现在结。以后还大有可能向您请教

  • Filed under: C++ Builder
  • 尽量说的详细下

    先把De做成Dll形式,再用CBC调用

    请您说的详细下怎么样

    直接加入pas文件

    具体怎么加

    project->add to project

    把pas单元文件直接加入到工程(Project->add to project)文件类型选择 pascal unit (*.pas)
    然后builder 一下工程
    这时会生成对应的.hpp文件(这个文件和你的单元文件在同一目录下面)
    在需要使用的地方 #include  "xxx.hpp"  ok

    我按照这样的步骤做的,但没找到.hpp文件啊
    1、选择Projet &brvbarAdd to Project
    2、从Add to Project对话框中选择CPP、C、PAS、RES、LIB或OBJ。对于Delphi单元,选择PAS。
    3、浏览目录并选择加入项目所需要的文件。
    4、找到所需的文件后,单击Open完成。无须以任何方式进一步处理Pascal文件。

    我怎么没有发现我的里面有生成.hpp文件啊

    引用 8 楼 springworker 的回复:
    我怎么没有发现我的里面有生成.hpp文件啊

    这个文件和pas源文件在同一个目录,在需要使用的C++文件中#include即可

    阿发伯:
        弄了很长时间了还是弄不好,心里很急,急需您的帮忙

    呵呵,以前好像加过.好几年了.
    映象中,在BCB6.00中把DELPHI6.00的PAS拿来就用的.
    在程序中直接把PAS加载,然后运行,好像会自动得到一个HPP文件,然后加载这个文件.

    我觉得以程序的稳定性来说,还是做动态库.然后动态加载的更好.(这才是一劳永逸的好方法.)

    我对动态库可是一点也不会啊

    必须成功的编译一次,才能形成hpp文件

  • Filed under: C++ Builder
  • //function.h
    struct site
    {
      double a;
      double b;
      …………
    }
    extern site site_data[NUM];//NUM为常量
    //tin.h
    class T_tin
    {
    public:
        T_tin();
        ~T_tin();
          void CreatPoint(site * site_data);
          …………
    }
    在tin.cpp里实现。
    在main里使用时,出错
    error C2061: syntax error : identifier 'site'
    正确的应该怎么改?谢谢大家了。
    在线等。

    已经加过了,
    #ifndef _TIN_H_
    #define _TIN_H_

    #include "function.h"
    …………
    …………
    #endif
    还是一样的错误。
    谢谢。

    C/C++ code
    //可以改成这样 //—function.h — #define NUM 5 struct site { double a; double b; //………… }; extern site site_data[NUM]; //NUM为常量 //—tin.h— #include "function.h" #include <iostream> using namespace std; class T_tin { public: T_tin(){}; ~T_tin(){}; void CreatPoint(site * site_data); //………… }; //—main.cpp— #include "tin.h" void main() { }

    找到错误了。谢谢3楼。我在function.h 里有包含了tin.h.文件互相包含就出错了、

  • Filed under: C++ Builder
  • 我想在C++ Builder中使用VLC控件播放,但是控件导入后无法播放,只有一个图标在上面。

    哪位大大能给解释一下怎么弄才能播放出来?

    我的VLC播放器的版本是0.8.6c

    这恐怕是VLC控件的兼容性问题。

    TMediaPlayer?

    播放的是什么文件格式?有操作系统有装解码器么?

  • Filed under: C++ Builder
  • 软件中大量使用了ShockWaveFlash ,当程序在BCB编程环境中编译状态时,不会出现任何问题.
    当软件release后,偶而某个窗口会弹出Accress violation at XXXXXXXX(感觉象吃了苍蝇一样恶心),点确定后,发现Flash没有播放出来.关闭出错窗体,重新打开,Flash又能正常播放了,很邪门吧!
    请高手指点,问题出在哪儿,该如何解决!

    我觉得不一定是ShockWaveFlash 的事情,也可能是某处代码有泄露或者有冲突,造成的!比如对VCL控件的访问,最好不要放在子线程里,或者内存溢出(用CodeGuard查看一下),或者线程的互斥没有做好,都有可能!

  • Filed under: C++ Builder
  • 如何使用ADOTable控件获取access表中的字段名称和类型

    楼上的真牛啊!!!~

    =   =~用那么复杂吗?

    一个数据源指定ACCESS的连接路径,,ODBC~

    然后用一条SQL语句用ADOQUERY来执行不就可以获得了么。。。

    连接以后也应该可以在代码中直接指定TABLE的表吧。。我没试过。。。

    感觉ADOQUERY好用

  • Filed under: C++ Builder
  • 类别

    最新

    标签

    链接


    存档