![]() |
AW: Externes Programm zum durchsuchen von *.dfm Dateien und Speicherung von Actions
Zitat:
|
AW: Externes Programm zum durchsuchen von *.dfm Dateien und Speicherung von Actions
Zitat:
|
AW: Externes Programm zum durchsuchen von *.dfm Dateien und Speicherung von Actions
Zitat:
Und falls er es nicht verwenden will (wieso auch immer), kann er es sich doch innerhalb von ner halben Stunde einfach nachbauen...? |
AW: Externes Programm zum durchsuchen von *.dfm Dateien und Speicherung von Actions
Übrigens hat er nirgendwo geschrieben, dass er nichts fertiges benutzen will (korrigiere mich bitte, falls ich falsch liege, habe aber nichts gefunden, das darauf hindeutet. Und selbst wenn, TParser ist nichts "fertiges", es ist nur ein Baustein, genau wie TStringList. Dennoch kann es dir einiges an Arbeit hier abnehmen. Habe das ganze mal (außer die Menüstruktur, da ich noch nicht genau verstanden habe, wie das mit dem "auslesen" gemeint ist) hingeschrieben. So in etwa ließe sich das mit TParser lösen:
Delphi-Quellcode:
Das nur mal, um evtl. einen Denkanstoß zu geben.
program DfmAnalyzer;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Classes, System.Generics.Collections, Vcl.Controls; var FileName: String; Stream: TFileStream; Parser: TParser; Current: String; FormName: String; Actions: TDictionary<TComponentName, TCaption>; procedure ParseObject(const Depth: Byte = 0; const Item: Boolean = False); procedure ParseCollection; begin Parser.NextToken; while Parser.Token <> '>' do begin if Parser.TokenSymbolIs('item') then begin ParseObject(Succ(Depth), True); end; Parser.NextToken; end; Parser.NextToken; end; var ComponentName: String; ComponentType: String; begin Parser.NextToken; if not Item then begin ComponentName := Parser.TokenString; if Depth = 0 then begin FormName := ComponentName; end; Parser.NextToken; Parser.NextToken; ComponentType := Parser.TokenString; Parser.NextToken; end; while not Parser.TokenSymbolIs('end') do begin if Parser.TokenSymbolIs('object') then begin ParseObject(Succ(Depth)); end else begin if Parser.Token = '<' then begin ParseCollection; end else begin if not Item and (ComponentType = 'TAction') and (Parser.TokenSymbolIs('Caption')) then begin Parser.NextToken; Parser.NextToken; Actions.Add(ComponentName, Parser.TokenWideString); end; end; end; Parser.NextToken; end; end; begin try ReadLn(FileName); Stream := TFileStream.Create(FileName, fmOpenRead); Stream.Seek(0, soBeginning); Parser := TParser.Create(Stream, TFormatSettings.Invariant); Actions := TDictionary<TComponentName, TCaption>.Create; try ParseObject; WriteLn('Formularname: ', FormName); for Current in Actions.Keys do begin WriteLn('Caption von ', Current, ': ', QuotedStr(Actions[Current])); end; finally Actions.Free; Parser.Free; Stream.Free; ReadLn; end; except on E: Exception do WriteLn(E.ClassName, ': ', E.Message); end; end. |
AW: Externes Programm zum durchsuchen von *.dfm Dateien und Speicherung von Actions
Hab die Vorschläge jetzt ausprobiert und jetzt funktioniert alles super. Danke :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz