From 2b71476e7da6e8e15e731a04d45d469fee430b7e Mon Sep 17 00:00:00 2001 From: alexs75 Date: Tue, 2 Feb 2010 20:31:21 +0000 Subject: [PATCH] documentation, filter in RxMemDataSet git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1152 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/rx/docs/WhatsNew.rus.txt | 7 ++++ components/rx/docs/rxfpc.xml | 54 +++++++++++++++++++++++++++++ components/rx/rx.inc | 2 +- components/rx/rxmemds.pas | 36 +++++++++++++++++-- 4 files changed, 96 insertions(+), 3 deletions(-) diff --git a/components/rx/docs/WhatsNew.rus.txt b/components/rx/docs/WhatsNew.rus.txt index ad0e35dde..9b3aceddd 100644 --- a/components/rx/docs/WhatsNew.rus.txt +++ b/components/rx/docs/WhatsNew.rus.txt @@ -44,6 +44,13 @@ не учитывается регистр символов + В RxDBGrid сохраняется между сеансами порядок сортировки + В RxDBGrid при автоматическом подборе ширины колонки учитывается ширина заголовка + + модуль + + В объекте TRxMemoryData переключил фильтрацию на стандартный механизм из модуля DB - раньше был код + для обхода ошибок. В дальнейшем событие OnFilterRecordEx будет полностью исключено из компонента + + Новый модуль rxFileUtils - набор дополнительных функций для работы с файлами: + GetFileOwnerUser - возвращает имя пользователя-владельца файла (пока только windows) + GetFileOwnerData - возвращает информацию о владельце файла (пока только windows) + NormalizeDirectoryName - приводит все разделитили каталогов в имени файла к тому виду, как принятов данной ОС. 22.05.2008 - версия 2.0.0.136 (svn revision 100) + У объекта TRxCustomDBLookupCombo введён контроль на CircularDataLink + У объекта TRxCustomDBLookupCombo ускорена отрисовка данных diff --git a/components/rx/docs/rxfpc.xml b/components/rx/docs/rxfpc.xml index 48d069092..d81d3e933 100644 --- a/components/rx/docs/rxfpc.xml +++ b/components/rx/docs/rxfpc.xml @@ -523,6 +523,7 @@ TRxDBCalcEdit является наследником TDBCalcEdit и имеет Кол-во элементов данного массива находится в свойстве + Count @@ -545,6 +546,7 @@ TRxDBCalcEdit является наследником TDBCalcEdit и имеет Свойство FileFolder определяет каталог с файлами, который будет сканироваться при вызове метода + Execute и по содержимому которого будет произведено заполнение массива Files @@ -811,6 +813,9 @@ Description property Interval: Word; Свойство определяет временной интервал (в милисекундах), с которым происходит смена изображений в компоненте. при Rotate = True это частота смены битовых изображений. + + + @@ -1575,5 +1580,54 @@ Description Возвращает формат даты по умолчанию + + + + Возвращает имя владельца файла + +

function GetFileOwnerUser(const SearchDomain, FileName:String):String; +

+

Функция возвращает имя пользователя операционной системы владельца указанного файла.

+

Входные параметры: +SearchDomain - Домен, в котором будет производится поиск оператора (пустой для текущего домена оператора). +FileName - Полное имя файла. +

+ В данный момент функция реализована только для windows. +
+ + + +
+ + Возвращает данные владельца файла + +

procedure GetFileOwnerData(const SearchDomain, FileName:String;out UserName, DomainName:String); +

+

Процедура возвращает имя и домен пользователя операционной системы владельца указанного файла.

+

Входные параметры: + SearchDomain - Домен, в котором будет производится поиск оператора (пустой для текущего домена оператора). + FileName - Полное имя файла. +Выходные параметры: + UserName - Имя пльзователя. + DomainName - Домен, в котором найден данный пользователь. +

+ В данный момент функция реализована только для windows. +
+ + + +
+ + Функция приводит к принятому в данной ОС виду все разделители каталогов. + +

+ function NormalizeDirectoryName( + const DirName: + string): + string;

+Функция проверяет все разделители каталогов в указанном имени файла/каталога и, если нужно, меняет их на значение константы + DirectorySeparator.
+
+
diff --git a/components/rx/rx.inc b/components/rx/rx.inc index 2ea778dd7..569921641 100644 --- a/components/rx/rx.inc +++ b/components/rx/rx.inc @@ -10,7 +10,7 @@ {.$DEFINE RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT} {.$DEFINE USED_BiDi} {$DEFINE DEFAULT_POPUP_CALENDAR} - +{.$DEFINE FIX_TRxMemoryData_Filter} {.$DEFINE FIX_BUG_FieldNo} // diff --git a/components/rx/rxmemds.pas b/components/rx/rxmemds.pas index 6ec20e7dc..0ccf1c1bb 100644 --- a/components/rx/rxmemds.pas +++ b/components/rx/rxmemds.pas @@ -28,7 +28,9 @@ type TRxMemoryData = class(TDataSet) private + {$IFDEF FIX_TRxMemoryData_Filter} FOnFilterRecordEx: TFilterRecordEvent; + {$ENDIF} FRecordPos: Integer; FRecordSize: Integer; FBookmarkOfs: Integer; @@ -43,11 +45,13 @@ type FCaseInsensitiveSort: Boolean; FDescendingSort: Boolean; function AddRecord: TMemoryRecord; + function GetOnFilterRecordEx: TFilterRecordEvent; function InsertRecord(Index: Integer): TMemoryRecord; function FindRecordID(ID: Integer): TMemoryRecord; procedure CreateIndexList(const FieldNames: string); procedure FreeIndexList; procedure QuickSort(L, R: Integer; Compare: TCompareRecords); + procedure SetOnFilterRecordEx(const AValue: TFilterRecordEvent); procedure Sort; function CalcRecordSize: Integer; function FindFieldData(Buffer: Pointer; Field: TField): Pointer; @@ -151,7 +155,7 @@ type property OnDeleteError; property OnEditError; property OnFilterRecord; - property OnFilterRecordEx: TFilterRecordEvent read FOnFilterRecordEx write FOnFilterRecordEx; + property OnFilterRecordEx: TFilterRecordEvent read GetOnFilterRecordEx write SetOnFilterRecordEx; property OnNewRecord; property OnPostError; end; @@ -462,6 +466,15 @@ begin Result := TMemoryRecord.Create(Self); end; +function TRxMemoryData.GetOnFilterRecordEx: TFilterRecordEvent; +begin + {$IFDEF FIX_TRxMemoryData_Filter} + Result:=FOnFilterRecordEx; + {$ELSE} + Result:=OnFilterRecord; + {$ENDIF} +end; + function TRxMemoryData.FindRecordID(ID: Integer): TMemoryRecord; var I: Integer; @@ -882,20 +895,29 @@ var SaveState: TDataSetState; begin Result := True; + {$IFDEF FIX_TRxMemoryData_Filter} if Assigned(OnFilterRecordEx) then + {$ELSE} + if Assigned(OnFilterRecord) then + {$ENDIF} begin if (FRecordPos >= 0) and (FRecordPos < RecordCount) then begin SaveState := SetTempState(dsFilter); try RecordToBuffer(Records[FRecordPos], TempBuffer); + {$IFDEF FIX_TRxMemoryData_Filter} OnFilterRecordEx(Self, Result); + {$ELSE} + OnFilterRecord(Self, Result); + {$ENDIF} except Application.HandleException(Self); end; RestoreState(SaveState); end - else Result := False; + else + Result := False; end; end; @@ -1418,6 +1440,16 @@ begin until I >= R; end; +procedure TRxMemoryData.SetOnFilterRecordEx(const AValue: TFilterRecordEvent); +begin + {$IFDEF FIX_TRxMemoryData_Filter} + CheckBiDirectional; + FOnFilterRecordEx:=AValue; + {$ELSE} + OnFilterRecord:=AValue; + {$ENDIF} +end; + function TRxMemoryData.CompareRecords(Item1, Item2: TMemoryRecord): Integer; var Data1, Data2: PChar;