Registriert seit: 13. Jun 2018
5 Beiträge
Delphi 10.1 Berlin Professional
|
AW: Externes Programm zum durchsuchen von *.dfm Dateien und Speicherung von Actions
14. Jun 2018, 14:16
Okay ich hab mir den Ratschlag zu herzen genommen und das ganze mal gebastelt. Ich gehe jede Zeile der *.dfm durch und isoliere den TMainMenu block. Dieser wird dann in einer StringList TempMenuData gespeichert. Diese Liste gehe ich von oben bis unten für jede Datei durch und speicher dann entsprechend den Pfad. Am Ende gehe ich die fertige Tabelle durch und hänge an der entsprechenden Stelle der Action den Pfad dran. Zumindest sollte es so sein. Leider macht er nicht genau das sondern speichert nur den zuerst gefundenen Menüpunkt. Alle darauffolgenden nicht mehr. In dem Falle nur "Datei" und alle seine Items. Der nächste Menüpunkt wäre Bearbeiten. Diesen Block speichert er schon nicht mehr ab.
Delphi-Quellcode:
for linePath in TempMenuData do
begin
if (MenuLevel = 1)
and (TempMenuData.Strings[TempMenuData.IndexOf(linePath)].Contains('object')
and TempMenuData.Strings[TempMenuData.IndexOf(linePath)].Contains('TMenuItem'))
then
begin
tempMenuTop := TempMenuData.Strings[TempMenuData.IndexOf(linePath)];
tempMenuTop := tempMenuTop.Replace(' ', EmptyStr);
tempMenuTop := tempMenuTop.Replace('object', EmptyStr);
tempMenuTop := tempMenuTop.Replace(':TMenuItem', EmptyStr);
MenuLevel := 2;
end
else if (MenuLevel = 2)
and (TempMenuData.Strings[TempMenuData.IndexOf(linePath)].Contains('object')
and TempMenuData.Strings[TempMenuData.IndexOf(linePath)].Contains('TMenuItem'))
then
begin
tempPath := tempMenuTop + '->' + TempMenuData.Strings[TempMenuData.IndexOf(linePath)];
tempPath := tempPath.Replace(' ', EmptyStr);
tempPath := tempPath.Replace('object', EmptyStr);
tempPath := tempPath.Replace(':TMenuItem', EmptyStr);
if TempMenuData.Strings[TempMenuData.IndexOf(linePath)+1].Contains('Action') then
begin
tempMenuAction := TempMenuData.Strings[TempMenuData.IndexOf(linePath)+1];
tempMenuAction := tempMenuAction.Replace('Action = ', '');
tempMenuAction := tempMenuAction.Replace(' ', '');
end;
MenuLevel := 3;
end
else if (MenuLevel = 3)
and (TempMenuData.Strings[TempMenuData.IndexOf(linePath)].Contains('object')
and TempMenuData.Strings[TempMenuData.IndexOf(linePath)].Contains('TMenuItem'))
then
begin
tempPath := tempPath + '->' + TempMenuData.Strings[TempMenuData.IndexOf(linePath)];
tempPath := tempPath.Replace(' ', EmptyStr);
tempPath := tempPath.Replace('object', EmptyStr);
tempPath := tempPath.Replace(':TMenuItem', EmptyStr);
if TempMenuData.Strings[TempMenuData.IndexOf(linePath)+1].Contains('Action') then
begin
tempMenuAction := TempMenuData.Strings[TempMenuData.IndexOf(linePath)+1];
tempMenuAction := tempMenuAction.Replace('Action = ', '');
tempMenuAction := tempMenuAction.Replace(' ', '');
end;
end;
if not linePath.Contains('end') then
begin
for lineNewPath in FinishedTable do
begin
if FinishedTable[FinishedTable.IndexOf(lineNewPath)].Contains(tempMenuAction)
and not FinishedTable[FinishedFile.IndexOf(lineNewPath)].Contains('Path')
then
begin
FinishedTable.Strings[FinishedTable.IndexOf(lineNewPath)]
:= FinishedTable.Strings[FinishedTable.IndexOf(lineNewPath)] +
' Path: ' + tempPath;
break;
end;
end;
end
else if linePath.Contains('end') then
begin
MenuLevel := MenuLevel-1;
end;
if MenuLevel = 0 then
begin
tempPath := EmptyStr;
end;
end;
Alexander
|
|
Zitat
|