Рейтинговые книги
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 64 65 66 67 68 69 70 71 72 ... 123

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.

1 ... 64 65 66 67 68 69 70 71 72 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий