1)我想實現在同一個label或edit内的文字顔色不同,如:123456 RMB ,把‘123456‘與‘RMB‘區分開來(我知道再加一個label就行了,但我有個問題:因爲前面的數字位數變化很大,如果定死後面的位置,會顯得很難看);2)我想實現黨數據庫内的數據發生變化時,實現某些代碼。(dbgrid和adotable中好像都沒有該事件);3)我想控制dbgrid某一字段的數字位數,如果我用adotable沒問題,在displayformat中就可以實現,但若用adoquery怎麽實現.
有空過來說兩句吧!

解决方案 »

  1.   

    1 、不知道,至今没有发现
    2、可以在它的quit事件中实现
    3、用query和table一样,将字段数据格式化即可
      

  2.   

    1、用一个Label是肯定不能实现的。你可以把Label设置成AutoSize,当其中一个的Caption发生变化时,重新调整所有Label的位置。当然,最好是自己写一个控件,让它自动调整
    2、可以在ADOQuery或ADOTable的AfterScroll事件中处理
    3、把那个字段类型转化成TNumericField类型
      

  3.   

    1 。得到前面label的宽度
    left+width+100 就是RMB的Left位置了2。 只能写储存过程3。 看不太懂
      

  4.   

    1.从TCustomLabel写自己的类重写他的Paint方法。把不同颜色的部分分为
    几个属性登记,在Paint中参照TCustomLabel的Paint方法,把几个部分用
    不同的颜色画出来
      

  5.   

    3. 要格式化数字字段
    formatfloat ('0.000',11.1111111);
      

  6.   

    1.如果需要可以自己写一个LABEL让不同的字符以不同颜色显示。
    例如下面的例子就把数字与字母区分开用不同颜色显示,同时处理中文,这里只是简单举个例子,根据需要可以再细化。
    procedure TMyLabel.Paint;
    var
      str : String;
      i   : Integer;
      posX: Integer;
    begin
      str := Caption;
      //Caption := '';
      //inherited;  with canvas do
      begin
        if not Transparent then
        begin
          Brush.Color := Self.Color;
          Brush.Style := bsSolid;
          FillRect(ClientRect);
        end;
        Brush.Style := bsClear;    if Width < ( TextWidth(str) + 2) then
          Width := TextWidth(str) + 2;
        case Alignment of
          taLeftJustify : posX := 1;
          taRightJustify: PosX := Width - TextWidth(Str) - 1;
          taCenter      : PosX := (Width - TextWidth(Str)) div 2;
        end;    i := 1;
        while i <= Length(str) do
        begin
          if (( i + 1 ) <= Length(Str)) and( ord(str[i]) >= 128 ) and ( ord(str[i+1]) >= 128 ) then //中文
          begin
            Font.Color := clBlack;
            TextOut(posX,abs(Height - TextHeight(Str[i])) div 2,Copy(str,i,2));
            i := i + 2;
            posX := posX + TextWidth(Str[i] + Str[i + 1]);
          end
          else
          begin
            if str[i] in ['0'..'9'] then
              Font.Color := clblue
            else
              Font.Color := clRed;
            TextOut(posx,abs(Height - TextHeight(Str[i])) div 2,str[i]);
            posX := PosX + TextWidth(Str[i]);
            i := i + 1;
          end;  
        end;
      end;
    end;
      

  7.   

    3。控制数字位数,用以下的常数:
    CurrencyDecimals := 2(小数点后有2位)
      

  8.   

    'CurrencyDecimals := 2'
    這個代碼放在那邊?
      

  9.   

    1.在一个控件里实现我觉的不可能,不过有一个偷懒的办法,‘123456’放在Memo1里,不过把Memo1的长宽调成一个Edit的大小,把Memo1.Alignment:=taRightJustify//居右;就行了。RMB放在一个Edit或Lanel里就行了,很方便的,而且客户只是要编好的程序,他可不管你用什么来实现。试试便知。
    2,可以用触发器来做,不过adotable中好象有这个事件,帮你看看。
    3,想想。
      

  10.   

    1,用Label.canvas来实现是好办法,但是它不象Image,没有重画功能,需要自己添加,而且有BUG,本人就为此问题痛苦过!!
      

  11.   

    1.用两个Label,后一个的位置根据第一个定可以轻松解决此问题。
    2.在每成功删除或增加或修改一条记录后对布尔变量取反,然后在数据集的
    State状态为browse时,对变量分情况以执行过程或Exit;
    3.数据位数的问题你可以定义数据库字段的长度,也可以定义DbGrid中显示这一字段的列的宽度。
      

  12.   

    用Query選擇好象不能控制某一字段内全部的數字小數部分的位數。
    真是苦惱!
      

  13.   

    現在急需第三個問題(控制dbgrid中某一列數字小數部分的位數)的答案.
    我搞了好久都未搞定!
      

  14.   

    第2个问题:
      可以用触发器,也可以写存储过程,aftscroll等等
      

  15.   

    1.richedit伪装成EDIT
    2.datasource 有ondatachange事件
    3.考虑一下取数据时就控制
      

  16.   

    问题3:
    3)我想控制dbgrid某一字段的數字位數,如果我用adotable沒問題,在displayformat中就可以實現,但若用adoquery怎麽實現.你的意思是:adotable沒問題,因为你可以在设计阶段设置displayformat吧
    adoquery也可以!
      

  17.   

    iceriver521(野兽王子):
    我用的adoquery如果選擇的内容不變,是可以和adotable一樣設置.
    如果改變就可能會出錯,因爲有些字段你沒有選擇,卻有它的屬性,程序會告訴你找不到該字段!
      

  18.   

    1,你可以根据需要用程序动态选择
    2,你也可以多几个adoquery,各有个的用处!
    gong on!
      

  19.   

    1:还是两个Lable来的方面
    2:如果你想数据库自动响应某些变化,那么用数据库自身的触发器
    3:你可以将Query里面的字段的OnGetText中编程实现
    OnGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    你应该知道怎么加字段吧,就是双击Query控件,就会出来Fields Editor,在里面点右件,就选择可以加入符合你条件的字段,我一般是Add all,:)
      

  20.   

    还有说明一下,那个
    GetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    那个Text参数就是将要显示的文字,如: 
    if Sender.asstring = 'Y' then Text := '是'
      

  21.   

    1)还是用两个lable方便,第一个用Autowidth.2)很多事件都可以,要看你的目标是什么了。3)adoquery也可以的,方法差不多。adotable和adoquery其实是一回事,只不过封装以后表现形式不同而已。
      

  22.   

    今天下班前結賬?
    明天happy去了!