* Also accept *.fmx as form file extension (Firemonkey form files)

This commit is contained in:
Michaël Van Canneyt 2025-03-06 10:21:57 +01:00
parent 5a59ce23e7
commit f95b262013
17 changed files with 81 additions and 22 deletions

View File

@ -4099,7 +4099,7 @@ var
if (ACleanPos<1) or (ACleanPos>SrcLen) or (ParamPos>SrcLen) then break;
s:=UpperCaseStr(copy(Src,ParamPos,6));
if (Src[ACleanPos]='{')
and ((s='*.DFM}') or (s='*.XFM}'))
and ((s='*.DFM}') or (s='*.XFM}') or (s='*.FMX}'))
then begin
StartPos:=FindLineEndOrCodeInFrontOfPosition(ACleanPos,true);
if not SourceChangeCache.Replace(gtNone,gtNone,StartPos,ParamPos+6,'')

View File

@ -662,7 +662,7 @@ var
begin
// form dfm comment
lsToken:=UpperCase(pt.SourceCode);
Result := (pt.TokenType = ttComment) and ((lsToken = '{$R *.DFM}') or (lsToken = '{$R *.LFM}')) and
Result := (pt.TokenType = ttComment) and ((lsToken = '{$R *.DFM}') or (lsToken = '{$R *.LFM}') or (lsToken = '{$R *.FMX}') ) and
pt.HasParentNode(nImplementationSection, 4);
end;

View File

@ -338,7 +338,7 @@ begin
Key:=copy(Code.Source, ParamPos+2, 3);
LowKey:=LowerCase(Key);
// Form file resource rename or lowercase:
if (LowKey='dfm') or (LowKey='xfm') then begin
if (LowKey='dfm') or (LowKey='xfm') or (LowKey='fmx') then begin
if Assigned(Settings) and Settings.SupportDelphi then begin
// Use the same dfm file. Lowercase existing key.
if Settings.SameDfmFile then begin
@ -348,7 +348,7 @@ begin
else begin
// Add IFDEF for .lfm and .dfm allowing Delphi to use .dfm.
s:='{$IFnDEF FPC}'+LineEnding+
' {$R *.dfm}'+LineEnding+
' {$R *.'+Key+'}'+LineEnding+
'{$ELSE}'+LineEnding+
' {$R *.lfm}'+LineEnding+
'{$ENDIF}';

View File

@ -497,6 +497,10 @@ begin
Result:=ChangeFileExt(fOrigUnitFilename,'.xfm');
if FileExistsUTF8(Result) then exit;
Result:=ChangeFileExt(fOrigUnitFilename,'.XFM');
if FileExistsUTF8(Result) then exit;
Result:=ChangeFileExt(fOrigUnitFilename,'.fmx');
if FileExistsUTF8(Result) then exit;
Result:=ChangeFileExt(fOrigUnitFilename,'.FMX');
if not FileExistsUTF8(Result) then
Result:='';
end;

View File

@ -366,7 +366,7 @@ begin
dlgOpen.Filter:=dlgFilterAll+' ('+GetAllFilesMask+')|'+GetAllFilesMask
+'|'+dlgFilterLazarusUnit+' (*.pas;*.pp)|*.pas;*.pp'
+'|'+dlgFilterLazarusProject+' (*.lpi)|*.lpi'
+'|'+dlgFilterLazarusForm+' (*.lfm;*.dfm)|*.lfm;*.dfm'
+'|'+dlgFilterLazarusForm+' (*.lfm;*.dfm;*.fmx)|*.lfm;*.dfm;*.fmx'
+'|'+dlgFilterLazarusPackage+' (*.lpk)|*.lpk'
+'|'+dlgFilterLazarusProjectSource+' (*.lpr)|*.lpr';

View File

@ -3610,7 +3610,7 @@ begin
TheType := lshLFM;
DefaultCommentType := DefaultCommentTypes{%H-}[TheType];
SynInstance := LazSyntaxHighlighterClasses{%H-}[TheType].Create(nil);
SetBothFilextensions('lfm;dfm;xfm');
SetBothFilextensions('lfm;dfm;fmx');
SampleSource :=
'{ Lazarus Form Definitions }'#13 + 'object TestForm: TTestForm'#13 +
' Left = 273'#13 + ' Top = 103'#13 +

View File

@ -156,7 +156,7 @@ function GetDefaultFileDialogFilter: string;
begin
Result := dlgFilterLazarusUnit + ' (*.pas;*.pp)|*.pas;*.pp'
+ '|' + dlgFilterLazarusProject + ' (*.lpi)|*.lpi'
+ '|' + dlgFilterLazarusForm + ' (*.lfm;*.dfm)|*.lfm;*.dfm'
+ '|' + dlgFilterLazarusForm + ' (*.lfm;*.dfm;*.fmx)|*.lfm;*.dfm;*.fmx'
+ '|' + dlgFilterLazarusPackage + ' (*.lpk)|*.lpk'
+ '|' + dlgFilterLazarusProjectSource + ' (*.lpr)|*.lpr'
+ '|' + dlgFilterLazarusOtherFile + ' (*.inc;*.lrs;*.lpl;*.todo)|*.inc;*.lrs;*.lpl;*.todo';

View File

@ -1016,7 +1016,7 @@ resourcestring
lisClickHereToBrowseTheFileHint = 'Click here to browse the file';
lisOpenPackageFile = 'Open Package File';
lisSaveSpace = 'Save ';
lisSelectDFMFiles = 'Select Delphi form files (*.dfm)';
lisSelectDFMFiles = 'Select Delphi form files (*.dfm|*.fmx)';
lisChooseLazarusSourceDirectory = 'Choose Lazarus Directory';
lisChooseCompilerExecutable = 'Choose compiler executable (%s)';
lisChooseFPCSourceDir = 'Choose FPC source directory';

View File

@ -120,11 +120,16 @@ begin
NewCode,NewX,NewY,NewTopLine, ResourceDirectiveFilename,false)
then
Cache.ResourceDirective:=ResourceDirectiveFilename
else if (ResourceDirectiveFilename<>'*.dfm')
else if (ResourceDirectiveFilename<>'*.dfm')
and CodeToolBoss.FindResourceDirective(CodeBuf,1,1,
NewCode,NewX,NewY,NewTopLine, '*.dfm',false)
then
Cache.ResourceDirective:='*.dfm';
Cache.ResourceDirective:='*.dfm'
else if (ResourceDirectiveFilename<>'*.fmx')
and CodeToolBoss.FindResourceDirective(CodeBuf,1,1,
NewCode,NewX,NewY,NewTopLine, '*.fmx',false)
then
Cache.ResourceDirective:='*.fmx';
end;
Result:=Cache.ResourceDirective<>'';
end;
@ -140,7 +145,13 @@ begin
then begin
DFMFilename:=ChangeFileExt(AUnitFilename,'.dfm');
if FileExistsCached(DFMFilename) then
Result:=DFMFilename;
Result:=DFMFilename
else
begin
DFMFilename:=ChangeFileExt(AUnitFilename,'.fmx');
if FileExistsCached(DFMFilename) then
Result:=DFMFilename;
end;
end;
end;

View File

