Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   OTA - komplexer Experte (https://www.delphipraxis.net/204563-ota-komplexer-experte.html)

stahli 15. Jun 2020 13:44

AW: OTA - komplexer Experte
 
Naja, ich habe da offenbar eine natürliche Priorisierung vorausgesetzt. :stupid:

Außer CodesiteLogging (free) habe ich bisher keine Erweiterungen installiert.

Ich wüsste auch nicht, für welche Funktion Ctrl+Shift+O bereits verwendet sein sollte (vielleicht fängt das ja auch eine ganz andere Anwendung (z.B. SnagIt) ab)).
Erst dachte ich, die ShortCuts würden für mein Menü gar nicht funktionieren, bis ich dann noch Ctrl+Shift+Alt+O probiert habe.

Ich schaue mir das mal heute Abend noch genauer an...
(Bin ja schon zufrieden, dass es grundsätzlich geht.)

dummzeuch 15. Jun 2020 14:01

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1467333)
Ich wüsste auch nicht, für welche Funktion Ctrl+Shift+O bereits verwendet sein sollte (vielleicht fängt das ja auch eine ganz andere Anwendung (z.B. SnagIt) ab)).
Erst dachte ich, die ShortCuts würden für mein Menü gar nicht funktionieren, bis ich dann noch Ctrl+Shift+Alt+O probiert habe.

Es gibt von Nick Ring den DelphiShortcutFinder Experten, der einem die Shortcuts der IDE sowie der häufigsten IDE Plugins anzeigt.

GExperts hat diese Funktion etwas anders implementiert auch.

Beide sind allerdings dadurch eingeschränkt, dass die IDE keine zentrale Stelle hat, wo man diese Shortcuts abfragen oder gar konfigurieren kann.

jaenicke 16. Jun 2020 05:48

AW: OTA - komplexer Experte
 
Zitat:

Zitat von dummzeuch (Beitrag 1467339)
Beide sind allerdings dadurch eingeschränkt, dass die IDE keine zentrale Stelle hat, wo man diese Shortcuts abfragen oder gar konfigurieren kann.

Ja, das wäre eine wichtige Funktion...

stahli 16. Jun 2020 08:26

AW: OTA - komplexer Experte
 
... aber noch besser eigentlich als Windows-Funktion.

Sonst weiß man ja auch nicht, ob sich ein anderes Programm da vor- oder reindrängelt...

jaenicke 16. Jun 2020 08:33

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1467386)
... aber noch besser eigentlich als Windows-Funktion.

Sonst weiß man ja auch nicht, ob sich ein anderes Programm da vor- oder reindrängelt...

Diese Shortcuts sind programmbezogene Shortcuts und keine systemweiten Hotkeys! Andere Programme sind da nicht involviert solange die Tastenkombination nicht global abgefangen wird.

stahli 17. Jun 2020 07:57

AW: OTA - komplexer Experte
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt nicht geprüft, wo der ShortCut ggf. priorisiert registriert wird, aber zumindest eine Lösung umgesetzt.

Zum Einen wird das Menü mit ShortCut erstellt und dann nochmal ein analoges KeyBinding für den selben ShortCut eingerichtet.

Im Wizard sieht das dann so aus:

Delphi-Quellcode:
procedure Register;
begin
  RegisterPackageWizard(TOTAUnitOptimizerWizard.Create);
  TQuickSearchForm.CreateDockForm;
  TFullSearchForm.CreateDockForm;
 
  uoMenues.Initialize; // <----
  (BorlandIDEServices as IOTAKeyboardServices).AddKeyboardBinding(uoBindings); // <----

end;

function InitWizard(const BorlandIDEServices: IBorlandIDEServices; RegisterProc: TWizardRegisterProc;
  var Terminate: TWizardTerminateProc): Boolean stdcall;
begin
  RegisterProc(TOTAUnitOptimizerWizard.Create);
  RegisterProc(TQuickSearchExpert.Create);
  TQuickSearchForm.CreateDockForm;
  RegisterProc(TFullSearchExpert.Create);
  TFullSearchForm.CreateDockForm;

  uoMenues.Initialize; // <----
  (BorlandIDEServices as IOTAKeyboardServices).AddKeyboardBinding(uoBindings); // <----

  Result := True;
end;
Die .pas, in der das dann realisiert wird, habe ich mal angehängt.

Das ist so ganz übersichtlich (finde ich) und funktioniert.
Lediglich die Freigabe der Objekte musste ich ausklammern, da dies sonst zu einer Zugriffsverletzung beim Schließen von Delphi führt.

Ich denke, damit kann ich leben. Falls jemand eine bessere Lösung kennen sollte, dann immer her damit. :-)


Mit meinem Wizard bin ich dann soweit fertig, dass alles funktionelle grundsätzlich drin ist.

Fehlen jetzt noch ein Installer, Updater und natürlich die eigentliche logische Funktionalität (die hatte ich ja schon mal relativ fertig umgesetzt).

API 17. Jun 2020 09:47

AW: OTA - komplexer Experte
 
Vielleicht kannst du das Erstellen der Menuitems in eine Funktion auslagern, damit der Quellcode besser lesbar ist.

Delphi-Quellcode:
function TuoMethodes.UnitOptimizer_CreateMenuItem(Name: String; Capton: string);
var
    mi: TMenuItem;
begin
    mi := TMenuItem.Create(nil);
    mi.Name := Name;
    mi.Caption := Capton;
    Result := mi;
end;

procedure TuoMenues.Initialize;
begin
  if Supports(BorlandIDEServices, INTAServices, NTAServices) then
  begin
    StahliSoftMenuItem := UnitOptimizer_CreateMenuItem('StahliSoftMenuItem', 'StahliSoft');
    NTAServices.AddActionMenu('ToolsMenu', nil, StahliSoftMenuItem, False, True);

   StahliSoftMenuItem := UnitOptimizer_CreateMenuItem('StahliSoftUnitOptimizerMenuItem', 'UnitOptimizer');
    NTAServices.AddActionMenu('StahliSoftMenuItem', nil, UnitOptimizerMenuItem, True, True);

//... usw

end;
Auch das onclick könnte man noch als Parameter übergeben.

stahli 17. Jun 2020 10:08

AW: OTA - komplexer Experte
 
Ja, Danke.
Stimmt. Kann ich noch machen.

dummzeuch 17. Jun 2020 11:41

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1467506)
Lediglich die Freigabe der Objekte musste ich ausklammern, da dies sonst zu einer Zugriffsverletzung beim Schließen von Delphi führt.

Freigabe welcher Objekte? Wenn die irgendwelche Interfaces implementieren und in der IDE damit registriert werden, dürfen sie gar nicht freigegeben werden (zumindest nicht, bevor die Interfaces un-registriert wurden).

stahli 17. Jun 2020 11:49

AW: OTA - komplexer Experte
 
Ohj, ja, klar. :oops:

TuoBindings wird ja als Interface benutzt.
Hatte ich offenbar übersehen, weil ich selbst kein Interface und keine Interfacevariable deklariert habe.

Delphi-Quellcode:
  TuoMethodes = class
...
  TuoBindings = class(TNotifierObject, IOTAKeyboardBinding)
...
  TuoMenues = class
...
Die anderen 2 Objekte werde ich dann entprechend noch freigeben.
Das sollte ja dann ok gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr.
Seite 2 von 5     12 34     Letzte »    

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