开发环境:XP\delphi7
要求:
   改写delphi自带的数据库导航栏,使其可以显示Caption.
测试环境:
   XP 启动Themes 服务(XP的桌面效果),Delphi工程中使用XPMan单元(不是组件单元),控件放到一个Panel上按钮的字体不会变粗。原贴地址:
http://expert.csdn.net/Expert/topic/2100/2100256.xml?temp=.8081476代码太长,不方便贴出,如果想试试自己能不能解决这个问题,请发邮件给我 [email protected] 或 [email protected] ,清注明“数据导航问题”。问题解决即开贴送分。另:这个问题在98、2000、以及当XP不启动Themes服务时均不会出现问题。

解决方案 »

  1.   

    源码下载地址:
    http://www.2ccc.com/article.asp?articleid=404
      

  2.   

    改他干什么,用TActionList 和 ToolBar自己做一个就行了。
      

  3.   

    按钮状态当然很好控制了,在第一次读取数据后设计按钮的初始状态,判断是否是eof或者bof,然后在每个按钮的onclick中再判断是否是eof或者bof,然后设置每个按钮的状态
      

  4.   

    如果在一个DBGRID上移动了光标的位置,那不是也要写事件进行判断吗?
    不是太麻烦了吗?
      

  5.   

    TActionList 提供了DataSet的Action,你只要把Button的Action指向他,什么代码都不用写
      

  6.   

    是吗?我还没有用过这个东西,试试看,可以说说哪里有Demo吗?
      

  7.   

    用耙子的方法会有一个问题,就像我们在用Delphi7时一样,会有一个小的BUG出现。就是按钮有色彩不能随时更改
      

  8.   

    我很奇怪:数据库导航栏 为何不从TDBNavigator继承过来呢?
      

  9.   

    TO 耙子:
    我在用Delphi7时,发现按钮的或菜单的色彩在鼠标经过时为高亮,但鼠标离开以后,色彩还是高亮,让人看起来不舒服。
    我说的是这个意思。TO 老者:
    因为TDBNavigator上按钮没有Caption,而且图标我要改掉,所以没有从它继承。
      

  10.   

    我有一个从TDBNavigator集成过来的DBNavigator控件,自己加入了Caption属性,可以输入汉字做caption,但没考虑更改它的图标。
      

  11.   

    源吗如下:
    unit MyDBNavigator;
    (*
    MyDBNavigator is a decendent of TDBNavigator.  It adds a captions, layout, margin and
      spacing properties to the buttons. Author: William R. Florac
      Company: FITCO, Verona, WI (wee little company from my house)
    Copyright 1997, FITCO.  All rights reserved. 1)  Users of MyDBNavigator (and it's components) must accept this disclaimer of
         warranty: "MyDBNavigator is supplied as is.  The author disclaims all
         warranties, expressed or implied, including, without limitation,
         the warranties of merchantability and of fitness for any purpose.
         The author assumes no liability for damages, direct or conse-
         quential, which may result from the use of MyDBNavigator."  2) This Software is donated to the public as public domain except as
         noted below.  3) If you distribute this software, you must include all parts and pages without
        modification.  4) Software may be used, modified and distributed freely if compiled in with
         commercial or private applications (not another VCL).  5) Fitco retains the copyright to this Software.  You may not distribute
         the source code (PAS) or its compiled unit (DCU) for profit.  6) If you do find this component handy and you feel guilty
        for using such a great product without paying someone,
        please send a few bucks ($25) to support further development.
        I have spent a lot of time making this VCL the best it can be and
        have included a help file to make it complete. 7) This file was formatted with tabs set to 2. 8) Thanks to all those who suggested (and got) improvements.  9) Latest version can always be found at http://sumac.etcconnect.com/fitco/ Please forward any comments or suggestions to Bill Florac at:
      email: [email protected]
    mail: FITCO
    209 Jenna Dr
    Verona, WI  53593===============================================================================
    version 1.0
    - For Delphi 2.0
      - This VCL was inspired by an article in "Delphi Delvelopers Journal"
    Version 1.1 - 2/17/97
    - Well first version did not work during runtime! It seem that
          SetCaptions does not get called during loading even though
          FCaptions is set!  Any way force it to always call SetMargin
          and put call there.  Also switch to using Buttons[x] rather than
          trying to find the buttons.
    Version 1.2 - 3-8-97
    - Captions removed at design time were not set back to default values
        - Added version constant===============================================================================
    *)interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, DBCtrls, Buttons;const
      MyDBNavigatorVersion = '1.2';type
      TMyDBNavigator = class(TDBNavigator)
      private
        { Private declarations }
        DoCaptions: boolean;
    FCaptions: TStrings;
        FLayout: TButtonLayout;
        FSpacing: Integer;
        FMargin: Integer;
      protected
        { Protected declarations }
        procedure SetLayout(value: TButtonLayout);
        procedure SetSpacing(value: integer);
        procedure SetMargin(value: integer);
    procedure SetCaptions(value: TStrings);
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
      published
        { Published declarations }
        property Captions: TStrings read FCaptions write SetCaptions;
        property Layout: TButtonLayout read FLayout write SetLayout default blGlyphTop;
        property Spacing: Integer read FSpacing write SetSpacing default 2;
        {if we dont set default, the SetMargin is called}
        {this will allow us to put the SetCaptions in as it is not called!}
        property Margin: Integer read FMargin write SetMargin;
        property Font;
      end;procedure Register;implementationconst
    DefaultCaption: array[0..9] of string =
       ('最前','往前','往后','最后','插入',
         '删除','编辑','提交','撤销','刷新');{******************************************************************************}
    constructor TMyDBNavigator.Create(AOwner: TComponent);
    var
    x: integer;
    begin
    inherited create(AOwner);
      {initialize values}
    FCaptions := TStringList.create;
      DoCaptions := True;
      FSpacing := 0;
      SetSpacing(2);
      FMargin := 0;
      SetMargin(-1);
      FLayout := blGlyphBottom;
      SetLayout(blGlyphTop);
      FCaptions.Clear;
      for x := 0 to 9 do FCaptions.Add(DefaultCaption[x]);
      SetCaptions(FCaptions);
    end; {of Create}{******************************************************************************}
    destructor TMyDBNavigator.Destroy;
    begin
    FCaptions.Free;
    inherited Destroy;
    end; {of destroy}{******************************************************************************}
    procedure TMyDBNavigator.SetCaptions(Value: TStrings);
    var
      t: TNavigateBtn;
    begin
    {set captions or default if not assigned}
    if Value <> FCaptions
      then FCaptions.Assign(Value);
    for t:= low(TNavigateBtn) to high(TNavigateBtn) do begin
    if ord(t) < Value.Count
        then Buttons[t].caption := Value[ord(t)]
        else Buttons[t].caption := DefaultCaption[ord(t)];
      end;
      Invalidate;
    end; {of setCaptions}{******************************************************************************}
    procedure TMyDBNavigator.SetLayout(value: TButtonLayout);
    var
      t: TNavigateBtn;
    begin
    if (value = Flayout) and  not (csLoading in ComponentState) then exit;
    FLayout := value;
    for t:= low(TNavigateBtn) to high(TNavigateBtn)
      do Buttons[t].Layout := value;
      Invalidate;
    end; {of SetLayout}{******************************************************************************}
    procedure TMyDBNavigator.SetSpacing(value: integer);
    var
      t: TNavigateBtn;
    begin
    if (value = FSpacing) and not (csLoading in ComponentState) then exit;
    FSpacing := value;
    for t:= low(TNavigateBtn) to high(TNavigateBtn)
      do Buttons[t].Spacing := value;
      Invalidate;
    end; {of SetSpacing}{******************************************************************************}
    procedure TMyDBNavigator.SetMargin(value: integer);
    var
      t: TNavigateBtn;
    begin
      if (value = FMargin) and not (csLoading in ComponentState) then exit;
      if (csLoading in ComponentState) then SetCaptions(FCaptions);
    FMargin := value;
      for t:= low(TNavigateBtn) to high(TNavigateBtn) do
         Buttons[t].margin := value;
      Invalidate;
    end; {of SetMargin}
    {******************************************************************************}
    procedure Register;
    begin
      RegisterComponents('MyComp', [TMyDBNavigator]);
    end; {of Register}
        {of uniut}
    end.
      

  12.   

    我倒觉得不是不能变粗,而是一直是粗体,非正常字体。
    而且font属性取决于其父控件,而非MyDBNavigator本身。
    比较怪!
      

  13.   

    是啊。但只是放到Panel上时才会这样。不知道为什么?单独设置字体都不行。