KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Валентин Озеров, "Советы по Delphi. Версия 1.4.3 от 1.1.2001" бесплатно, без регистрации.
Перейти на страницу:

procedure TForm3.Button4Click(Sender: TObject);

Var

 Control : Integer;

 DataSource : TDataSource;

 DataField  : String;


 Function GetDataSource(Instance: TComponent) : Boolean;

 Var PropInfo: PPropInfo;

 Begin

  Result := False;

  PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, 'DataSource');

  If (PropInfo <> Nil) And (PropInfo^.PropType^.Kind = tkClass) Then Begin

   DataSource := TDataSource(TypInfo.GetOrdProp(Instance, PropInfo));

   Result := DataSource <> Nil;

  End;

  End;


 Function GetDataField(Instance: TComponent) : Boolean;

 Var PropInfo : PPropInfo;

 Begin

  Result := False;

  PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, 'DataField');

  If (PropInfo <> Nil) And (PropInfo^.PropType^.Kind = tkString) Then Begin

   DataField := TypInfo.GetStrProp(Instance, PropInfo);

   Result := True;

  End;

 End;


 Procedure SetColor(Instance: TComponent; Color: TColor);

 Var PropInfo : PPropInfo;

 Begin

  PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, 'Color');

  If (PropInfo <> Nil) And (PropInfo^.PropType^.Kind = tkInteger) Then TypInfo.SetOrdProp (Instance, PropInfo, Ord(Color));

 End;


begin

 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 может быть использован для обновления списка выбранных записей для уменьшения возможности получения удаленной записи. *}

 // function Refresh: Boolean;  True = orphans found

 {* Свойство Count возвращает количество выбранных в настоящий момент элементов в DBGrid *}

 // property Count: Integer read GetCount;

 {* Свойство CurrentRowSelected содержит логическую величину, зависящую от того, выбрана текущая строка или нет. *}

 // property CurrentRowSelected: Boolean

 //      read GetCurrentRowSelected

 //      write SetCurrentRowSelected;

 {* Свойство Items – TStringList TBookmarkStr *}

 // property Items[Index: Integer]: TBookmarkStr

 //      read GetItem; default;

//  end;


unit Unit1;

interface


uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;


type TForm1 = class(TForm)

 Table1: TTable;

 DBGrid1: TDBGrid;

 Count: TButton;

 Selected: TButton;

 Clear: TButton;

 Delete: TButton;

 Select: TButton;

 GetBookMark: TButton;

 Find: TButton;

 FreeBookmark: TButton;

 DataSource1: TDataSource;

 procedure CountClick(Sender: TObject);

 procedure SelectedClick(Sender: TObject);

 procedure ClearClick(Sender: TObject);

 procedure DeleteClick(Sender: TObject);

 procedure SelectClick(Sender: TObject);

 procedure GetBookMarkClick(Sender: TObject);

 procedure FindClick(Sender: TObject);

 procedure FreeBookmarkClick(Sender: TObject);

private

 { Private declarations }

public

 { Public declarations }

end;


var

 Form1: TForm1;

 Bookmark1: TBookmark;

 z: Integer;


implementation


{$R *.DFM}


//Пример использования свойства Count

procedure TForm1.CountClick(Sender: TObject);

begin

 if DBgrid1.SelectedRows.Count > 0 then begin

  showmessage(inttostr(DBgrid1.SelectedRows.Count));

 end;

end;


//Пример использования свойства CurrentRowSelected

procedure TForm1.SelectedClick(Sender: TObject);

begin

 if DBgrid1.SelectedRows.CurrentRowSelected then showmessage('Выбрана');

end;


//Пример использования метода Clear

procedure TForm1.ClearClick(Sender: TObject);

begin

 dbgrid1.SelectedRows.Clear;

end;


//Пример использования метода Delete

procedure TForm1.DeleteClick(Sender: TObject);

begin

 DBgrid1.SelectedRows.Delete;

end;


{*Данные пример проходит в цикле все выбранныезаписи табличной сетки и отображает второеполе набора данных.


Метод DisableControls используется в случае,когда необходимо запретить обновление DBGridпри изменении набора данных. Последняя позициянабора данных сохраняется как TBookmark.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*