home *** CD-ROM | disk | FTP | other *** search
- unit FileExpU;
-
- interface
-
- uses Windows, Controls, Forms, Menus, Dialogs, Classes, ToolIntf, EditIntf, ExptIntf, VirtIntf, Registry, SysUtils,
- Messages, Graphics, StdCtrls;
-
- type
- TfrmFileName = class(TForm)
- lblFileName: TLabel;
- cmbFiles: TComboBox;
- btnOk: TButton;
- btnCancel: TButton;
- btnBrowse: TButton;
- procedure btnOkClick(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure FormDestroy(Sender: TObject);
- procedure btnCancelClick(Sender: TObject);
- procedure btnBrowseClick(Sender: TObject);
- private
- public
- lstFolders: TStringList;
- procedure ShowDlg(lst: TStringList);
- procedure OpenFile(sFile: String);
- end;
-
- //... and the Expert
- TFileNameExpert = class(TIExpert)
- menFileExp: TIMenuItemIntf;
- menFileSep: TIMenuItemIntf;
- menFileProp: TIMenuItemIntf;
- lstFolders: TStringList;
- constructor Create; virtual;
- destructor Destroy; override;
- function GetName: string; override;
- function GetStyle: TExpertStyle; override;
- function GetState: TExpertState; override;
- function GetIDString: string; override;
- procedure menFileExpClick(Sender: TIMenuItemIntf); virtual;
- procedure menFileExpPropertiesClick(Sender: TIMenuItemIntf); virtual;
- procedure Execute; override;
- end;
-
- function InitExpert(ToolServices: TIToolServices; Registerproc: TExpertRegisterproc; var Terminate: TExpertTerminateProc): Boolean; export; stdcall;
-
- var expFile: TFileNameExpert = NIL;
- frmFileName: TFrmFileName = NIL;
-
- implementation
-
- uses Properties;
-
- {$R *.DFM}
-
- //********* ...and the Expert **************************************************************************************************
- constructor TFileNameExpert.Create;
- var menMain: TIMainMenuIntf;
- menViewWinList: TIMenuItemIntf;
- menViewMenu: TIMenuItemIntf;
- lst: TStringList;
- begin
- inherited Create;
- menMain:=ToolServices.GetMainMenu;
- if Assigned(menMain) then
- try
- menViewWinList:=menMain.FindMenuItem('FileCloseAllItem');
- if Assigned(menViewWinList) then
- try
- menViewMenu:=menViewWinList.GetParent;
- if Assigned(menViewMenu) then
- try
- menFileSep:=menViewMenu.InsertItem(menViewWinList.GetIndex+1, '-', 'FileSeparator1', '', 0, 0, 0, [mfVisible], NIL);
- menFileExp:=menViewMenu.InsertItem(menFileSep.GetIndex+1, 'F&ileName Expert', 'FileExpItem', '', ShortCut(Ord('F'), [ssCtrl, ssAlt]), 0, 0, [mfEnabled, mfVisible], menFileExpClick);
- menFileProp:=menViewMenu.InsertItem(menFileExp.GetIndex+1, 'FileName Expert Properties', 'FileExpProperties', '', ShortCut(Ord('O'), [ssCtrl, ssAlt]), 0, 0, [mfEnabled, mfVisible], menFileExpPropertiesClick);
- finally
- menViewMenu.Free;
- end;
- finally
- menViewWinList.Free;
- end;
- finally
- menMain.Free;
- end;
- frmFileName:=TfrmFileName.Create(Application);
- with TRegistry.Create do begin
- RootKey:=HKEY_CURRENT_USER;
- OpenKey('\Software\Abacus Research AG\FileExp', TRUE);
- if ValueExists('Top') then
- frmFileName.Top:=ReadInteger('Top');
- if ValueExists('Left') then
- frmFileName.Left:=ReadInteger('Left');
- lst:=TStringList.Create;
- OpenKey('Files', TRUE);
- GetValueNames(lst);
- frmFileName.cmbFiles.Items.Assign(lst);
- OpenKey('\Software\Abacus Research AG\FileExp\Folders', TRUE);
- lstFolders:=TStringList.Create;
- GetValueNames(lstFolders);
- lst.Free;
- CloseKey;
- Free;
- end;
- end;
-
- destructor TFileNameExpert.Destroy;
- var lCounter: Longint;
- begin
- with TRegistry.Create do begin
- RootKey:=HKEY_CURRENT_USER;
- OpenKey('\Software\Abacus Research AG\FileExp', TRUE);
- WriteInteger('Top', frmFileName.Top);
- WriteInteger('Left', frmFileName.Left);
- DeleteKey('Files');
- OpenKey('Files', TRUE);
- for lCounter:=0 to Pred(frmFileName.cmbFiles.Items.Count) do
- WriteString(frmFileName.cmbFiles.Items[lCounter], '');
- OpenKey('\Software\Abacus Research AG\FileExp', TRUE);
- DeleteKey('Folders');
- OpenKey('Folders', TRUE);
- for lCounter:=0 to Pred(lstFolders.Count) do
- WriteString(lstFolders[lCounter], '');
- CloseKey;
- Free;
- end;
- lstFolders.Free;
- menFileProp.Free;
- menFileExp.Free;
- menFileSep.Free;
- frmFileName.Free;
- inherited Destroy;
- end;
-
- procedure TFileNameExpert.menFileExpClick(Sender: TIMenuItemIntf);
- begin
- frmFileName.ShowDlg(lstFolders);
- end;
-
- procedure TFileNameExpert.menFileExpPropertiesClick(Sender: TIMenuItemIntf);
- begin
- with TfrmProperties.Create(Application) do begin
- ShowDlg(Self.lstFolders);
- Free;
- end;
- end;
-
- procedure TFileNameExpert.Execute;
- begin
- frmFileName.ShowDlg(lstFolders);
- end;
-
- function TFileNameExpert.GetName: String;
- begin
- Result:='Filename Expert';
- end;
-
- function TFileNameExpert.GetStyle: TExpertStyle;
- begin
- Result:=esAddIn;
- end;
-
- function TFileNameExpert.GetState: TExpertState;
- begin
- Result := [esEnabled];
- end;
-
- function TFileNameExpert.GetIDString: String;
- begin
- Result:='Abacus.FilenameExpert';
- end;
-
- //******* Registration code ***************************************************************************************************
- procedure Register;
- begin
- RegisterLibraryExpert(TFileNameExpert.Create);
- end;
-
- procedure TerminateProc;
- begin
- end;
-
- function InitExpert(ToolServices: TIToolServices; Registerproc: TExpertRegisterproc; var Terminate: TExpertTerminateProc): Boolean; export; stdcall;
- begin
- Result:=ExptIntf.ToolServices=NIL;
- if not Result then
- exit;
- ExptIntf.ToolServices:=ToolServices;
- if Assigned(ToolServices) then
- Application.Handle:=ToolServices.GetParentHandle;
- Terminate:=NIL;
- expFile:=TFileNameExpert.Create;
- RegisterProc(expFile);
- end;
-
- //******* The Form Code *******************************************************************************************************
- procedure TfrmFileName.OpenFile(sFile: String);
- var hn: HWND;
- mModule: TIModuleInterface;
- begin
- hn:=FindWindow('TEditWindow', NIL);
- if hn=0 then begin
- ShowMessage('Cannot find an editor window');
- exit;
- end;
- try
- if not ToolServices.IsFileOpen(sFile) then begin
- ToolServices.OpenFile(sFile);
- mModule:=ToolServices.GetModuleInterface(sFile);
- if Assigned(mModule) then
- try
- mModule.ShowSource;
- finally
- mModule.Free;
- end;
- end;
- except
- ShowMessage('couldn''t open file '+sFile);
- end;
- end;
-
- procedure TfrmFileName.ShowDlg(lst: TStringList);
- begin
- if not Assigned(lstFolders) then
- lstFolders:=TStringList.Create;
- lstFolders.Assign(lst);
- ShowModal;
- end;
-
- procedure TfrmFileName.btnOkClick(Sender: TObject);
- var lCounter: Longint;
- sFolderList: String;
- bFound: Boolean;
- begin
- sFolderList:='';
- for lCounter:=0 to Pred(cmbFiles.Items.Count) do
- if UpperCase(cmbFiles.Items[lCounter])=UpperCase(cmbFiles.Text) then begin
- bFound:=TRUE;
- break;
- end;
- if not bFound then
- cmbFiles.Items.Add(cmbFiles.Text);
- for lCounter:=0 to Pred(lstFolders.Count) do
- sFolderList:=sFolderList+lstFolders[lCounter]+';';
- if (ExtractFilePath(cmbFiles.Text)='') then // Kein Pfad angegeben?
- if FileSearch(cmbFiles.Text, sFolderList)='' then // Kommt das Mistding auch nirgends anders vor?
- if FileSearch(cmbFiles.Text+'.PAS', sFolderList)='' then // Vielleicht mit Extension?
- ShowMessage('couldn''t find '+cmbFiles.Text)
- else
- OpenFile(FileSearch(cmbFiles.Text+'.PAS', sFolderList))
- else
- OpenFile(FileSearch(cmbFiles.Text, sFolderList))
- else // Pfad angegeben
- if not FileExists(cmbFiles.Text) then // nicht gefunden
- if not FileExists(cmbFiles.Text+'.PAS') then // vielleicht mit Extension?
- ShowMessage('couldn''t find file '+cmbFiles.Text+' in any folder!')
- else
- OpenFile(cmbFiles.Text+'.PAS') // Yep
- else
- OpenFile(cmbFiles.Text) // geht auch ohne (opder schon agegeben)
- end;
-
- procedure TfrmFileName.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- Action:=caHide;
- end;
-
- procedure TfrmFileName.FormDestroy(Sender: TObject);
- begin
- lstFolders.Free;
- end;
-
- procedure TfrmFileName.btnCancelClick(Sender: TObject);
- begin
- Hide;
- end;
-
- procedure TfrmFileName.btnBrowseClick(Sender: TObject);
- var sInitDir: String;
- begin
- with TOpenDialog.Create(Application) do begin
- Options:=[ofFileMustExist, ofPathMustExist, ofShowHelp];
- GetDir(0, sInitDir);
- InitialDir:=sInitDir;
- Filter:='Pascal Files (*.pas)|*.pas|Project Files (*.dpr)|*.dpr|All Files (*.*)|*.*';
- if Execute then
- cmbFiles.Text:=FileName;
- Free;
- end;
- end;
-
- end.
-