Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TMenueitem mit Basisframe (https://www.delphipraxis.net/209688-tmenueitem-mit-basisframe.html)

Delbor 10. Jan 2022 09:47

Delphi-Version: 10.4 Sydney

TMenueitem mit Basisframe
 
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

Delbor 10. Jan 2022 10:16

AW: TMenueitem mit Basisframe
 
Hi zusammen

Zitat:

Zitat von Delbor (Beitrag 1500367)
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

Uwe Raabe 10. Jan 2022 10:29

AW: TMenueitem mit Basisframe
 
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

BerndS 10. Jan 2022 10:36

AW: TMenueitem mit Basisframe
 
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;

himitsu 10. Jan 2022 11:18

AW: TMenueitem mit Basisframe
 
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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