[英]Making Source writable from the Delphi IDE
是否可以在Delphi IDE中编写只读源代码(例如.pas和.dfm)? 右键单击选项可在IDE中生成文件Readonly / Writable,但不会更改文件系统上的属性。 是否有IDE扩展或类似可以实现此目的?
在不必集成源控制系统的情况下执行此操作的方法将是优选的。 我正在使用Delphi XE和Delphi 6。
谢谢!
上证
我就是这样做的。
创建一个新的包,它将在设计时安装到IDE中。 如果你有一个方便的现有包,那么你可以继续使用它。 确保包装requires
的designide
包。 您可以在项目管理器中执行此操作,也可以只查看项目源并将designide
添加到requires
子句中。
现在将以下单元添加到您的包中。
unit MakeEditable;
interface
procedure Register;
implementation
uses
Windows, SysUtils, Menus, ToolsAPI;
type
TMakeEditable = class(TObject)
private
FEditorServices: IOTAEditorServices;
FFileMenu: TMenuItem;
FMakeEditable: TMenuItem;
function MenuItemWithCaptionLike(const Menu: TMenuItem; const DesiredCaption: string): TMenuItem;
procedure MakeEditableClick(Sender: TObject);
public
constructor Create;
destructor Destroy; override;
end;
constructor TMakeEditable.Create;
var
Index: Integer;
PreviousMenuItem: TMenuItem;
begin
inherited;
FEditorServices := (BorlandIDEServices as IOTAEditorServices);
FFileMenu := MenuItemWithCaptionLike((BorlandIDEServices as INTAServices40).MainMenu.Items, 'File');
if Assigned(FFileMenu) then begin
PreviousMenuItem := MenuItemWithCaptionLike(FFileMenu, 'Reopen');
if Assigned(PreviousMenuItem) then begin
Index := PreviousMenuItem.MenuIndex;
if Index>=0 then begin
FMakeEditable := TMenuItem.Create(FFileMenu);
FMakeEditable.Caption := 'Ma&ke Editable';
FMakeEditable.OnClick := MakeEditableClick;
FFileMenu.Insert(Index, FMakeEditable);
end;
end;
end;
end;
destructor TMakeEditable.Destroy;
begin
FMakeEditable.Free;
inherited;
end;
function TMakeEditable.MenuItemWithCaptionLike(const Menu: TMenuItem; const DesiredCaption: string): TMenuItem;
var
i: Integer;
Target, Found: string;
begin
Target := StringReplace(LowerCase(Trim(DesiredCaption)), '&', '', [rfReplaceAll, rfIgnoreCase]);
for i := 0 to Menu.Count-1 do begin
Result := Menu.Items[i];
Found := StringReplace(LowerCase(Trim(Result.Caption)), '&', '', [rfReplaceAll, rfIgnoreCase]);
if Pos(Target, Found)>0 then begin
exit;
end;
end;
Result := nil;
end;
procedure TMakeEditable.MakeEditableClick(Sender: TObject);
procedure MakeFileEditable(const FileName: string);
var
Attributes: DWORD;
begin
Attributes := GetFileAttributes(PChar(FileName));
SetFileAttributes(PChar(FileName), Attributes and not FILE_ATTRIBUTE_READONLY);
end;
var
FileName: string;
FileExt: string;
LinkedFileName: string;
EditBuffer: IOTAEditBuffer;
begin
EditBuffer := FEditorServices.TopBuffer;
FileName := EditBuffer.FileName;
if FileExists(FileName) then begin
MakeFileEditable(FileName);
EditBuffer.IsReadOnly := False;
FileExt := ExtractFileExt(FileName);
if SameText(FileExt,'.dfm') then begin
LinkedFileName := ChangeFileExt(FileName, '.pas');
end else if SameText(FileExt,'.pas') then begin
LinkedFileName := ChangeFileExt(FileName, '.dfm');
end else begin
LinkedFileName := '';
end;
if (LinkedFileName<>'') and FileExists(LinkedFileName) then begin
MakeFileEditable(LinkedFileName);
end;
end;
end;
var
MakeEditableInstance: TMakeEditable;
procedure Register;
begin
MakeEditableInstance := TMakeEditable.Create;
end;
initialization
finalization
MakeEditableInstance.Free;
end.
编译和安装此软件包时,您现在将在“文件”菜单上有一个新菜单项,它既清除输入缓冲区中的只读标志,又使文件可写。
您可以从工具菜单中调用.bat文件。 因此,您可以编写一个.bat文件来为您完成工作,并使用$ EDNAME作为参数调用它。 您的.bat文件应将文件名视为%1。 然后你需要一点逻辑来改变只读标志(attrib命令?),然后看看是否有.dfm并且也做了那个。
如果你对.bat文件不满意,你也可以(显然)制作一个Delphi命令行应用程序。
这个想法受到本文的启发,讨论了如何使用.bat文件将SVN命令与Delphi工具菜单集成: http : //delphi.wikia.com/wiki/Adding_TortoiseSVN_to_the_Tools_menu
另一个想法:只需在工具菜单中添加一个选项:“在此处打开命令提示符”。 它允许您从命令行执行各种操作,例如运行attrib命令。
在“工具”菜单中添加一个新条目,然后使用以下设置:
Title: Open Command Prompt Here
Program: cmd.exe
Working Dir (leave blank)
Parameters: cd $PATH($EDNAME)
此外,让自己成为“在这里打开文件夹”条目:
Title: Open Folder Here
Program: explorer.exe
Working Dir (leave blank)
Parameters: $PATH($EDNAME)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.