⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wwsavflt.cpp

📁 InfoPower_Studio 2007 v5.0.1.3 banben
💻 CPP
字号:
//---------------------------------------------------------------------------
// Component to save and restore filters to  text file. - This is
// an example component provided by Woll2Woll.
//
// Components : TwwSaveFilter
//
// Copyright (c) 1997 by Woll2Woll Software
//
//
#include <vcl\vcl.h>
#pragma hdrstop

#include "wwsavflt.h"
//---------------------------------------------------------------------------
__fastcall TwwSaveFilter::TwwSaveFilter(TComponent* Owner)
	: TComponent(Owner)
{
   Delimiter = "///";
   FCalledBySave = False;
   OverwriteMessage = True;
}

__fastcall TwwSaveFilter::~TwwSaveFilter()
{
   if (FFilterDialog!=NULL) FFilterDialog->RemoveDependent(this);
}

// Save filter information to the file
void __fastcall TwwSaveFilter::SaveFilter(System::AnsiString FilterName)
{
  bool DoOverwrite;

  if (FilterName=="") return;

  TStrings * TempStringList;
  if (!FileExists(FilePath)) {
     TempStringList = new TStringList();
     TempStringList->SaveToFile(FilePath);
     TempStringList->Free();
  }

  if (FilterExists(FilterName)){
     if (OverwriteMessage)
     {
        DoOverwrite =
            (MessageDlg("\"" + FilterName + "\" already exists.  Overwrite?",
            mtWarning, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes);
     }
     else DoOverwrite = true;

     if (DoOverwrite) DeleteFilter(FilterName);
     else return;
  }

  TempStringList = new TStringList();
  TempStringList->LoadFromFile(FilePath);
  TwwFieldInfo * curFieldInfo;

  String NewCaseSensitive;
  String NewNonMatching;
  TempStringList->Add(FilterName);
  for (int i=0;i< FFilterDialog->FieldInfo->Count;i++) {
    curFieldInfo = (TwwFieldInfo *)(FFilterDialog->FieldInfo->Items[i]);

    if (curFieldInfo->CaseSensitive)
       NewCaseSensitive = "True";
    else NewCaseSensitive = "False";

    if (curFieldInfo->NonMatching)
       NewNonMatching = "True";
    else NewNonMatching = "False";

    TempStringList->Add(curFieldInfo->FieldName + "\t" +
                     curFieldInfo->DisplayLabel + "\t" +
                     IntToStr(curFieldInfo->MatchType) + "\t" +
                     curFieldInfo->FilterValue + "\t" +
                     curFieldInfo->MinValue + "\t" +
                     curFieldInfo->MaxValue + "\t" +
                     NewCaseSensitive + "\t" + NewNonMatching);
  }

  TempStringList->Add(Delimiter);
  TempStringList->SaveToFile(FilePath);
  TempStringList->Free();
}

// Check if filter exists in file
bool __fastcall TwwSaveFilter::FilterExists(System::AnsiString FilterName)
{
  TStrings * TempStringList = new TStringList();
  TempStringList->LoadFromFile(FilePath);
  int lineNum=0;
  bool result = false;
  while(lineNum<TempStringList->Count) {
     if (TempStringList->Strings[lineNum] == FilterName)
     {
        result = true;
        break;
     }
     else lineNum++;
  }
  TempStringList->Free();

  return result;
}

// Delete filter from file
bool __fastcall TwwSaveFilter::DeleteFilter(System::AnsiString FilterName)
{
  TStrings * TempStringList = new TStringList();
  TempStringList->LoadFromFile(FilePath);
  int lineNum=0;
  bool result = false;
  while(lineNum<TempStringList->Count) {
     if (TempStringList->Strings[lineNum] == FilterName)
     {
        while (lineNum+1<TempStringList->Count)
        {
           TempStringList->Delete(lineNum);
           if (TempStringList->Strings[lineNum]== Delimiter) {
              TempStringList->Delete(lineNum);
              result = true;
              break;
           }
        }
        if (result) break;
     }
     else lineNum++;
  }
  TempStringList->SaveToFile(FilePath);
  TempStringList->Free();

  return result;
}

// Pass the name of the filter you want to load, the same name passed
// from the SaveFilterToFile procedure.
int __fastcall TwwSaveFilter::LoadFilter(System::AnsiString FilterName)
{
  TStrings * TempStringList = new TStringList();
  TempStringList->LoadFromFile(FilePath);
  int lineNum=0;
  bool result = false;

  while(lineNum<TempStringList->Count) {
     if (TempStringList->Strings[lineNum] == FilterName)
     {
        FFilterDialog->ClearFilter();
        TStrings * myFieldInfoStrings = new TStringList();
        TwwFieldInfo *curFieldInfo;
        while (lineNum+1<TempStringList->Count)
        {
           lineNum++;
           if (TempStringList->Strings[lineNum]== Delimiter) break;

           curFieldInfo = new TwwFieldInfo();
           strBreakApart(TempStringList->Strings[lineNum], "\t", myFieldInfoStrings);
           curFieldInfo->FieldName = myFieldInfoStrings->Strings[0];
           curFieldInfo->DisplayLabel = myFieldInfoStrings->Strings[1];
           curFieldInfo->MatchType = TwwFilterMatchType(StrToInt(myFieldInfoStrings->Strings[2]));
           curFieldInfo->FilterValue = myFieldInfoStrings->Strings[3];
           curFieldInfo->MinValue = myFieldInfoStrings->Strings[4];
           curFieldInfo->MaxValue = myFieldInfoStrings->Strings[5];

           if (myFieldInfoStrings->Strings[6] == "True")
              curFieldInfo->CaseSensitive = True;
           else curFieldInfo->CaseSensitive = False;

           if ((myFieldInfoStrings->Count-1 > 6) &&
              (myFieldInfoStrings->Strings[7] == "True"))
              curFieldInfo->NonMatching = True;
           else curFieldInfo->NonMatching = False;

           FFilterDialog->FieldInfo->Add(curFieldInfo);
        }
        myFieldInfoStrings->Free();
        FFilterDialog->ApplyFilter();
        result = true;
        break;
     }
     else lineNum++;
  }

  TempStringList->Free();
  return result;
}

// Get list of filter names
bool __fastcall TwwSaveFilter::GetFilterNames(TStrings *AFilterNames)
{
  AFilterNames->Clear();
  if (!FileExists(FilePath)) return 0;

  TStrings * TempStringList = new TStringList();
  TempStringList->LoadFromFile(FilePath);

  int lineNum=0;
  while(lineNum < TempStringList->Count) {
     if (TempStringList->Strings[lineNum].Length()==0) // Skip null lines
     {
        lineNum++;
        continue;
     }
     if (lineNum<TempStringList->Count)
        AFilterNames->Add(TempStringList->Strings[lineNum]);

     // Skip text until encounter delimeter, then add line following delimeter to list
     while ((TempStringList->Strings[lineNum] != Delimiter) &&
            (lineNum<TempStringList->Count-1)) lineNum++;
     lineNum++;
  }

  TempStringList->Free();

  return (AFilterNames->Count>0);
}

// Inform filterdialog to notify us when it is destroyed
void _fastcall TwwSaveFilter::SetFilterDialog(TwwFilterDialog * val)
{
   if (FFilterDialog!=NULL) FFilterDialog->RemoveDependent(this);
   FFilterDialog=val;
   if (val!=NULL) FFilterDialog->AddDependent(this);
}

void _fastcall TwwSaveFilter::Notification(TComponent * AComponent,
  TOperation Operation)
{
  TComponent::Notification(AComponent, Operation);
  if ((Operation == opRemove) && (AComponent == FFilterDialog))
    FFilterDialog=NULL;
}


namespace Wwsavflt
{
	void __fastcall Register()
	{
		TComponentClass classes[1] = {__classid(TwwSaveFilter)};
		RegisterComponents("Samples", classes, 0);
	}
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -