Identifizieren von Actions, Buttons & Toolbars via Event "vor Menüausführung"
Vorgehen:
Einbinden im Event "Vor Menüausführung" (Code siehe unten)
be neustarten, Menü anklicken - hier: Toolbar-Menüpunkt im Fenster "Seriennummernverwaltung"
debug-log ansehen - hier exemplarisch
Tipps:
Der Pfad der Log Datei lässt sich über die Funktion - DBG_Logging_DetermineDefaultLogFilePath() eruieren. (Ausführung in BE über den Codeblock Editor).
Aktivierung des Logs in den Admin-Tools\ Logging\ Logging aktivieren
| nEvtNo:P1, oAction:P2, oForm:P3, m_cReferenz |
m_cReferenz := 'DBG_FindMenuItemsForAction',
//******************************************************************************
// Gibt die Namen der Toolbars aus dem übergeben Formular per PRS() aus
//******************************************************************************
function DBG_FindBarNames(oOwner)
|i, oComp |
for i := 0 to ComponentCount(oOwner) - 1 do
oComp := Components(oOwner, i),
if ((ClassName(oComp) == 'TbeBar') or (ClassName(oComp) == 'TdxBar')) and not (oComp.name = 'tb_') then
prs(m_cReferenz, oComp.Name),
endif,
next,
end,
//******************************************************************************
// Finde alle Menüpunkte, die die übergebene Action verwenden und gebe diese per PRS() aus
//******************************************************************************
function DBG_FindMenuItemsForAction(oOwner, oAction)
| i, aCurrentComponent |
//***************************************************************************
function IsContainerWithSubComponents(aComponent)
Result := False,
Result := Result or ClassOf(aCurrentComponent, 'TPanel'),
Result := Result or ClassOf(aCurrentComponent, 'TFrame'),
Result := Result or ClassOf(aCurrentComponent, 'TForm'),
Result := Result or ClassOf(aCurrentComponent, 'TFormEx'),
Result := Result or ClassOf(aCurrentComponent, 'TGroupBox'),
end,
//***************************************************************************
function PrintComponents(oOwner, oOwnerName, nIndentLevel)
| i, cIndentSpaces, oParentToolbar |
for i := 0 to ComponentCount(oOwner) - 1 do
aCurrentComponent := Components(oOwner, i),
if not empty(aCurrentComponent) then
startseq
writeln(oOwnerName + ' -> "' + aCurrentComponent.Name + '": ' + ClassName(aCurrentComponent)),
if ClassOf(aCurrentComponent, 'TMenuItem') or ClassOf(aCurrentComponent, 'TbeBarButton') or ClassOf(aCurrentComponent, 'TbeBarSubItem') or ClassOf(aCurrentComponent, 'TdxBarButton') or ClassOf(aCurrentComponent, 'TdxBarSubItem') then
if aCurrentComponent.Action = oAction then
prs(m_cReferenz,"OwnerName: '" + rtrim(oOwnerName) + "', ComponentName: '" + rtrim(aCurrentComponent.Name) + "', ClassName: '" + ClassName(aCurrentComponent) + "', Caption: '" + aCurrentComponent.Caption + "'"),
endif,
endif,
onerror
prs(m_cReferenz,GetErrortext()),
stopseq,
if IsContainerWithSubComponents(aCurrentComponent) then
PrintComponents(aCurrentComponent, oOwnerName + ' -> "' + aCurrentComponent.Name + '"', nIndentLevel + 1),
endif,
endif,
next,
end,
PrintComponents(oOwner, oOwner.Name, 1),
end,
startseq
// Im LIVE-Betrieb unbedingt wieder auf false stellen, entfernen oder mindestens auskommentieren !!!
if true then
prs(m_cReferenz, "==========================================================================="),
prs(m_cReferenz, "Folgend die Liste aller Menü-Items sowie Toolbar-Items der angeklickten Action '" + oAction.Name + "' im Formular '" + oForm.Name + "'"),
prs(m_cReferenz, " "),
DBG_FindMenuItemsForAction(oForm, oAction),
prs(m_cReferenz, "==========================================================================="),
prs(m_cReferenz, "==========================================================================="),
prs(m_cReferenz, "Folgend die Liste der Toolbars im Formular: '" + oForm.Name + "'" + iif(ClassOf(oForm, 'TForm'), ", Caption: '" + oForm.Caption + "'", ", Klasse: '" + ClassName(oForm) + "'")),
prs(m_cReferenz, " "),
DBG_FindBarNames(oForm),
prs(m_cReferenz, "==========================================================================="),
endif,
// Im LIVE-Betrieb unbedingt wieder auf false stellen, entfernen oder mindestens auskommentieren !!!
onerror
startseq
prs(m_cReferenz, GetErrorText()),
onerror
// Fehler sind uns hier egal, sicherstellen, dass das Programm true zurück gibt
stopseq,
stopseq,
true