📄 dmain.pas
字号:
ConvLineBreak(s, tDoc.fLineBreak);
StringToFile(Filename, s);
end
else
TDoc.sciMain.Lines.SaveToFile(FileName);
TDoc.sciMain.Modified := False;
end
else begin
TDoc.hxMain.SaveToFile(FileName);
TDoc.hxMain.Modified := False;
end;
TDoc.FileName := Filename;
TDoc.Caption := Filename;
tdoc.sciMain.Highlighter := GetHighlighterforFile(Filename);
if tDoc.sciMain.Highlighter = nil then
tdoc.cmbLang.ItemIndex := 0
else
if tDoc.sciMain.Highlighter is TSynMultiSyn then
tDoc.cmbLang.ItemIndex := tDoc.cmbLang.Items.IndexOf((tDoc.sciMain.Highlighter as TSynMultiSyn).DefaultLanguageName)
else
tDoc.cmbLang.ItemIndex := tDoc.cmbLang.Items.IndexOf(GetLangName(tDoc.sciMain.Highlighter));
TDoc.isFTP := false;
TDoc.DoUpdateCaption;
idx := frmMain.tcFiles.Tabs.IndexOfObject(TDoc);
frmMain.tcFiles.Tabs[idx] := ExtractFileName(Filename);
end
end;
end;
function TdmMain.GetWeb: TfrmWeb;
begin
if frmMain.ActiveMDIChild = nil then Result := nil;
if (frmMain.ActiveMDIChild is TfrmWeb) then
Result := (frmMain.ActiveMDIChild as TfrmWeb)
else
Result := nil;
end;
function TdmMain.GetDoc: TfrmDoc;
begin
if frmMain.ActiveMDIChild = nil then Result := nil;
if (frmMain.ActiveMDIChild is TfrmDoc) then
Result := (frmMain.ActiveMDIChild as TfrmDoc)
else
Result := nil;
end;
procedure TdmMain.actFileCloseAllExecute(Sender: TObject);
var
i: Integer;
begin
CloseAll;
end;
procedure TdmMain.actFileOpenExecute(Sender: TObject);
var
i: integer;
begin
with dlgFileOpen do begin
Options := [ofHideReadOnly,ofPathMustExist,ofEnableSizing, ofAllowMultiSelect];
if Execute then
for i := 0 to Files.Count - 1 do begin
dmMain.NewDoc(Files[i]);
end;
end;
end;
procedure TdmMain.actFilePropertiesExecute(Sender: TObject);
begin
if SelDoc <> nil then
SelDoc.ShowPropertiesDialog;
end;
procedure TdmMain.actFileSaveExecute(Sender: TObject);
begin
if SelDoc <> nil then
SaveDoc(SelDoc);
end;
procedure TdmMain.actFileSaveAsExecute(Sender: TObject);
begin
if SelDoc <> nil then
SaveDocAs(SelDoc);
end;
procedure TdmMain.actFileSaveAllExecute(Sender: TObject);
var
i: integer;
begin
for i:= 0 to frmMain.MDIChildCount - 1 do begin
if (frmMain.MDIChildren[i] is TfrmDoc) then
SaveDoc(frmMain.MDIChildren[i] as TfrmDoc);
end;
end;
procedure TdmMain.ClickLink(strURL: String);
var
fNewWeb: TfrmWeb;
begin
if SelWeb = nil then begin
fNewWeb := TfrmWeb.Create(frmMain);
frmMain.tcFiles.Tabs.InsertObject(frmMain.MDIChildCount-1, 'Webpage', fNewWEb);
frmMain.tcFiles.TabIndex := frmMain.MDIChildCount-1;
fNewWeb.Show;
fNewWeb.www.Navigate(strURL);
exit;
end;
selWeb.www.Navigate(strURL);
end;
procedure TdmMain.actFileShowInBrowserExecute(Sender: TObject);
var
t: TStringList;
f,blah: TStringList;
i,d,l,b: Integer;
s,g,m,y: String;
begin
if SelDoc <> nil then begin
with SelDoc do begin
blah := TStringList.Create;
m := t.Text;
t := TStringList.Create;
t.Text := sciMain.Text;
s := t.Text;
i := pos('<!--', s);
d := i;
if i <> 0 then
s := MidStr(s, i, strLen(PChar(s)) - i);
b := pos('-->', s);
l := b;
if b <> 0 then begin
g := midStr(s, 0, b);
b := Pos('#include file="', g);
if b <> 0 then begin
s := MidStr(g, b+StrLen(PChar('#include file="')), StrLen(PChar(g))-(b + strLen(PChar('#include file="'))));
// b := b+StrLen(PChar('#include file"'));
i := Pos('"', s);
g := MidStr(s, 0, i-1);
if FileExists(ExtractFilePath(Filename) + g) then
f := TStringList.Create;
f.LoadFromFile(ExtractFilePath(Filename) + g);
y := MidStr(t.Text, 0, d-1);
y := y + f.Text;
y := y + MidStr(t.text, l + StrLen('-->'), StrLen(PChar(t.text)));
blah.Text := y;
end;
end;
if FileName <> '' then begin
blah.SaveToFile(ExtractFilePath(Filename) + 'temp01.html');
ClickLink(ExtractFilePath(Filename) + 'temp01.html');
end
else begin
blah.SaveToFile(ExtractFilePath(Application.ExeName) + 'temp\temp01.html');
ClickLink(ExtractFilePath(Application.ExeName) + 'temp\temp01.html');
end;
end;
end;
end;
procedure TdmMain.actFileCloseExecute(Sender: TObject);
begin
if SelDoc <> nil then
SelDoc.Close;
end;
procedure TdmMain.actFileExportHTMLExecute(Sender: TObject);
var
msgResponse: Word;
label Start;
begin
if dmMain.SelDoc = nil then exit;
With dlgFileSave do begin
Filter := 'HTML Files (*.html)|*.html|All Files (*.*)|*.*';
Start:
if Execute then begin
if FileExists(FileName) then begin
msgResponse:=MessageDlg('The file '''+Filename+''''+#13+#10+'already exists. Do you wish to overwrite?', mtWarning, [mbYes,mbNo,mbCancel], 0);
if (msgResponse=mrNo) then
Goto Start
else if (msgResponse=mrCancel) then
exit;
end;
//. dmMain.SelDoc.ExportHTML(Filename);
dmMain.synExportHTML.ExportAsText := True;
dmMain.synExportHTML.Highlighter := dmMain.SelDoc.sciMain.Highlighter;
dmMain.synExportHTML.ExportAll(dmMain.SelDoc.sciMain.Lines);
dmMain.synExportHTML.SavetoFile(FileName);
end;
end;
end;
procedure TdmMain.actFileExportRTFExecute(Sender: TObject);
var
msgResponse: Word;
label Start;
begin
if dmMain.SelDoc = nil then exit;
With dlgFileSave do begin
Filter := 'Richtext Format (*.rtf)|*.rtf|All Files (*.*)|*.*';
Start:
if Execute then begin
if FileExists(FileName) then begin
msgResponse:=MessageDlg('The file '''+Filename+''''+#13+#10+'already exists. Do you wish to overwrite?', mtWarning, [mbYes,mbNo,mbCancel], 0);
if (msgResponse=mrNo) then
Goto Start
else if (msgResponse=mrCancel) then
exit;
end;
//. dmMain.SelDoc.ExportHTML(Filename);
dmMain.synExportRTF.ExportAsText := True;
dmMain.synExportRTF.Highlighter := dmMain.SelDoc.sciMain.Highlighter;
dmMain.synExportRTF.ExportAll(dmMain.SelDoc.sciMain.Lines);
dmMain.synExportRTF.SaveToFile(Filename);
end;
end;
end;
procedure TdmMain.actFileOpenFTPExecute(Sender: TObject);
begin
With TfrmFTP.Create(self) do begin
State := 0;
ShowModal;
end;
end;
procedure TdmMain.actFileSaveFTPExecute(Sender: TObject);
begin
if dmMain.SelDoc = nil then exit;
// Save the file to a temp file.
dmMain.SelDoc.sciMain.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + 'temp\fileTemp.tmp');
frmFTP := TfrmFTP.Create(self);
frmFTP.IsFTP := True;
frmFTP.State := 1;
frmFtp.ShowModal;
end;
procedure TdmMain.actFileExitExecute(Sender: TObject);
begin
frmMain.Close;
end;
procedure TdmMain.actEditUndoExecute(Sender: TObject);
var
sr : string;
i,fc,b,s,m,f:integer;
g: PChar;
linecnt: Integer;
uList: TSynEditUndoList;
iLow, iHigh: Integer;
uItem: TSynEditUndoItem;
begin
if selDoc <> nil then
if selDoc.bHexMode = False then begin
{ if selDoc.sciMain.CanUndo = False then exit;
dmMain.bDunUpdate := True;
uList := selDoc.sciMain.UndoList;
//uItem := uList.PopItem;
//Ulist.PushItem(uItem);
{uItem := uList.PeekItem;
//uItem := uList.PeekItem;
S := 1;
uItem := TSynEditUndoItem(uList.fItems[uList.ItemCount-1]);
f := uItem.ChangeNumber;
iLow := uItem.ChangeStartPos.Y;
iHigh := uItem.ChangeEndPos.y;
fc := UItem.ChangeNumber;
while uItem.ChangeNumber = f do begin
if uList.ItemCount - s > 0 then begin
uItem := TSynEditUndoItem(uList.fItems[uList.ItemCount-S]);
f := uItem.ChangeNumber;
end
else
f := uItem.ChangeNumber + 1;
//if f = uItem.ChangeNumber then begin
MessageBox(0, PChar(IntToStr(iLow) + '|' + IntTOStr(iHigh)), 'test', 0);
if iLow > uItem.ChangeStartPos.Y then iLow := uItem.ChangeStartPos.Y;
if iHigh < uItem.ChangeEndPos.Y then iHigh := uItem.ChangeEndPos.Y;
//end;
S := S + 1;
end;
bDunUpdate := True;
lineCnt := 0;
// First we remove all functions that are located in the lines of consideration.
//MessageBox(0, PChar(IntTostr(uItem.ChangeEndPos.y) + '|' + IntToStr(uItem.ChangeStartPos.y)), 'test', 0);
//MessageBox(0, PChar(IntToStr(UItem.ChangeStartPos.Y) + '|' + IntToStr(UItem.ChangeEndPos.Y)), 'test', 0);
//MessageBox(0, PChar(IntTOStr(uitem.ChangeEndPos.y) + '|' + IntToStr(uitem.ChangeStartPos.y)), 'test', 0);
for i:= iLow to iHigh do begin
for b := selDoc.cmbKeywords.Items.Count - 1 downto 0 do begin
m := Integer(seldoc.cmbKeywords.Items.Objects[b]);
// MessageBox(0, PChar(IntTOStr(Integer(seldoc.cmbKeywords.Items.Objects[b])) + '|' + IntToStr(i)), 'test', 0);
if m = i then begin
seldoc.cmbKeywords.Items.Delete(b);
end;
end;
end;
g := PChar(uitem.changestr);
lineCnt := 0;
for i:= 0 to strLen(g) do begin
if g[i] = chr(10) then
LineCnt := lineCnt + 1;
end;
iAdd := lineCnt + 1;
}
selDoc.sciMain.Undo; {
if iLow < 1 then iLow := 1;
if iHigh > selDoc.sciMain.Lines.Count then iHigh := selDoc.sciMain.Lines.Count;
if iHigh < 1 then iHigh := 1;
if iLow > selDoc.sciMain.Lines.Count then iLow := selDoc.sciMain.Lines.Count;
if iLow < iHigh then begin
SelDoc.ListFunctionsY(iLow-1, iHigh);
seldoc.NeedUpdateFunc(-(iHigh - iLow));
end
else begin
SelDoc.ListFunctionsY(iHigh-1, iLow);
seldoc.NeedUpdateFunc(-(iLow - iHigh));
end;
MessageBox(0, 'test', 'test', 0);
seldoc.NeedUpdateFunc(lineCnt);
MessageBox(0, 'test2', 'test', 0);}
end
else
selDoc.hxMain.Undo;
end;
procedure TdmMain.actEditRedoExecute(Sender: TObject);
var
sr : string;
i,b,s,m,f:integer;
g: PChar;
linecnt: Integer;
uList: TSynEditUndoList;
iLow, iHigh: Integer;
uItem: TSynEditUndoItem;
begin
if selDoc <> nil then
if selDoc.bHexMode = False then begin
{ if selDoc.sciMain.CanRedo = False then exit;
dmMain.bDunUpdate := True;
uList := selDoc.sciMain.RedoList;
//uItem := uList.PopItem;
//Ulist.PushItem(uItem);
{uItem := uList.PeekItem;
//uItem := uList.PeekItem;
S := 1;
uItem := TSynEditUndoItem(uList.fItems[uList.ItemCount-1]);
f := uItem.ChangeNumber;
iLow := uItem.ChangeStartPos.Y;
iHigh := uItem.ChangeEndPos.y;
while uItem.ChangeNumber = f do begin
if uList.ItemCount - s > 0 then begin
uItem := TSynEditUndoItem(uList.fItems[uList.ItemCount-S]);
f := uItem.ChangeNumber;
end
else
f := uItem.ChangeNumber + 1;
if iLow > uItem.ChangeStartPos.Y then iLow := uItem.ChangeStartPos.Y;
if iHigh < uItem.ChangeEndPos.Y then iHigh := uItem.ChangeEndPos.Y;
S := S + 1;
bDunUpdate := True;
lineCnt := 0;
// First we remove all functions that are located in the lines of consideration.
//MessageBox4(0, PChar(IntTostr(uItem.ChangeEndPos.y) + '|' + IntToStr(uItem.ChangeStartPos.y)), 'test', 0);
//MessageBox(0, PChar(IntToStr(UItem.ChangeStartPos.Y) + '|' + IntToStr(UItem.ChangeEndPos.Y)), 'test', 0);
//MessageBox(0, PChar(IntTOStr(uitem.ChangeEndPos.y) + '|' + IntToStr(uitem.ChangeStartPos.y)), 'test', 0);
for i:= uItem.ChangeStartPos.y to uitem.ChangeEndPos.y do begin
for b := selDoc.cmbKeywords.Items.Count - 1 downto 0 do begin
m := Integer(seldoc.cmbKeywords.Items.Objects[b]);
// MessageBox(0, PChar(IntTOStr(Integer(seldoc.cmbKeywords.Items.Objects[b])) + '|' + IntToStr(i)), 'test', 0);
if m = i then begin
seldoc.cmbKeywords.Items.Delete(b);
end;
end;
end;
seldoc.NeedUpdateFunc(-(uitem.ChangeEndPos.y - uitem.ChangeStartPos.y));
g := PChar(uitem.changestr);
lineCnt := 0;
for i:= 0 to strLen(g) do begin
if g[i] = chr(10) then
LineCnt := lineCnt + 1;
end;
iAdd := lineCnt + 1;
seldoc.NeedUpdateFunc(lineCnt);
end; }
selDoc.sciMain.Redo; {
// MessageBox(0, PChar(IntToStr(iLow) + '|' + IntTOStr(iHigh)), 'test', 0);
SelDoc.ListFunctionsY(iLow-1, iHigh);}
end
else begin
sr := Clipboard.AsText;
SelDoc.hxMain.ReplaceSelection ( @sr[1] , Length ( sr ) );
end;
end;
procedure TdmMain.actEditCutExecute(Sender: TObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -