Возможно ли изменение свойства Hints компонента TDBNavigator во время выполнения программы?
Это должно работать:
procedureTForm1.Button1Click(Sender: TObject);
varix : integer;
begin
WithDBNavigator1 do
forix := 0 toControlCount - 1 do
ifControls[ix] isTNavButton then
withControls[ix] asTNavButton do
case index of
nbFirst : Hint := 'Подсказка для кнопки First';
nbPrior : Hint := 'Подсказка для кнопки Prior';
nbNext : Hint := 'Подсказка для кнопки Next';
nbLast : Hint := '';
{……}
end;
end;
– Freddy Hansson
Выключение кнопок в DBNavigator
{ Расширение DBNavigator: позволяет разработчику включать и выключать
отдельные кнопки через методы EnableButton и DisableButton }
unitGNav;
interface
usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls;
typeTMyNavigator = class(TDBNavigator)
public
procedureEnableButton(Btn : TNavigateBtn);
procedureDisableButton(Btn : TNavigateBtn);
end;
procedure Register;
implementation
procedureTMyNavigator.EnableButton(Btn : TNavigateBtn);
begin
Buttons[Btn].Enabled := True;
end;
procedureTMyNavigator.DisableButton(Btn : TNavigateBtn);
begin
Buttons[Btn].Enabled := False;
end;
procedure Register;
begin
RegisterComponents('Samples', [TMyNavigator]);
end;
end.
Работа в коде с кнопками DBNavigator
Я думаю вам поможет следующий пример (взят из электронной справки по DELPHI), показывающий код нажатой кнопки. Я видел пару вопросов о том, как изменять кнопки навигатора в зависимости от состояния редактируемой вами записи. Если вам необходимо подтверждение действий пользователя, то необходимо каким-то образом организовать дополнительный перехватчик. Как это сделать, я, честно говоря, еще не думал.
Прежде, чем вы сделаете любой постинг или изменение данных, убедитесь, что таблица находится в режиме редактирования. Посмотрите описание свойства state в электронной справке по DELPHI. Там подробно рассказано как работать с ним.
Следующий код определяет нажатую кнопку навигатора и выводит сообщение с ее именем.
procedureTForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
varBtnName: string;
begin
caseButton of
nbFirst : BtnName := 'nbFirst';
nbPrior : BtnName := 'nbPrior';
nbNext : BtnName := 'nbNext';
nbLast : BtnName := 'nbLast';
nbInsert : BtnName := 'nbInsert';
nbDelete : BtnName := 'nbDelete';
nbEdit : BtnName := 'nbEdit';
nbPost : BtnName := 'nbPost';
nbCancel : BtnName := 'nbCancel';
nbRefresh: BtnName := 'nbRefresh';
end;
MessageDlg('Была нажата кнопка' + BtnName, mtInformation, [mbOK], 0);
end;
Денежное поле редактирования
unitCurrEdit;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Menus, Forms, Dialogs, StdCtrls;
typeTCurrencyEdit = class(TCustomMemo)
private
DispFormat: string;
FieldValue: Extended;
procedureSetFormat(A: string);
procedureSetFieldValue(A: Extended);
procedureCMEnter( var Message: TCMEnter); messageCM_ENTER;
procedureCMExit( var Message: TCMExit); messageCM_EXIT;
procedureFormatText;
procedureUnFormatText;
protected
procedureKeyPress( varKey: Char); override;
procedureCreateParams( varParams: TCreateParams); override;
public
constructorCreate(AOwner: TComponent); override;
published
propertyAlignment defaulttaRightJustify;
propertyAutoSize defaultTrue;
propertyBorderStyle;
propertyColor;
propertyCtl3D;
propertyDisplayFormat: string readDispFormat writeSetFormat;
propertyDragCursor;
propertyDragMode;
propertyEnabled;
propertyFont;
propertyHideSelection;
propertyMaxLength;
propertyParentColor;
propertyParentCtl3D;
propertyParentFont;
Читать дальше