Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 For Control := 0 To ControlCount-1 Do

If GetDataSource(Controls[Control]) And GetDataField(Controls[Control]) And

(DataSource.DataSet <> Nil) And

DataSource.DataSet.FieldByName(DataField).Required Then

SetColor(Controls[Control], clRed);

end;

– Robert Wittig

Insert/Override

с помощью DBEdit

Сама Windows не позволяет это сделать, но я нашел как это обойти с помощью одной хитрости, и, похоже, это классно работает (надеюсь вы получите даже больше, чем вы хотите :).

Сначала я добавляю к моей форме свойство (и соответствующие переменные и процедуры), наподобие этому:

private

 FinsertMode: boolean;

procedure SetInsertMode(value: boolean);

public

 property insertMode: boolean read FinsertMode write SetInsertMode;

В обработчике создания события формы я инициализирую его:

procedure TForm1.FormCreate(Sender: TObject);

begin

 {инициализация}

 insertMode := True;

end;

Также для этого свойства я создаю процедуру SetInsertMode, которая с помощью TPanel с именем Panel1 извещает пользователя о текущем режиме работы:

procedure TForm1.SetInsertMode(value: boolean);

begin

 FinsertMode := value;

 if FinsertMode then Panel1.Caption := 'ВСТАВКА'

 else Panel1.Caption := 'ПЕРЕЗАПИСЬ';

end;

Затем я добавляю три обработчика событий (OnKeyDown, OnKeyPress, OnEnter) для каждого моего DBEdit (можно при наличии нескольких компонентов создать один общий обработчик для всех):

procedure TForm1.DBEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if (Key = VK_INSERT) then insertMode := not insertMode;

end;

procedure TForm1.DBEditKeyPress(Sender: TObject; var Key: Char);

begin

 if (not insertMode) and (Sender is TDBEdit) then (Sender as TDBEdit).SelLength := 1

 else (Sender as TDBEdit).SelLength := 0;

end;

procedure TForm1.DBEditEnter(Sender: TObject);

begin

 insertMode := True;

end;

Банзай!

Похоже это работает, хотя я и не имел достаточного времени протестировать это. Естественно, вы можете изменить это по просьбе вашего заказчика (например, я всегда сбрасывал режим во вставку при перемещении к другому компоненту DBEedit). Все вышесказанное должно также работать без проблем и с компонентами Edit.

– Denis Sarrazin 

Как очистить DBEdit

Delphi 1 

Пробую так:

myDbEdit.Text := '';

или адрес TField, если вы хотите так:

TableNameMyField.Value := '';

Ответ:

Table1.Edit;

Table1.FieldByName(DBEdit1.FieldName).Clear;

DBGrid

Dbgrid и множественный выбор

Delphi 2 

Тема: TDBGrid и множественный выбор записей (Multi-Selecting Records)

При включении флажка [dgMultiSelect] в свойстве-наборе Options компонента DBGrid, вы добавляете к табличной сетке возможность множественного выбора записей.

Выбранные вами записи представлены в виде закладок и храняться в свойстве SelectedRows.

Свойство SelectedRows является объектом, имеющим тип TBookmarkList. Его свойства и методы описаны ниже.

// property SelectedRows: TBookmarkList read FBookmarks;

// TBookmarkList = class

// public

 {* Метод Clear освобождает все выбранные в DBGrid записи *}

 // procedure Clear;

 {* Метод Delete удаляет все выбранные строки из набора данных *}

 // procedure Delete;

 {* Метод Find определяет наличие закладки в выбранном списке. *}

 // function Find(const Item: TBookmarkStr;

 // var Index: Integer): Boolean;

 {* Метод IndexOf возвращает индекс закладки, расположенной в свойстве Items. *}

 // function IndexOf(const Item: TBookmarkStr): Integer;

 {* Метод Refresh возвращает логическую величину, уведомляющую о том, что в то время, пока в табличной сетке была выбрана запись, были добавлены (удалены) какие-то данные. Метод Refresh может быть использован для обновления списка выбранных записей для уменьшения возможности получения удаленной записи. *}

Поделиться с друзьями: