Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Menü dynamische wählbar machen (https://www.delphipraxis.net/174029-menue-dynamische-waehlbar-machen.html)

floppybe 28. Mär 2013 23:28

Menü dynamische wählbar machen
 
Hallo DP Gemeinde,

ich möchte mein Menü anwählbar machen wenn die entsprechende Plugin DLL vorhanden ist, wie kann ich das am besten
Lösen ich stehe da etwas auf dem Schlauch. Könntet Ihr mir da weiter Helden ?

Grüsse

Chris

Bummi 28. Mär 2013 23:50

AW: Menü dynamische wählbar machen
 
Was genau soll denn im Menü angezeigt werden, vorher bekannte Aufrufe oder Aufrufe die rein von der DLL bereitgestellt werden.
Im ersten Falle genügt es zu überprüfen ob die DLL vorhanden ist ,geladenen werden kann und die in diesem Fall bekannten Funktionen gefunden werden.
Im 2. Falle muss entweder die DLL eine Funktion bereitstellen die die benötigten Informationen zum erstellen der Menüeinträge zurückliefert, oder ein Callback übergeben werden über den die DLL die Einträge erstellen lassen kann. Sobald die DLL über reine Funktionen hinaus z.B. Formulare bereitstellen soll, muss (auf beiden Seiten) mit Runtime Packages gearbeitet werden.

floppybe 29. Mär 2013 11:32

AW: Menü dynamische wählbar machen
 
Hallo GP Gemeinde, Hallo Bummi,

ich möchte nur überprüfen ob die DLL existiert, die DLL dann laden werde ich über das Menü machen.
Wenn die DLL da ist soll auch die Möglichkeit bestehen diese zu Laden sonst nicht, da ich ja sonst
eine Fehler Meldung bekomme dass die DLL nicht vorhanden ist und so kann ich das dann umgehen.

Grüsse

Chis

Bummi 29. Mär 2013 11:46

AW: Menü dynamische wählbar machen
 
Du könntest gegf. per Fileexists prüfen, ansonsten:

Delphi-Quellcode:
Function DLLLoadable(const DLL:String):Boolean;
var
 DLLHand:Cardinal;
begin
   Result := false;
   DLLHand := LoadLibrary(PChar(DLL));
   if DLLHand<>0 then
      begin
        Result := true;
        FreeLibrary(DLLHand);
      end;
end;

Sir Rufo 29. Mär 2013 12:17

AW: Menü dynamische wählbar machen
 
Für ein Plugin-System mit DLL würde ich von jedem Plugin (DLL) eine Funktionsliste erwarten (mit Beschreibung), mit der ich dann das Menü aufbauen kann.

Somit also alle Plugin-DLL am Anfang laden, Funktionsliste abfragen und das Menü aufbauen.
Wenn man Lust hat, kann man die Plugins auch direkt wieder entladen.

Beim Aufruf über das Menü wird das Plugin dann geladen und der Befehl ausgeführt.

floppybe 30. Mär 2013 11:35

AW: Menü dynamische wählbar machen
 
Hallo DP Gemeinde, Hallo Sir Rufo und Bummi,

Also das mit dem
Delphi-Quellcode:
if FileExist
habe ich mal gesucht, nur verstehe ich es noch nicht ganz.
Ich habe es nach meinem Verständnis mal so ausgelegt:

Delphi-Quellcode:
  if FileExists(./plugin/noten.dll) then
begin
  mainmenue1.noten1: enabled=true

end
else
begin
  mainmenue1.noten1: enabled=false
Nur geht das jetzt leider nicht, es gibt mir Fehler.

Ich habe die if then else abfrage wohl verstanden aber das mit dem enabled = True oder False verstehe ich jetzt
nicht so ganze, das heist ich weis da nicht wie ich das korrekt eingeben muss dass es klappt. Ich wäre froh um
ne kleine Hilfestellung.

Grüsse

Chris

Sir Rufo 30. Mär 2013 12:06

AW: Menü dynamische wählbar machen
 
Delphi-Quellcode:
MainMenu1.Noten1.Enabled := FileExists( '.\plugin\noten.dll' );

Aviator 30. Mär 2013 12:09

AW: Menü dynamische wählbar machen
 
Der Code zum aktivieren/deaktivieren lautet:

Delphi-Quellcode:
MainMenu1.Menuepunkt1.Enabled := false;
oder
Delphi-Quellcode:
MainMenu1.Menuepunkt1.Enabled := true;
Viel Spaß! ;)

[Edit]Mist zu spät ;)
So wie SirRufo es gemacht hat ist es natürlich kürzer und auch professioneller. Nur als Grundlage ist mein Beispiel auch nicht schlecht ;)[/Edit]

floppybe 30. Mär 2013 14:15

AW: Menü dynamische wählbar machen
 
Hallo Sir Rufo, Hallo Aviator,

danke für die Korrektur, es scheint zu klappen, bis zum Punkt:
[dcc32 Fehler] fHostForm.pas(57): E2003 Undeklarierter Bezeichner: 'Noten1'

Ich habe jetzt Deinen Vorschlag, Sir Rufo, MainMenu1.Noten1.Enabled := FileExists( '.\plugin\noten.dll' );
genommen.

Muss ich da nochmals Noten1 deklarieren ? Es steht ja schon zu beginn:

Delphi-Quellcode:
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Noten1: TMenuItem;
    Ohm1: TMenuItem;
    Volt1: TMenuItem;
    Ampere1: TMenuItem;
Und dasn steht beim FormCreate:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SwitchButtons;

MainMenu1.Noten1.Enabled := FileExists( '.\plugin\noten.dll' );
MainMenu1.Volt1.Enabled := FileExists( '.\plugin\volt.dll' );
MainMenu1.Ohm1.Enabled := FileExists( '.\plugin\ohm.dll' );
MainMenu1.Ampere1.Enabled := FileExists( '.\plugin\ampere.dll' );
{MainMenu1.Noten1.Enabled := FileExists( '.\plugin\noten.dll' ); }
end;
Grüsse

Chris

Bummi 30. Mär 2013 14:26

AW: Menü dynamische wählbar machen
 
Delphi-Quellcode:
Noten1.Enabled := FileExists( '.\plugin\noten.dll' );


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.
Seite 1 von 2  1 2      

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