@ -5475,7 +5475,11 @@ var
// ToDo: use UnitResources
LFMFilename:=ChangeFileExt(UnitFilename,'.lfm');
if not FileExistsCached(LFMFilename) then
begin
LFMFilename:=ChangeFileExt(UnitFilename,'.dfm');
if not FileExistsCached(LFMFilename) then
LFMFilename:=ChangeFileExt(UnitFilename,'.fmx');
end;
if FileExistsCached(LFMFilename) then begin
// load the lfm file
ModalResult:=LoadCodeBuffer(LFMCode,LFMFilename,[lbfCheckIfText],true);
@ -5541,7 +5545,11 @@ var
// ToDo: use UnitResources
LFMFilename:=ChangeFileExt(UnitFilename,'.lfm');
if not FileExistsUTF8(LFMFilename) then
begin
LFMFilename:=ChangeFileExt(UnitFilename,'.dfm');
if not FileExistsUTF8(LFMFilename) then
LFMFilename:=ChangeFileExt(UnitFilename,'.fmx');
end;
ModalResult:=LoadCodeBuffer(LFMCode,LFMFilename,[lbfCheckIfText],false);
if ModalResult<>mrOk then begin
debugln('Error: (lazarus) [TMainIDE.DoFixupComponentReferences] Failed loading ',LFMFilename);
@ -8564,7 +8572,7 @@ begin
InputHistories.ApplyFileDialogSettings(OpenDialog);
OpenDialog.Title:=lisSelectDFMFiles;
OpenDialog.Options:=OpenDialog.Options+[ofAllowMultiSelect];
OpenDialog.Filter:=dlgFilterDelphiForm+' (*.dfm)|*.dfm|'+dlgFilterAll+'|'+GetAllFilesMask;
OpenDialog.Filter:=dlgFilterDelphiForm+' (*.dfm|*.fmx)|*.dfm|*.fmx|'+dlgFilterAll+'|'+GetAllFilesMask;
if OpenDialog.Execute and (OpenDialog.Files.Count>0) then begin
n := 0;
For I := 0 to OpenDialog.Files.Count-1 do begin
@ -12118,7 +12126,11 @@ begin
// ToDo: use UnitResources
LFMFilename:=ChangeFileExt(AnUnitInfo.Filename, '.lfm');
if not FileExistsUTF8(LFMFilename) then
begin
LFMFilename:=ChangeFileExt(AnUnitInfo.Filename, '.dfm');
if not FileExistsUTF8(LFMFilename) then
LFMFilename:=ChangeFileExt(AnUnitInfo.Filename, '.fmx');
end;
OpenEditorFile(LFMFilename, EditorInfo.PageIndex+1, EditorInfo.WindowID, nil, [], True);
end;
@ -12580,7 +12592,9 @@ begin
else if FilenameIsAbsolute(AnUnitInfo.Filename)
and FilenameIsPascalSource(AnUnitInfo.Filename)
and ( FileExistsCached(ChangeFileExt(AnUnitInfo.Filename,'.lfm'))
or FileExistsCached(ChangeFileExt(AnUnitInfo.Filename,'.dfm')) )
or FileExistsCached(ChangeFileExt(AnUnitInfo.Filename,'.dfm'))
or FileExistsCached(ChangeFileExt(AnUnitInfo.Filename,'.fmx'))
)
then
HasResources:=true;
end;

View File

@ -615,7 +615,7 @@ begin
OpenDialog.Filter:=dlgFilterAll+' ('+GetAllFilesMask+')|'+GetAllFilesMask
+'|'+dlgFilterLazarusUnit+' (*.pas;*.pp)|*.pas;*.pp'
+'|'+dlgFilterLazarusInclude+' (*.inc)|*.inc'
+'|'+dlgFilterLazarusForm+' (*.lfm;*.dfm)|*.lfm;*.dfm';
+'|'+dlgFilterLazarusForm+' (*.lfm;*.dfm;*.fmx)|*.lfm;*.dfm;*.fmx';
if OpenDialog.Execute then
begin
InputHistories.StoreFileDialogSettings(OpenDialog);

View File

@ -244,7 +244,11 @@ begin
begin
LfmFile := ChangeFileExt(AFilename, '.dfm');
if not FileExistsUTF8(LfmFile) then
LfmFile := '';
begin
LfmFile := ChangeFileExt(AFilename, '.fmx');
if not FileExistsUTF8(LfmFile) then
LfmFile := '';
end;
end;
if LfmFile <> '' then
Result := CopyAFile(LfmFile); // Recursive call.

