AGB  ·  Datenschutz  ·  Impressum  







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

Erstellen von PopupMenüs zur Laufzeit

Offene Frage von "Florian L."
Ein Thema von Florian L. · begonnen am 30. Apr 2008 · letzter Beitrag vom 1. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Florian L.

Registriert seit: 6. Nov 2007
6 Beiträge
 
#1

Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 13:55
Hallo,
ich möchte ein Programm zum schnelleren starten von Programmen schreiben. Ich habe eine Textdatei in der die Konfiguration steht. Wie ich die auslese und verwende weis ich. Jedohc habe ich keine Ahnung wie ich dynamisch, also während der Laufzeit, ein PopuMenü erweitere.
Hinzu kommt noch, dass ich wissen muss welches Item des PopupMenüs gedrückt wurde, um das richtige Programm zu starten. Bitte helft mir!
(Benutze Turbo Delphi!)

Schon mal vielen Dank im voraus!
Florian
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 14:00
Hallo und Willkommen Florian,

vielleicht hilft dir das hier schon weiter:

Delphi-Quellcode:

var
  MenuItem: TMenuItem;

begin
    MenuItem:= TMenuItem.Create(Self);
    MenuItem.Caption := 'Titel des Menüs';
    // Dem Tag eine eindeutige ID zuweisen
    MenuItem.Tag:= 1;
    // Hier das Event zuweisen - es muss die selben Parameter haben wie von OnClick erwartet, (Sender: TObject)
    MenuItem.OnClick := ClickEvent
    // Den erstellten Menüeintrag einem Elternmenü zuweisen
    ParentMenu.Add(MenuItem);
end;
Um das gedrückte Item eindeutig zu identifieren, kannst du im
OnClick-Event den Tag auslesen, etwa so:
Delphi-Quellcode:
procedure ClickEvent(Sender: TObject);
begin
  case TMenuItem(Sender).Tag of
    1: ShowMessage('Programm 1');
  end;
end;


Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Florian L.

Registriert seit: 6. Nov 2007
6 Beiträge
 
#3

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 20:02
Danke erst mal für den Code. Er funktioniert, jedoch nur wenn ich das PopupMenu um 1 Eintrag erweitere. Sobald ich ein weiteres einfügen möchte (mit dem untenstehenden Code) bekomme ich folgende Fehlermeldung, welche als Bild im Anhang steckt. Ich hoffe, dass es überhaupt machbar ist, und das Ihr wisst wie!

Vielen Dank!
Florian

Delphi-Quellcode:
//Liste der Verknüpfungen zusammenbauen
while i < Datei.Count do
  begin
    //MenuItem:= TMenuItem.Create(Self);
    MenuItem.Caption:=Datei.Strings[i];
    MenuItem.OnClick:=Anwendung;
    MenuItem.Tag:=i+1;
    PopupMenu1.Items.Add(MenuItem);
    //MenuItem.Free;
    i:=i+2;
  end;
i:=0;
Miniaturansicht angehängter Grafiken
fehler_193.gif  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 20:04
Entferne einfach den Kommentar
Markus Kinzler
  Mit Zitat antworten Zitat
Florian L.

Registriert seit: 6. Nov 2007
6 Beiträge
 
#5

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 20:13
Das wiederum bringt folgende Fehlermeldung (siehe Anhang). Zudem habe ich dann gar keinen neuen Eintrag im PopupMenu.
Trotzdem danke.
Aber das muss doch zu machen sein!!!
Miniaturansicht angehängter Grafiken
fehler2_755.gif  
  Mit Zitat antworten Zitat
Florian L.

Registriert seit: 6. Nov 2007
6 Beiträge
 
#6

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 20:14
Der Fehler muss also irgendwo da drin stecken:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:= false;
MenuItem:= TMenuItem.Create(Self);
//Variablen "nullen"
i:=0;


//ini-Datei einlesen
Datei:=TStringList.Create;
if FileExists('Verknüpfungen.ini') then
  begin
    Datei.LoadFromFile('Verknüpfungen.ini');
  end
else
  begin
    ShowMessage('Die Datei "Verknüpfungen.ini" konnte nicht gefunden werden und wird deshalb neu erstellt!');
    Datei.SaveToFile('Verknüpfungen.ini');
    close();
  end;

//Liste der Verknüpfungen zusammenbauen
while i < Datei.Count do
  begin
    MenuItem:= TMenuItem.Create(Self);
    MenuItem.Caption:=Datei.Strings[i];
    MenuItem.OnClick:=Anwendung;
    MenuItem.Tag:=i+1;
    PopupMenu1.Items.Add(MenuItem);
    MenuItem.Free;
    i:=i+2;
  end;
i:=0;

end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 21:05
Jag den Code mal durch den Debugger
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 21:10
Delphi-Quellcode:
while i < Datei.Count do
  begin
    MenuItem:= TMenuItem.Create(Self);
    MenuItem.Caption:=Datei.Strings[i];
    MenuItem.OnClick:=Anwendung;
    MenuItem.Tag:=i+1;
    PopupMenu1.Items.Add(MenuItem);
    MenuItem.Free;
    i:=i+2;
  end;
i:=0;
Ich hab das Gefühl, dass Du auf einen ungültigen Index bei Datei.Strings[I] zugreifst.

Denkfehler.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#9

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 21:22
Du gibst alle erzeugten Menuitems wieder frei. Damit enthält dein Menü nur eine Liste ungültiger Zeiger. Das gibt zwangsläufig eine AV.

Das einzig noch existierende Menuitem ist das, welches du zu aller erst erzeugst, noch vor der Schleife, aber es existiert kein Verweis mehr darauf. Das nennt man Memory leak, wenn auch nur ein klitzekleines.
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Florian L.

Registriert seit: 6. Nov 2007
6 Beiträge
 
#10

Re: Erstellen von PopupMenüs zur Laufzeit

  Alt 30. Apr 2008, 21:36
Und was mach ich gegen das Memory leak?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:43 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