Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
end.
Работа в коде с кнопками DBNavigator
Delphi 1
Я думаю вам поможет следующий пример (взят из электронной справки по 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;
Edit
Денежное поле редактирования
Delphi 1
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;
propertyParentShowHint;
propertyPopupMenu;
propertyReadOnly;
propertyShowHint;
propertyTabOrder;
propertyValue: Extended readFieldValue writeSetFieldValue;
propertyVisible;
propertyOnChange;
propertyOnClick;
propertyOnDblClick;
propertyOnDragDrop;
propertyOnDragOver;
propertyOnEndDrag;
propertyOnEnter;
propertyOnExit;
propertyOnKeyDown;
propertyOnKeyPress;
propertyOnKeyUp;
propertyOnMouseDown;
propertyOnMouseMove;
propertyOnMouseUp;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Additional', [TCurrencyEdit]);
end;
constructorTCurrencyEdit.Create(AOwner: TComponent);
begin
inheritedCreate(AOwner);
AutoSize := True;
Alignment := taRightJustify;
Width := 121;
Height := 25;
DispFormat := '$,0.00;($,0.00)';
FieldValue := 0.0;
AutoSelect := False;
WantReturns := False;
WordWrap := False;
FormatText;
end;
procedureTCurrencyEdit.SetFormat(A: String);
begin
ifDispFormat <> A then begin
DispFormat:= A;
FormatText;
end;
end;
procedureTCurrencyEdit.SetFieldValue(A: Extended);
begin
ifFieldValue <> A then begin
FieldValue := A;
FormatText;
end;
end;
procedureTCurrencyEdit.UnFormatText;
var
TmpText : String;
Tmp : Byte;
IsNeg : Boolean;
begin
IsNeg := (Pos('-',Text) > 0) or(Pos('(',Text) > 0);
TmpText := '';
ForTmp := 1 toLength(Text) do
ifText[Tmp] in['0'..'9','.'] then
TmpText := TmpText + Text[Tmp];
try
FieldValue := StrToFloat(TmpText);
ifIsNeg thenFieldValue := -FieldValue;
except
MessageBeep(mb_IconAsterisk);
end;
end;
procedureTCurrencyEdit.FormatText;
begin
Text := FormatFloat(DispFormat,FieldValue);
end;
procedureTCurrencyEdit.CMEnter( var Message: TCMEnter);
begin
SelectAll;
inherited;
end;
procedureTCurrencyEdit.CMExit( var Message: TCMExit);
begin
UnformatText;
FormatText;
Inherited;
end;
procedureTCurrencyEdit.KeyPress( varKey: Char);
begin
if Not(Key in['0'..'9','.','-']) ThenKey := #0;
inheritedKeyPress(Key);
end;
procedureTCurrencyEdit.CreateParams( varParams: TCreateParams);
begin
inheritedCreateParams(Params);
caseAlignment of
taLeftJustify : Params.Style := Params.Style orES_LEFT and NotES_MULTILINE;
taRightJustify: Params.Style := Params.Style orES_RIGHT and NotES_MULTILINE;
taCenter : Params.Style := Params.Style orES_CENTER and NotES_MULTILINE;
end;
end;
end.
Отслеживаем позицию курсора в EditBox
Совет от читателя
The_Spriteсоветует:
В форму добавляются TEditBox и TLabel, при этом TLabel постоянно показывает позицию курсора в элементе редактирования.
Совместимость: Все версии Delphi
Пример:
procedureTForm1.Edit1Change(Sender: TObject);
begin
CurPos := Edit1.SelStart;
Label1.Caption := IntToStr(CurPos);
end;
procedureTForm1.Edit1KeyDown(Sender: TObject; varKey: Word; Shift: TShiftState);
begin
IfKey = VK_LEFT thendec(CurPos);
Интервал:
Закладка: