Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Mainmenue: untermenues verschwinden lassen

  Alt 4. Jun 2012, 11:37
Eine Abfrage nach Auswählen des Untermenus ist möglich, aber eigentlich zu umständlich.
Es gibt meines Wissenstandes nach keine einfache Schnell-Lösung für diese Aufgabe. Wenn ich z.B. in einer Datenbank-Anwendung gewisse Menüpunkte unzugänglich machen möchte, nachdem (oder bevor) der Anwender eine Tabelle in den Edit-Modus versetzt, dann muß ich dafür eine Procedure erstellen, die ich gewöhnlich ...SchreibenErlaubt bzw. ...SchreibenVerboten nenne. Und weil ich meist mit einer TActionList arbeite, manipuliere ich nicht die Menü-Einträge direkt, sondern die der Aktionsliste:
Delphi-Quellcode:
PROCEDURE TFormMain.Projekt_SchreibenErlaubt;
BEGIN
     AL_Projekt_Neu.Enabled := FALSE; //AktionsListen-Eintrag ProjektNeu deaktivieren
     AL_Projekt_Delete.Enabled := FALSE; //AktionsListen-Eintrag ProjektDelete deaktivieren
     AL_Projekt_Edit.Enabled := FALSE; //AktionsListen-Eintrag ProjektEdit deaktivieren

     AL_Projekt_Post.Enabled := TRUE; //AktionsListen-Eintrag ProjektPost aktivieren
     AL_Projekt_Cancel.Enabled := TRUE; //AktionsListen-Eintrag ProjektCancel aktivieren

     DBEd_ProjektTitel.ReadOnly := FALSE; //DB-Edit Titel auf Read & Write setzen
END;

PROCEDURE TFormMain.Projekt_SchreibenVerboten;
BEGIN
     AL_Projekt_Neu.Enabled := TRUE; //AktionsListen-Eintrag ProjektNeu aktivieren
     AL_Projekt_Delete.Enabled := TRUE; //AktionsListen-Eintrag ProjektDelete aktivieren
     AL_Projekt_Edit.Enabled := TRUE; //AktionsListen-Eintrag ProjektEdit aktivieren

     AL_Projekt_Post.Enabled := FALSE; //AktionsListen-Eintrag ProjektPost deaktivieren
     AL_Projekt_Cancel.Enabled := FALSE; //AktionsListen-Eintrag ProjektCancel deaktivieren

     DBEd_ProjektTitel.ReadOnly := TRUE; //DB-Edit Titel auf ReadOnly setzen
END;
Aufgerufen wird das dann, wenn der Anwender z.B. einen Eintrag ändern will bzw. wenn er die Änderung abgeschlossen hat:
Delphi-Quellcode:
procedure TFormMain.AL_Projekt_EditExecute(Sender: TObject);
begin
     Projekt_SchreibenErlaubt;
     DatMod.Dset_Projekte.Edit;
end;

procedure TFormMain.AL_Projekt_PostExecute(Sender: TObject);
begin
     DatMod.Dset_Projekte.Post;
     Projekt_SchreibenVerboten;
end;

// oder

procedure TFormMain.AL_Projekt_CancelExecute(Sender: TObject);
begin
     DatMod.Dset_Projekte.Cancel;
     Projekt_SchreibenVerboten;
end;

Willst du jedoch einen kompletten Menüpunkt deaktivieren, genügt ein Menüpunkt.Enabled := FALSE; , was natürlich auch für Untermenüpunkte gilt. Am besten, wie bereits empfohlen, machst du das in speziellen Proceduren, so daß du für verschiedene Fälle genau die richtigen Einträge ein- und ausschaltest.

Geändert von Perlsau ( 4. Jun 2012 um 11:42 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat