Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Popupmenü zur Laufzeit erstellen (https://www.delphipraxis.net/48011-popupmenue-zur-laufzeit-erstellen.html)

ringli 19. Jun 2005 12:57


Popupmenü zur Laufzeit erstellen
 
Ich mache grade meine ersten Versuche damit ein Popupmenü zur Laufzeit zu erstellen. Einzelne Einträge erstellen funktioniert, aber wenn ich versuche ein Untermenü mit Einträgen zu erstellen bekomme ich entweder eine Zugriffsverletzung oder der Compiler zeigt mir die Fehlermeldung [Fehler] Unit1.pas(37): E2010 Inkompatible Typen: 'dynamic array' und 'TMenuItem' an.

Hier die Variante die die Fehlermeldung(en) erzeugt:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
  aSubMenu : TMenuItem;
  aNewItem : array of TMenuItem;
begin
  //hier Fehlermeldung da aNewItem kein Array ist
  aNewItem := NewItem('Eintrag 1', 0, False, True, btnOKClick, 0, 'item1');
  aNewItem := NewItem('Eintrag 2', 0, False, True, btnOKClick, 0, 'item2');
  aNewItem := NewItem('Eintrag 3', 0, False, True, btnOKClick, 0, 'item3');
  aSubMenu := NewSubMenu('Untermenü', 0, 'subMenu0', aNewItem, True);

  PopupMenu1.Items.Add(aSubMenu);
end;

procedure TForm1.btnOKClick(Sender: TObject);
begin
  showmessage('Hallo');
end;
Und das ist die Variante die eine Zugriffsverletzung erzeugt:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
  aSubMenu : TMenuItem;
  aNewItem : array of TMenuItem;
begin
  aNewItem[0] := NewItem('Eintrag 1', 0, False, True, btnOKClick, 0, 'item1');
  aNewItem[1] := NewItem('Eintrag 2', 0, False, True, btnOKClick, 0, 'item2');
  aNewItem[2] := NewItem('Eintrag 3', 0, False, True, btnOKClick, 0, 'item3');
  aSubMenu := NewSubMenu('Untermenü', 0, 'subMenu0', aNewItem, True);

  PopupMenu1.Items.Add(aSubMenu);
end;

procedure TForm1.btnOKClick(Sender: TObject);
begin
  showmessage('Hallo');
end;

Win32.API 19. Jun 2005 13:01

Re: Popupmenü zur Laufzeit erstellen
 
Bei einem Dynamischen Array musst du die länge festlegen.
Delphi-Quellcode:
setlength(aNewItem,3);
Win32.API

ringli 19. Jun 2005 13:04

Re: Popupmenü zur Laufzeit erstellen
 
So funktionierts! Danke für die Hilfe. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.

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