Skip to main content
Skip table of contents

Identifizieren von Actions, Buttons & Toolbars via Event "vor Menüausführung"

Vorgehen:

  1. Einbinden im Event "Vor Menüausführung"  (Code siehe unten)

  2. be neustarten, Menü anklicken - hier: Toolbar-Menüpunkt im Fenster "Seriennummernverwaltung"

  3. debug-log ansehen - hier exemplarisch

    Tipps:

    1. Der Pfad der Log Datei lässt sich über die Funktion - DBG_Logging_DetermineDefaultLogFilePath() eruieren. (Ausführung in BE über den Codeblock Editor).

    2. Aktivierung des Logs in den Admin-Tools\ Logging\ Logging aktivieren

JS
| 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


Alternativer Code für das Event vor Menueausführung - mit CbLog
CODE
|
   nEvtNo:P1, oAction:P2, oForm:P3,
   bDefaultActionAusfuehren
|
// Aufruf erfolgt vor der Ausführung einer Aktion (Menüpunkt, Button, o.ä.)
// Rückgabe = True/False, Aktion ausführen/nicht ausführen
// ACHTUNG: Das Ereignis darf KEINESFALLS generell FALSE zurückliefern,
//          da das System sonst unwideruflich, vollständig gesperrt wird !!!

//##############################################################################
//##############################################################################
// zum ermitteln der Position eines Menüpunktes/buttons
//##############################################################################
//##############################################################################
function ProtokollFuerMenueintegraionSchreiben()
| m_cReferenz |
   m_cReferenz := 'DBG_FindMenuItemsForAction',

   //******************************************************************************
   // Gibt die Namen der Toolbars aus dem übergeben Formular per cblog() 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
            cblog(oComp.Name, 'm_cReferenz', 'DBG_FindBarNames', 'Events\vor Menüausführung (Menü,Button,Shortcut,...)', lldebug),
         endif,
      next,
   end,


   //******************************************************************************
   // Finde alle Menüpunkte, die die übergebene Action verwenden und gebe diese per cblog() aus
   //******************************************************************************
   function DBG_FindMenuItemsForAction(oOwner, oAction)
      | aCurrentComponent |

      //***************************************************************************
      function IsContainerWithSubComponents()
         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 |
         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
                        cblog("OwnerName: '" + rtrim(oOwnerName) + "', ComponentName: '" + rtrim(aCurrentComponent.Name) + "', ClassName: '" + ClassName(aCurrentComponent) + "', Caption: '" + aCurrentComponent.Caption + "'",
                              'm_cReferenz', 'PrintComponents', 'Events\vor Menüausführung (Menü,Button,Shortcut,...)', lldebug),
                     endif,
                  endif,
               onerror
                  cblog(GetErrortext(), 'm_cReferenz', 'PrintComponents', 'Events\vor Menüausführung (Menü,Button,Shortcut,...)', llError),
               stopseq,
               if IsContainerWithSubComponents() then
                  PrintComponents(aCurrentComponent, oOwnerName + ' -> "' + aCurrentComponent.Name + '"', nIndentLevel + 1),
               endif,
            endif,
         next,
      end,

      PrintComponents(oOwner, oOwner.Name, 1),
   end,

   startseq
      cblog("Folgend die Liste aller Menü-Items sowie Toolbar-Items der angeklickten Action '" + oAction.Name + "' im Formular '" + oForm.Name + "'",
         'm_cReferenz', 'ProtokollFuerMenueintegraionSchreiben', 'Events\vor Menüausführung (Menü,Button,Shortcut,...)', llDebug),
      DBG_FindMenuItemsForAction(oForm, oAction),
      cblog("Folgend die Liste der Toolbars im Formular: '" + oForm.Name + "'" + iif(ClassOf(oForm, 'TForm'), ", Caption: '" + oForm.Caption + "'", ", Klasse: '" + ClassName(oForm) + "'"),
         'm_cReferenz', 'ProtokollFuerMenueintegraionSchreiben', 'Events\vor Menüausführung (Menü,Button,Shortcut,...)', lldebug),
      DBG_FindBarNames(oForm),
   onerror
      startseq
         cblog(GetErrorText(), 'm_cReferenz', 'ProtokollFuerMenueintegraionSchreiben', 'Events\vor Menüausführung (Menü,Button,Shortcut,...)', llError),
      onerror
         // Fehler sind uns hier egal, sicherstellen, dass das Programm true zurück gibt
         writeln('Fehler beim Ausgeben der Debug-Infos'),
      stopseq,
   stopseq,
end,

bDefaultActionAusfuehren := true, 
if c_usr = '191' and MBESUPERVISOR then
   ProtokollFuerMenueintegraionSchreiben(),
endif,

bDefaultActionAusfuehren  
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.