Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   bds2006 Menu Designer Limit (https://www.delphipraxis.net/192339-bds2006-menu-designer-limit.html)

cramer 10. Apr 2017 18:54

bds2006 Menu Designer Limit
 
Hallo,
ich habe ein umfangreiches PopUp-Menu ca 800 Einträge verteilt auf etliche Untermenüs.
Wenn ich in einem Unter-Menüpunkt einen Eintrag anlege, mit eindeutigem Namen MMMMMMMMMM und Caption MMMMMMMMMM, ist dieser vorhanden und wird nach dem Schließen des Designers und Speichern in der IDE auch gespeichert.
Wenn ich ihn suche, ist alles in Ordnung:
Delphi-Quellcode:
Processing file : H:\BDS2006\Projekte\MVU.dfm
10.04.2017 19:20:54, 344696 bytes
Line 8344 -       object MMMMMMMMMM: TMenuItem
Line 8345 -         Caption = 'MMMMMMMMMM'
Found 2 occurrences.

Processing file : H:\BDS2006\Projekte\MVU.pas
10.04.2017 19:20:44, 531942 bytes
Line 1293 -     MMMMMMMMMM: TMenuItem;
Found 1 occurrences.
Wenn ich das Programm compiliere, ist auch in der EXE der Eintrag MMMMMMMMMM im Menü vorhanden.

Wenn ich dann in der IDE den Designer wieder öffne, ist der Eintrag MMMMMMMMMM im Untermenü auch noch vorhanden.
Wenn ich dann aber durch andere Menüeinträge und Untermenüs navigiere und wieder nach meinem MMMMMMMMMM schaue, ist er irgendwann verschwunden.
Nach Schließen des Designers und Speichern in der IDE verschwinden natürlich auch die Einträge in den Dateien.

Hat irgendjemand dazu eine Idee?

jaenicke 10. Apr 2017 21:14

AW: bds2006 Menu Designer Limit
 
Das hört sich so an als wäre es sinnvoller die Einträge zur Laufzeit aus einer Datenbank zu lesen.

nahpets 10. Apr 2017 21:48

AW: bds2006 Menu Designer Limit
 
Aus Anwendersicht kann ich mir momentan nicht vorstellen, wie ich mich in so einem umfangreichen Menü zurechtfinden soll.

Könntest Du uns bitte kurz das "Warum, Wieso, Weshalb" beschreiben?

Eventuell hat ja dann jemand eine Idee, wie man es sonst noch machen könnte.

Habe mir vor ein paar Jahren abgewöhnt Menüs zu machen.

Dafür nehme ich 'nen Nachfahreneigenbau von TActionList.

Jede ActionList enthält die Actions einer bestimmten Aufgabe.

Beim Programmstart wird dann automatisch ein MainMenu für die Application erstellt und die TActionList-Nachfahren hängen für jede Action einen Menüeintrag an die passende Stelle im MainMenu. Hauptmenüeinträge und Untermenüpunkt werden dabei automatisch entsprechend eingeordnet.

Eventuell wäre das ja ein Ansatz.

Über die Methode Merge(Menu: TMainMenu) von TMainMenu kann man mehrere MainMenüs zusammenfassen, eventuell könntest Du halt erstmal mehrere MainMenüs machen, mit definierten Teilmengen. Und beim Programmstart könntest Du die dann zusammenfassen.

himitsu 10. Apr 2017 22:13

AW: bds2006 Menu Designer Limit
 
Um das zu erklären:

Im OnPopup des Menüs kann man beim Aufpoppen Items generieren, anstatt sie schon zur Designtime da drin zu haben.

Und bei deinen Unmassen an Items, würde ich eher die OnClick der ParentItems nutzen.
Da erstellt man anfangst nur ein "Dummy-Item", damit das als SubMenü verfügbar ist und beim MouseOver/Aufklappen wird OnClick im Item ausgelöst, bevor es auf geht und dann füllt man das SubMenü vollständig auf und löscht einen eventuell vorhandenen Dummy-Eintrag (oder macht den unsichtbar).


Alternativ wäre tatsächlich zu überlegen, das Gewollte als Pupup darzustellen überhaupt ein passender Weg ist.

cramer 11. Apr 2017 07:42

AW: bds2006 Menu Designer Limit
 
Ich hatte schon befürchtet, daß die Antworten nicht mein Problem mit der IDE lösen sondern sich statt dessen mit den Fragen nach dem Sinn des Menüs befassen.

Seis drum, hier eine kurze Beschreibung.

Über das PopUp können Anwender Platzhalter in RichText Edits einfügen. Diese werden dann in der Datenbank als Profil/Muster für die weitere Nutzung gespeichert.
Die Anzahl der Platzhalter ist nun mal so wie sie ist und da lässt sich nichts einsparen.

Zur Frage, wie man da navigieren kann, ist die Antwort "gut", weil alle Haupt und Untermenüpunkte sinnvoll beschriftet sind.
Im Muster-Text am Cursor "rechte Maustaste" drücken, Menüeintrag auswählen, und schon hat der Anwender den gewünschten Platzhalter eingefügt.

Wenn es keine Lösung für die zickende IDE gibt, werde ich wohl oder übel das Menü zur RT erstellen müssen.

Leider erzeugt "Components to Code" das Menü nur unvollständig, es werden die Variablen, die Create und die Namen erstellt, aber die Werte für Captions, Hints, Images und OnClicks fehlen.
Werde mir also wohl eine function bauen, die alle Einträge des aktuellen Menüs durchläuft und in einer sinnvollen und änderbaren Struktur speichert.

haentschman 11. Apr 2017 07:46

AW: bds2006 Menu Designer Limit
 
Moin...:P
Zitat:

ca 800 Einträge verteilt auf etliche Untermenüs...sich statt dessen mit den Fragen nach dem Sinn des Menüs befassen.
...das mußt du dir gefallen lassen. :P Das ist eine ungewönliche Kostellation das man hier hinterfragen muß.
:wink:

cramer 11. Apr 2017 16:11

AW: bds2006 Menu Designer Limit
 
Auf Grund von Zeitmangel bin ich jetzt bei diesem Workaround gelandet.

Delphi-Quellcode:
function MenuAddMainItem( aForm : tForm; aPopUpMenu : TPopUpMenu; aEnabled, aVisible : integer; aCaption, aHint : string; aImageIndex : integer; aOnClickEvent : TNotifyEvent; aAction : TAction; aShortCut : string ) : TMenuItem;
var xMI : TMenuItem;
begin
   with aPopUpMenu do begin
      xMI   := TMenuItem.Create( aForm );
      Result := xMI;
      with xMI do begin
         enabled   := aEnabled = 1;
         visible   := aVisible = 1;
         caption   := aCaption;
         hint      := aHint;
         imageIndex := aImageIndex;
         onClick   := aOnClickEvent;
         shortCut  := TextToShortCut( aShortCut );
         action    := aAction;
      end;
      Items.Add( xMI );
   end;
end;

function MenuAddSubItem ( aForm : tForm; aItemParent : TMenuItem; aEnabled, aVisible : integer; aCaption, aHint : string; aImageIndex : integer; aOnClickEvent : TNotifyEvent; aAction : TAction; aShortcut : string ) : TMenuItem;
var xMI : TMenuItem;
begin
   xMI   := TMenuItem.Create( aForm );
   Result := xMI;
   with xMI do begin
      enabled   := aEnabled = 1;
      visible   := aVisible = 1;
      caption   := aCaption;
      hint      := aHint;
      imageIndex := aImageIndex;
      onClick   := aOnClickEvent;
      shortCut  := TextToShortCut( aShortCut );
      action    := aAction;
   end;
   aItemParent.Add( xMI );
end;

procedure TMV.FormCreate( Sender : TObject );
var
   // Max Tiefe 5 Menu Ebenen
   xMi1, xMi2, xMi3, xMi4, xMi5 : TMenuItem;
begin
   // 2017.04.11.uc - Workaround PopUpMenu verliert Einträge
   // (pop3 ist im form definiert und zugeordnet)
   xMi1 := MenuAddMainItem( self, Pop3, 1, 1, 'Intern'        , '-'      , 22 , nil  , nil, '' );
   xMi2 := MenuAddSubItem ( self, xMi1, 1, 1, 'Adressanschrift', 'Adresse' , 98 , A_Vari, nil, '' );
   xMi2 := MenuAddSubItem ( self, xMi1, 1, 1, 'Adresszeile'   , 'Zeile'  , -1 , A_Vari, nil, '' );
   xMi2 := MenuAddSubItem ( self, xMi1, 1, 1, 'Brief'         , 'Brief'  , -1 , A_Vari, nil, '' );
   xMi2 := MenuAddSubItem ( self, xMi1, 1, 1, 'Adresse'       , ''       , -1 , nil  , nil, '' );
   xMi3 := MenuAddSubItem ( self, xMi2, 1, 1, 'Anrede'        , 'Anrede' , -1 , A_Vari, nil, '' );
   xMi3 := MenuAddSubItem ( self, xMi2, 1, 1, 'Vorname'       , 'VorName' , -1 , A_Vari, nil, '' );
   xMi3 := MenuAddSubItem ( self, xMi2, 1, 1, 'Name/Firma'    , 'NachName', -1 , A_Vari, nil, '' );
   xMi2 := MenuAddSubItem ( self, xMi1, 1, 1, '-'             , ''       , -1 , nil  , nil, '' );
end;

jaenicke 11. Apr 2017 18:40

AW: bds2006 Menu Designer Limit
 
Wie schon gesagt, eine kleine integrierte Datenbank wäre für den Fall ideal gewesen. So ließe sich das viel einfacher pflegen.

Aber wenn dir der deutlich aufwendigere Weg besser gefällt, ist das ja deine Sache.

dummzeuch 11. Apr 2017 19:13

AW: bds2006 Menu Designer Limit
 
Zitat:

Zitat von cramer (Beitrag 1367050)
Leider erzeugt "Components to Code" das Menü nur unvollständig, es werden die Variablen, die Create und die Namen erstellt, aber die Werte für Captions, Hints, Images und OnClicks fehlen.

Ich nehme an, mit "Components to code" ist die GExperts-Funktionalitaet gemeint?

Ja, stimmt, mit Menues kommt der nicht gut klar. Habe ich gerade mal erweitert, jetzt klappts auch mit TMainMenu und TPopupMenu.

cramer 12. Apr 2017 00:13

AW: bds2006 Menu Designer Limit
 
Danke für die Infos, bei dem eigentlichen Problem der verlorengehenden Einträge handelt es sich ja möglicherweise um einen Bug/Speicherproblem der IDE, bei der ein Fix wohl nicht mehr zu erwarten ist :zwinker:

@dummzeuch
Wann ist denn mit der überarbeiteten GExpert Version zu rechnen, aktuell finde ich die 2012-03-04?

Bei der Gelegenheit, ist es mit wenig Aufwand zu realisieren, dort "Align lines" auf mehrere Spalten aufzuboren?
Für solche Kommageschichten im Quelltext, wie oben "xMi1 := ....", nutze ich bisher immer "Sublime3" und das Package "AlignTab"


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.
Seite 1 von 2  1 2      

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