AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TMenueitem mit Basisframe

Ein Thema von Delbor · begonnen am 10. Jan 2022 · letzter Beitrag vom 10. Jan 2022
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

TMenueitem mit Basisframe

  Alt 10. Jan 2022, 09:47
Delphi-Version: 10.4 Sydney
Hi zusammen

Damit versuche ich, in meinem Basisframe (TOpenFileFrame) ein da über den OI erstelltes PopUpMenue um Untermenues zu ergänzen. Diese benennen jeweils bestimmte Dateiendungen, die ich wie folgt deklariert habe:

Delphi-Quellcode:
Const
  ExtendedArray : array[0..7] of string =('alle Dateien', '.pdf', '.sqlite', '.Docx', '.bmp', '.nef', '.jpg', '.png'); //
Um Flüchtigkeitsfehler zu vermeiden, wollte ich diese Array per Code durchlaufen und die einzelnen Strings dem PopUpMenue als Items zuweisen. Da ich das bislang noch nie gemacht habe, wollte ich mit meiner Prozedur NewPopUpItem erstmal einen Versuchsballon starten:

Delphi-Quellcode:
constructor TOpenFileFrame.Create(AOwner: TComponent);
begin
  inherited;
  FReportlist := TStringlist.Create;
  FPopUpModeList:= TStringlist.Create;
  DisplayAllFiles;
  FPathlist := TStringlist.Create;
  FPopUpItemList := TStringlist.Create;
  PnlLookOut.Align := alClient;
  FCmbxItem := False;
  FFileType := 'Alle Dateien';
  FPopUpNode := NIL;
  NewPopUpItem;
end;

procedure TOpenFileFrame.NewPopUpItem;
  var NewItem: TMenuItem;
begin
  Self.PopupMenu1.Items.Add(NewItem);
  NewItem.Caption := 'Dateierweiterungen 2 ';
  NewItem.Name := 'DateiExtension ' + IntToStr(NewItem.Count);
// NewItem.Tag := 1;
// NewItem.OnClick := PopupMenuItemsClick; // Assign it an event handler.
end;
Das aber passt Delphi gar nicht. Die erste Zeile in NewPopUpItem erzeugt dabei folgende Fehlermeldung:
Zitat:
---------------------------
Im Projekt HomeOfficerFEProject.exe ist eine Exception der Klasse EMenuError mit der Meldung 'Menü zweimal eingefügt' aufgetreten.
---------------------------
Ich habe bis gerade eben 2 Instanzen dieses Frames verwendet und nun die zweite Instanz aus dem Projekt entfernt. Des weiteren habe ich für die DCUs einen eigenen Ordner im Projektpfad angelegt (und alle DCUs gelöscht). Die Fehlermeldung bleibt dieselbe.

Ein MenueItem mit der Caption 'Dateierweiterungen' exisiert bereits; desshalb nennt sich die neue Caption auch 'Dateierweiterungen 2 '...

Was mache ich falsch?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TMenueitem mit Basisframe

  Alt 10. Jan 2022, 10:16
Hi zusammen

Was mache ich falsch?
Tja, ich sags mal so: Das sind meine Beispiele. Und wer lesen kann, ist klar im Vorteil...

Andrerseits: je nach dem kann Add auch eine Funktion sein und das Objekt selbst erzeugen...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#3

AW: TMenueitem mit Basisframe

  Alt 10. Jan 2022, 10:29
Das Beispiel ist insofern etwas unglücklich, weil die lokale Variable NewItem die gleichnamiger Funktion aus Vcl.Menus überdeckt, mit der man ein solches TMenuItem recht komfortabel erstellen kann: https://docwiki.embarcadero.com/Libr....Menus.NewItem
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TMenueitem mit Basisframe

  Alt 10. Jan 2022, 10:36
Wie in dem Beispiel von Delbor verlinkt fehlt also nur die Zeile zum Erzeugen von NewItem.
Delphi-Quellcode:
procedure TOpenFileFrame.NewPopUpItem;
var
  NewItem: TMenuItem;
begin
  NewItem := TMenuItem.Create(PopupMenu1); // Create the new item.
  Self.PopupMenu1.Items.Add(NewItem);
  NewItem.Caption := 'Dateierweiterungen 2 ';
  NewItem.Name := 'DateiExtension ' + IntToStr(NewItem.Count);
// NewItem.Tag := 1;
// NewItem.OnClick := PopupMenuItemsClick; // Assign it an event handler.
end;
Bernd
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#5

AW: TMenueitem mit Basisframe

  Alt 10. Jan 2022, 11:18
Siehe BerndS > das Erstellen, was man einfügen will.

Außerdem ist im Add der Parameter sowieso kein VAR und man hätte daher erkennen müssen, dass dort nichts rauskommen kann.



Und warum wird nicht auf den Compiler gehört, welcher hier bestimmt was vonwegen "Variable ist nicht initialisiert" gesagt haben müsste?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz