documentation, filter in RxMemDataSet

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1152 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75 2010-02-02 20:31:21 +00:00
parent 3d1414df44
commit 2b71476e7d
4 changed files with 96 additions and 3 deletions

View File

@ -44,6 +44,13 @@
не учитывается регистр символов не учитывается регистр символов
+ В RxDBGrid сохраняется между сеансами порядок сортировки + В RxDBGrid сохраняется между сеансами порядок сортировки
+ В RxDBGrid при автоматическом подборе ширины колонки учитывается ширина заголовка + В RxDBGrid при автоматическом подборе ширины колонки учитывается ширина заголовка
+ модуль
+ В объекте TRxMemoryData переключил фильтрацию на стандартный механизм из модуля DB - раньше был код
для обхода ошибок. В дальнейшем событие OnFilterRecordEx будет полностью исключено из компонента
+ Новый модуль rxFileUtils - набор дополнительных функций для работы с файлами:
GetFileOwnerUser - возвращает имя пользователя-владельца файла (пока только windows)
GetFileOwnerData - возвращает информацию о владельце файла (пока только windows)
NormalizeDirectoryName - приводит все разделитили каталогов в имени файла к тому виду, как принятов данной ОС.
22.05.2008 - версия 2.0.0.136 (svn revision 100) 22.05.2008 - версия 2.0.0.136 (svn revision 100)
+ У объекта TRxCustomDBLookupCombo введён контроль на CircularDataLink + У объекта TRxCustomDBLookupCombo введён контроль на CircularDataLink
+ У объекта TRxCustomDBLookupCombo ускорена отрисовка данных + У объекта TRxCustomDBLookupCombo ускорена отрисовка данных

View File

@ -523,6 +523,7 @@ TRxDBCalcEdit является наследником TDBCalcEdit и имеет
Кол-во элементов данного массива находится в свойстве Кол-во элементов данного массива находится в свойстве
<b>Count</b> <b>Count</b>
</descr> </descr>
<seealso> <seealso>
@ -545,6 +546,7 @@ TRxDBCalcEdit является наследником TDBCalcEdit и имеет
Свойство FileFolder определяет каталог с файлами, который будет сканироваться при вызове метода Свойство FileFolder определяет каталог с файлами, который будет сканироваться при вызове метода
<b>Execute</b> и по содержимому которого будет произведено заполнение массива Files</descr> <b>Execute</b> и по содержимому которого будет произведено заполнение массива Files</descr>
<seealso> <seealso>
<link id="TFolderLister.Execute"/> <link id="TFolderLister.Execute"/>
@ -811,6 +813,9 @@ Description
<short>property Interval: Word;</short> <short>property Interval: Word;</short>
<descr>Свойство определяет временной интервал (в милисекундах), с которым происходит смена изображений в компоненте. <descr>Свойство определяет временной интервал (в милисекундах), с которым происходит смена изображений в компоненте.
при Rotate = True это частота смены битовых изображений.</descr> при Rotate = True это частота смены битовых изображений.</descr>
<seealso>
<link id="TRxDice.Rotate"/>
</seealso>
</element> </element>
<element name="TRxDice.ParentColor"/> <element name="TRxDice.ParentColor"/>
<element name="TRxDice.ParentShowHint"/> <element name="TRxDice.ParentShowHint"/>
@ -1575,5 +1580,54 @@ Description
<short>Возвращает формат даты по умолчанию</short> <short>Возвращает формат даты по умолчанию</short>
</element> </element>
</module> </module>
<module name="rxFileUtils">
<topic name="GetFileOwnerUser"/>
<element name="GetFileOwnerUser">
<short>Возвращает имя владельца файла</short>
<descr>
<p>function <b>GetFileOwnerUser</b>(const SearchDomain, FileName:<b>String</b>):<b>String</b>;
</p>
<p>Функция возвращает имя пользователя операционной системы владельца указанного файла. </p>
<p>Входные параметры:
SearchDomain - Домен, в котором будет производится поиск оператора (пустой для текущего домена оператора).
FileName - Полное имя файла.
</p>
<remark>В данный момент функция реализована только для windows.</remark>
</descr>
<seealso>
<link id="GetFileOwnerData"/>
</seealso>
</element>
<element name="GetFileOwnerData">
<short>Возвращает данные владельца файла</short>
<descr>
<p>procedure GetFileOwnerData(const SearchDomain, FileName:<b>String</b>;out UserName, DomainName:<b>String</b>);
</p>
<p>Процедура возвращает имя и домен пользователя операционной системы владельца указанного файла. </p>
<p>Входные параметры:
SearchDomain - Домен, в котором будет производится поиск оператора (пустой для текущего домена оператора).
FileName - Полное имя файла.
Выходные параметры:
UserName - Имя пльзователя.
DomainName - Домен, в котором найден данный пользователь.
</p>
<remark>В данный момент функция реализована только для windows.</remark>
</descr>
<seealso>
<link id="GetFileOwnerData"/>
</seealso>
</element>
<element name="NormalizeDirectoryName">
<short>Функция приводит к принятому в данной ОС виду все разделители каталогов.</short>
<descr>
<p>
<b>function</b> NormalizeDirectoryName(
<b>const</b> DirName:
<b>string</b>):
<b>string</b>;</p>
Функция проверяет все разделители каталогов в указанном имени файла/каталога и, если нужно, меняет их на значение константы
<b>DirectorySeparator</b>.</descr>
</element>
</module>
</package> </package>
</fpdoc-descriptions> </fpdoc-descriptions>

View File

@ -10,7 +10,7 @@
{.$DEFINE RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT} {.$DEFINE RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT}
{.$DEFINE USED_BiDi} {.$DEFINE USED_BiDi}
{$DEFINE DEFAULT_POPUP_CALENDAR} {$DEFINE DEFAULT_POPUP_CALENDAR}
{.$DEFINE FIX_TRxMemoryData_Filter}
{.$DEFINE FIX_BUG_FieldNo} {.$DEFINE FIX_BUG_FieldNo}
// //

View File

@ -28,7 +28,9 @@ type
TRxMemoryData = class(TDataSet) TRxMemoryData = class(TDataSet)
private private
{$IFDEF FIX_TRxMemoryData_Filter}
FOnFilterRecordEx: TFilterRecordEvent; FOnFilterRecordEx: TFilterRecordEvent;
{$ENDIF}
FRecordPos: Integer; FRecordPos: Integer;
FRecordSize: Integer; FRecordSize: Integer;
FBookmarkOfs: Integer; FBookmarkOfs: Integer;
@ -43,11 +45,13 @@ type
FCaseInsensitiveSort: Boolean; FCaseInsensitiveSort: Boolean;
FDescendingSort: Boolean; FDescendingSort: Boolean;
function AddRecord: TMemoryRecord; function AddRecord: TMemoryRecord;
function GetOnFilterRecordEx: TFilterRecordEvent;
function InsertRecord(Index: Integer): TMemoryRecord; function InsertRecord(Index: Integer): TMemoryRecord;
function FindRecordID(ID: Integer): TMemoryRecord; function FindRecordID(ID: Integer): TMemoryRecord;
procedure CreateIndexList(const FieldNames: string); procedure CreateIndexList(const FieldNames: string);
procedure FreeIndexList; procedure FreeIndexList;
procedure QuickSort(L, R: Integer; Compare: TCompareRecords); procedure QuickSort(L, R: Integer; Compare: TCompareRecords);
procedure SetOnFilterRecordEx(const AValue: TFilterRecordEvent);
procedure Sort; procedure Sort;
function CalcRecordSize: Integer; function CalcRecordSize: Integer;
function FindFieldData(Buffer: Pointer; Field: TField): Pointer; function FindFieldData(Buffer: Pointer; Field: TField): Pointer;
@ -151,7 +155,7 @@ type
property OnDeleteError; property OnDeleteError;
property OnEditError; property OnEditError;
property OnFilterRecord; property OnFilterRecord;
property OnFilterRecordEx: TFilterRecordEvent read FOnFilterRecordEx write FOnFilterRecordEx; property OnFilterRecordEx: TFilterRecordEvent read GetOnFilterRecordEx write SetOnFilterRecordEx;
property OnNewRecord; property OnNewRecord;
property OnPostError; property OnPostError;
end; end;
@ -462,6 +466,15 @@ begin
Result := TMemoryRecord.Create(Self); Result := TMemoryRecord.Create(Self);
end; end;
function TRxMemoryData.GetOnFilterRecordEx: TFilterRecordEvent;
begin
{$IFDEF FIX_TRxMemoryData_Filter}
Result:=FOnFilterRecordEx;
{$ELSE}
Result:=OnFilterRecord;
{$ENDIF}
end;
function TRxMemoryData.FindRecordID(ID: Integer): TMemoryRecord; function TRxMemoryData.FindRecordID(ID: Integer): TMemoryRecord;
var var
I: Integer; I: Integer;
@ -882,20 +895,29 @@ var
SaveState: TDataSetState; SaveState: TDataSetState;
begin begin
Result := True; Result := True;
{$IFDEF FIX_TRxMemoryData_Filter}
if Assigned(OnFilterRecordEx) then if Assigned(OnFilterRecordEx) then
{$ELSE}
if Assigned(OnFilterRecord) then
{$ENDIF}
begin begin
if (FRecordPos >= 0) and (FRecordPos < RecordCount) then if (FRecordPos >= 0) and (FRecordPos < RecordCount) then
begin begin
SaveState := SetTempState(dsFilter); SaveState := SetTempState(dsFilter);
try try
RecordToBuffer(Records[FRecordPos], TempBuffer); RecordToBuffer(Records[FRecordPos], TempBuffer);
{$IFDEF FIX_TRxMemoryData_Filter}
OnFilterRecordEx(Self, Result); OnFilterRecordEx(Self, Result);
{$ELSE}
OnFilterRecord(Self, Result);
{$ENDIF}
except except
Application.HandleException(Self); Application.HandleException(Self);
end; end;
RestoreState(SaveState); RestoreState(SaveState);
end end
else Result := False; else
Result := False;
end; end;
end; end;
@ -1418,6 +1440,16 @@ begin
until I >= R; until I >= R;
end; 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; function TRxMemoryData.CompareRecords(Item1, Item2: TMemoryRecord): Integer;
var var
Data1, Data2: PChar; Data1, Data2: PChar;