View File

@ -7538,12 +7538,14 @@ begin
if FilenameHasPascalExt(ShortFileName) then begin
MaybeAddPopup('.lfm');
MaybeAddPopup('.dfm');
MaybeAddPopup('.fmx');
MaybeAddPopup('.lrs');
MaybeAddPopup('.s');
end;
// ToDo: unit resources
if FilenameExtIs(ShortFileName,'lfm',true)
or FilenameExtIs(ShortFileName,'dfm') then begin
or FilenameExtIs(ShortFileName,'dfm')
or FilenameExtIs(ShortFileName,'fmx') then begin
MaybeAddPopup('.pas');
MaybeAddPopup('.pp');
MaybeAddPopup('.p');

View File

@ -4952,8 +4952,8 @@ begin
Filter := dlgFilterLazarusUnit + ' (*.pas;*.pp)|*.pas;*.pp';
if (SaveAsFileExt='.lpi') then
Filter:=Filter+ '|' + dlgFilterLazarusProject + ' (*.lpi)|*.lpi';
if (SaveAsFileExt='.lfm') or (SaveAsFileExt='.dfm') then
Filter:=Filter+ '|' + dlgFilterLazarusForm + ' (*.lfm;*.dfm)|*.lfm;*.dfm';
if (SaveAsFileExt='.lfm') or (SaveAsFileExt='.dfm') or (SaveAsFileExt='.fmx') then
Filter:=Filter+ '|' + dlgFilterLazarusForm + ' (*.lfm;*.dfm;*.fmx)|*.lfm;*.dfm;*.fmx';
if (SaveAsFileExt='.lpk') then
Filter:=Filter+ '|' + dlgFilterLazarusPackage + ' (*.lpk)|*.lpk';
if (SaveAsFileExt='.lpr') then
@ -5802,7 +5802,11 @@ begin
if FilenameHasPascalExt(OldFilename) then begin
OldLFMFilename:=ChangeFileExt(OldFilename,'.lfm');
if not FileExistsUTF8(OldLFMFilename) then
begin
OldLFMFilename:=ChangeFileExt(OldFilename,'.dfm');
if not FileExistsUTF8(OldLFMFilename) then
OldLFMFilename:=ChangeFileExt(OldFilename,'.fmx');
end;
end;
if NewUnitName='' then
NewUnitName:=AnUnitInfo.Unit_Name;
@ -6089,7 +6093,9 @@ begin
// check, if a .lfm file is opened in the source editor
if (LFMUnitInfo=nil)
or not ( FilenameExtIs(LFMUnitInfo.Filename,'lfm',true) or
FilenameExtIs(LFMUnitInfo.Filename,'dfm') ) then
FilenameExtIs(LFMUnitInfo.Filename,'dfm') or
FilenameExtIs(LFMUnitInfo.Filename,'fmx')
) then
begin
if not Quiet then
begin
@ -6897,7 +6903,11 @@ begin
// ToDo: use UnitResources
LFMFilename:=ChangeFileExt(AFilename,'.lfm');
if not FileExistsInIDE(LFMFilename,[]) then
begin
LFMFilename:=ChangeFileExt(AFilename,'.dfm');
if not FileExistsInIDE(LFMFilename,[]) then
LFMFilename:=ChangeFileExt(AFilename,'.fmx');
end;
if not FileExistsInIDE(LFMFilename,[]) then begin
DebugLn(['OpenComponent file not found ',LFMFilename]);
exit(mrCancel);
@ -7220,7 +7230,14 @@ var
{$IFDEF VerboseLFMSearch}
debugln([' TryLFM CurLFMFilename="',CurLFMFilename,'" does not exist']);
{$ENDIF}
exit;
CurLFMFilename:=ChangeFileExt(UnitFilename,'.fmx');
if not FileExistsCached(CurLFMFilename) then
begin
{$IFDEF VerboseLFMSearch}
debugln([' TryLFM CurLFMFilename="',CurLFMFilename,'" does not exist']);
{$ENDIF}
exit;
end;
end;
end;
// load the lfm file
@ -8141,7 +8158,11 @@ begin
then begin
LFMFilename:=ChangeFileExt(AnUnitInfo.Filename,'.lfm');
if not FileExistsCached(LFMFilename) then
begin
LFMFilename:=ChangeFileExt(AnUnitInfo.Filename,'.dfm');
if not FileExistsCached(LFMFilename) then
LFMFilename:=ChangeFileExt(AnUnitInfo.Filename,'.fmx');
end;
AnUnitInfo.HasResources:=FileExistsCached(LFMFilename);
end;
end;

View File

@ -295,6 +295,7 @@ procedure TPGIPConflictsDialog.DeleteSelectedFilesButtonClick(Sender: TObject);
DeleteFileUTF8(ChangeFileExt(aFilename,'.lfm'));
DeleteFileUTF8(ChangeFileExt(aFilename,'.dfm'));
DeleteFileUTF8(ChangeFileExt(aFilename,'.xfm'));
DeleteFileUTF8(ChangeFileExt(aFilename,'.fmx'));
end else if FilenameIsCompiledSource(aFilename) then begin
// compiled file -> delete compiled files. Keep sources.
DeleteFileUTF8(ChangeFileExt(aFilename,'.ppu'));
@ -310,6 +311,7 @@ procedure TPGIPConflictsDialog.DeleteSelectedFilesButtonClick(Sender: TObject);
DeleteFileUTF8(ChangeFileExt(aFilename,'.lfm'));
DeleteFileUTF8(ChangeFileExt(aFilename,'.dfm'));
DeleteFileUTF8(ChangeFileExt(aFilename,'.xfm'));
DeleteFileUTF8(ChangeFileExt(aFilename,'.fmx'));
end;
end;
Result:=true;
@ -656,7 +658,7 @@ var
AnUnitName:=ExtractFileNameOnly(aFilename);
if not IsDottedIdentifier(AnUnitName) then continue;
end
else if FilenameExtIn(aFilename,['.inc', '.lfm', '.dfm']) then
else if FilenameExtIn(aFilename,['.inc', '.lfm', '.dfm','.fmx']) then
begin {Do nothing} end
else
continue;

View File

@ -1695,7 +1695,7 @@ begin
dlgFilterAll+' ('+GetAllFilesMask+')|'+GetAllFilesMask
+'|'+dlgFilterLazarusUnit+' (*.pas;*.pp)|*.pas;*.pp'
+'|'+dlgFilterLazarusProject+' (*.lpi)|*.lpi'
+'|'+dlgFilterLazarusForm+' (*.lfm;*.dfm)|*.lfm;*.dfm'
+'|'+dlgFilterLazarusForm+' (*.lfm;*.dfm;*.fmx)|*.lfm;*.dfm;*.fmx'
+'|'+dlgFilterLazarusPackage+' (*.lpk)|*.lpk'
+'|'+dlgFilterLazarusProjectSource+' (*.lpr)|*.lpr';
if OpenDialog.Execute then

View File

@ -2081,6 +2081,7 @@ var
UnitFilenameToResFileList[OldFilename]:=ResFileList;
AddResFile(ResFileList,ChangeFileExt(OldFilename,'.lfm'));
AddResFile(ResFileList,ChangeFileExt(OldFilename,'.dfm'));
AddResFile(ResFileList,ChangeFileExt(OldFilename,'.fmx'));
AddResFile(ResFileList,ChangeFileExt(OldFilename,'.lrs'));
UnitResArr:=GetUnitResourcefileFormats;
for j:=0 to length(UnitResArr)-1 do begin