📄 ehlibmte.pas
字号:
else
Result := '';
end;
function AnsiContainsText(const AText, ASubText: string): Boolean;
begin
Result := AnsiPos(AnsiUppercase(ASubText), AnsiUppercase(AText)) > 0;
end;
function AnsiContainsStr(const AText, ASubText: string): Boolean;
begin
Result := AnsiPos(ASubText, AText) > 0;
end;
var
DataText: String;
i: Integer;
RecView, RecViewFound: TMemRecViewEh;
begin
Result := False;
MemTable := (AGrid.DataSource.DataSet as TCustomMemTableEh);
MemTable.CheckBrowseMode;
if MemTable.BOF and MemTable.EOF then Exit;
TreeList := MemTable.RecordsView.MemoryTreeList;
RecView := MemTable.TreeNode;
FCurInListColIndex := AGrid.SelectedIndex;
if (AGrid.VisibleColCount = 0) then Exit;
MemTable.InstantReadEnter(0);
with AGrid do
begin
AGrid.DataSource.DataSet.DisableControls;
//SaveBookmark;
try
if (Direction = ltdAllEh) then
begin
First;
// TreeListPos := 0;
// MemTable.InstantReadLeave;
// MemTable.InstantReadEnter(TreeList.AccountableItem[TreeListPos], -1);
// AGrid.DataSource.DataSet.First
end else
begin
TreeListPos := 0;
for i := 0 to TreeList.AccountableCount-1 do
if TreeList.AccountableItem[i] = RecView then
begin
TreeListPos := i;
NextNode := RecView;
Break;
end;
ToNextRec;
end;
while not CheckEofBof do
begin
DataText := ColText(AGrid.Columns[FCurInListColIndex]);
//CharCase
if not (ltoCaseInsensitiveEh in AOptions) then
begin
//From any part of field
if ( (Matching = ltmAnyPartEh) and (
AnsiContainsStr(DataText, Text) )
) or (
//Whole field
(Matching = ltmWholeEh) and (DataText = Text)
) or ((Matching = ltmFromBegingEh) and
//From beging of field
(Copy(DataText, 1, Length(Text)) = Text) )
then
begin
Result := True;
// IsFirstTry := False;
Break;
end
end else
//From any part of field
if ( (Matching = ltmAnyPartEh) and (
AnsiContainsText(DataText, Text) )
) or (
//Whole field
(Matching = ltmWholeEh) and (
AnsiUpperCase(DataText) =
AnsiUpperCase(Text))
) or ((Matching = ltmFromBegingEh) and
//From beging of field
(AnsiUpperCase(Copy(DataText, 1, Length(Text))) =
AnsiUpperCase(Text)) ) then
begin
Result := True;
AGrid.SelectedIndex := AGrid.VisibleColumns[FCurInListColIndex].Index;
// IsFirstTry := False;
Break;
end;
ToNextRec;
end;
//if not Result then RestoreBookmark;
finally
AGrid.DataSource.DataSet.EnableControls;
MemTable.InstantReadLeave;
end;
if Result then
begin
// RecViewFound := TreeList.AccountableItem[TreeListPos];
RecViewFound := NextNode;
RecView := RecViewFound;
while RecView.Rec <> nil do
begin
RecView.NodeExpanded := True;
RecView := RecView.NodeParent;
end;
MemTable.GotoRec(RecViewFound.Rec);
end;
// if not RecordFounded then
// ShowMessage(Format(SFindDialogStringNotFoundMessageEh, [cbText.Text]));
end;
end;
{
function LocateText(AGrid: TCustomDBGridEh;
const FieldName, Text: String; AOptions: TLocateTextOptionsEh;
Direction: TLocateTextDirectionEh;
Matching: TLocateTextMatchingEh): Boolean;
var
i: Integer;
TreeList: TMemoryTreeListEh;
RecView, RecViewFound: TMemRecViewEh;
MemTable: TCustomMemTableEh;
begin
Result := False;
RecViewFound := nil;
MemTable := (AGrid.DataSource.DataSet as TCustomMemTableEh);
MemTable.CheckBrowseMode;
if MemTable.BOF and MemTable.EOF then Exit;
TreeList := MemTable.RecordsView.MemoryTreeList;
for i := 0 to TreeList.AccountableCount - 1 do
begin
// if (Options <> []) and (Pos(';', KeyFields) = 0) then
// Result := StringValueEqual(
// VarToStr(TreeList.AccountableItem[i].Rec.DataValues[KeyFields,dvvValueEh]),
// VarToStr(KeyValues))
// else
// Result := VarEquals(TreeList.AccountableItem[i].Rec.DataValues[KeyFields,dvvValueEh], KeyValues);
if Result then
begin
RecViewFound := TreeList.AccountableItem[i];
Break;
end;
end;
if Result then
begin
RecView := RecViewFound;
while RecView.Rec <> nil do
begin
RecView.NodeExpanded := True;
RecView := RecView.NodeParent;
end;
MemTable.GotoRec(RecViewFound.Rec);
end;
end;
}
{ TMTEDatasetFeaturesEh }
constructor TMTEDatasetFeaturesEh.Create;
begin
inherited Create;
SupportsLocalLike := True;
end;
procedure TMTEDatasetFeaturesEh.ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean);
var
DataDriver: TDataDriverEh;
DS: TDataSet;
DatasetFeatures: TDatasetFeaturesEh;
begin
if TDBGridEh(Sender).STFilter.Local then
begin
inherited ApplyFilter(Sender, DataSet, IsReopen)
end else if (DataSet is TCustomMemTableEh) then
begin
if not (DataSet is TCustomMemTableEh) then Exit;
DataDriver := TCustomMemTableEh(DataSet).DataDriver;
if DataDriver = nil then
raise Exception.Create('MemTableEh.DataDriver is empty');
DS := TDataDriverEhCrack(DataDriver).ProviderDataSet;
if DS <> nil then
begin
DatasetFeatures := GetDatasetFeaturesForDataSet(DS);
if DatasetFeatures <> nil then
DatasetFeatures.ApplyFilter(Sender, DS, False);
DataSet.Close;
DataSet.Open;
end else if (DataDriver is TSQLDataDriverEh) then
begin
ApplyFilterForSQLDataDriver(TCustomDBGridEh(Sender),
TSQLDataDriverEh(DataDriver), DateValueToSQLString);
end;
end;
end;
procedure TMTEDatasetFeaturesEh.ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean);
var
DS: TDataSet;
MTE: TCustomMemTableEh;
DatasetFeatures: TDatasetFeaturesEh;
i: Integer;
OrderByStr: String;
DataDriver: TDataDriverEh;
begin
if Sender is TCustomDBGridEh then
if TCustomDBGridEh(Sender).SortLocal then
with TCustomDBGridEh(Sender) do
begin
OrderByStr := '';
for i := 0 to SortMarkedColumns.Count - 1 do
begin
OrderByStr := OrderByStr + SortMarkedColumns[i].FieldName + ' ';
if SortMarkedColumns[i].Title.SortMarker = smUpEh then
OrderByStr := OrderByStr + ' DESC';
OrderByStr := OrderByStr + ',';
end;
Delete(OrderByStr, Length(OrderByStr), 1);
if (DataSet is TCustomMemTableEh) then
begin
MTE := TCustomMemTableEh(DataSet);
if SortInView
then MTE.SortOrder := OrderByStr
else MTE.SortByFields(OrderByStr);
end;
end
else
begin
if not (DataSet is TCustomMemTableEh) then Exit;
DataDriver := TCustomMemTableEh(DataSet).DataDriver;
if DataDriver = nil then
raise Exception.Create('MemTableEh.DataDriver is empty');
DS := TDataDriverEhCrack(DataDriver).ProviderDataSet;
if DS <> nil then
begin
DatasetFeatures := GetDatasetFeaturesForDataSet(DS);
if DatasetFeatures <> nil then
DatasetFeatures.ApplySorting(Sender, DS, False);
DataSet.Close;
DataSet.Open;
end else if (DataDriver is TSQLDataDriverEh) then
begin
ApplySortingForSQLDataDriver(TCustomDBGridEh(Sender),
TSQLDataDriverEh(DataDriver), SortUsingFieldName);
end;
end;
end;
function TMTEDatasetFeaturesEh.LocateText(AGrid: TCustomDBGridEh;
const FieldName, Text: String; AOptions: TLocateTextOptionsEh;
Direction: TLocateTextDirectionEh; Matching: TLocateTextMatchingEh;
TreeFindRange: TLocateTextTreeFindRangeEh): Boolean;
var
mt: TCustomMemTableEh;
begin
mt := nil;
Result := False;
if not ( (AGrid.DataSource <> nil) and (AGrid.DataSource.DataSet <> nil) and
AGrid.DataSource.DataSet.Active )
then
Exit;
if (AGrid.DataSource.DataSet is TCustomMemTableEh) then
mt := (AGrid.DataSource.DataSet as TCustomMemTableEh);
if (mt <> nil) and mt.TreeList.Active and (TreeFindRange <> lttInExpandedNodesEh) then
begin
Result := LocateTextInTree(AGrid, FieldName, Text, AOptions,
Direction, Matching, TreeFindRange, FBaseNode);
end else
Result := inherited LocateText(AGrid, FieldName, Text, AOptions,
Direction, Matching, TreeFindRange);
end;
procedure TMTEDatasetFeaturesEh.ExecuteFindDialog(Sender: TObject;
Text, FieldName: String; Modal: Boolean);
var
mt: TCustomMemTableEh;
Grid: TCustomDBGridEh;
begin
if Sender is TCustomDBGridEh then
Grid := TCustomDBGridEh(Sender)
else
Exit;
if not ( (Grid.DataSource <> nil) and (Grid.DataSource.DataSet <> nil) and
Grid.DataSource.DataSet.Active )
then
Exit;
FBaseNode := nil;
if (Grid.DataSource.DataSet is TCustomMemTableEh) then
begin
mt := (Grid.DataSource.DataSet as TCustomMemTableEh);
if mt.TreeList.Active then
FBaseNode := mt.TreeNode;
end;
inherited ExecuteFindDialog(Sender, Text, FieldName, Modal);
end;
initialization
RegisterDatasetFeaturesEh(TMTEDatasetFeaturesEh, TCustomMemTableEh);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -