Delphi-PRAXiS
Seite 1 von 2  1 2   

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 7. Jun 2020 00:35

OTA - komplexer Experte
 
Ich bin dabei, einen OTA-Experten neu (und ordentlich) aufzubauen.

Dabei gibt es ein Problem, das schwer zu beschreiben ist.
Ich versuche einmal einige Stichpunkte:

* Fertig hatte ich einen OTAWizard
- hat als installiertes Package funktioniert (ohne Bitmap im SplashScreen)
- und als dll über die Registry (mit Bitmap im SplashScreen)

* Fertig hatte ich auch einen DockingFormExperten
- nur als installiertes Package getestet
- als dll über die Registry nicht extra versucht

*nun habe ich die Form-Units aus dem Docking-Experten in der Wizard eingebunden
- compilieren ließ sich alles, aber der Docking-Experte war nicht wirksam
- offenbar wurde die Register-Prozedur des DockingExperten nicht ausgeführt
- ich habe also das Ganze etwas umgebaut und Registerprozedur des Experten umbenannt und vom Wizard aus explizit aufgerufen
- hat dann alles funktioniert, sowohl als Packageinstallation als auch über dll

Letztes Problem: Wenn das DockingForm offen und eingedockt ist gibt es einen Fehler beim Schließen der IDE.

Die Beschreibung ist natürlich sehr vage aber hat jemand vielleicht eine Idee oder würde sich das Projekt mal anschauen?

jaenicke 7. Jun 2020 12:47

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1466633)
Letztes Problem: Wenn das DockingForm offen und eingedockt ist gibt es einen Fehler beim Schließen der IDE.

Wie sieht davon denn der Stacktrace aus? Sprich wenn du bei der Exception im Debugger auf Anhalten drückst, landest du dann irgendwo in deinem Code oder woanders?

Zitat:

Zitat von stahli (Beitrag 1466633)
Die Beschreibung ist natürlich sehr vage aber hat jemand vielleicht eine Idee oder würde sich das Projekt mal anschauen?

Das kann ich kurz machen, die Frage ist nur, ob es auch bei mir auftritt oder vielleicht von weiteren Faktoren abhängt.

stahli 7. Jun 2020 15:40

AW: OTA - komplexer Experte
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist alles schwierig nachzuvollziehen (für mich zumindest).

Das Package reagiert immer etwas unterschiedlich, je nachdem wie man es nutzt (wie es installiert wird).

Wenn es Dich selbst interessiert schicke ich Dir meinen Strand mal, aber ich denke, ich habe da grundsätzlich etwas falsch gemacht und werde nochmal einen neuen Versuch starten...

jaenicke 7. Jun 2020 18:21

AW: OTA - komplexer Experte
 
Gut, das sollte sich finden lassen. Beim Zerstören des Formulars läuft eine TInterfaceList aus dem Scope und dann knallt es bei der Zerstörung eines der Elemente.

Reinschauen kann ich gerne mal, aber für längeres Debuggen, wenn ich es nicht schnell finde, habe ich leider keine Zeit.

stahli 7. Jun 2020 18:28

AW: OTA - komplexer Experte
 
Vielen Dank.

Ich schaue erst nochmal. Da lerne ich ja auch draus.
Das Problem zu debuggen wird sicher schwierig. Ich muss halt mal heraus finden, wie man die OTA in dem Bereich korrekt nutzt.

Ich schicke es Dir mal, falls ich nicht weiter komme oder auch gern wenn Du ein Eigeninteresse hast.

stahli 9. Jun 2020 23:26

AW: OTA - komplexer Experte
 
Ich habe mal ein Video erstellt: https://youtu.be/UP13xOOEFhw

Zu Einen hilft es vielleicht mal jemandem, um zu sehen, wie man so etwas angehen kann und zum Anderen beschreibt es auch (ab 8:30 min) mein aktuelles Problem, so dass mir vielleicht jemand helfen kann...

Meine Frage ist also, warum die Procedure Register in dem IDE-Package ausgeführt wird, aber nicht in dem DLL-Package.
Ist das normal und wie kann man das lösen?
Sicherlich ist das Beispiel nicht mehr ganz aktuell aber zumindest würde ich erwarten, dass es auf beiden Installationswegen gelich funktioniert.

Vielen Dank an der Stelle auf jeden Fall schon mal an @dummzeuch!


EDIT:
https://www.davidghoyle.co.uk/WordPress/?page_id=1695
http://www.gexperts.org/open-tools-api-faq/

Ghostwalker 10. Jun 2020 04:18

AW: OTA - komplexer Experte
 
Moinsen :)

Tip: https://www.davidghoyle.co.uk/WordPress/?page_id=1110 (die PDF ist ein komplettes Buch !)

Lt. diesem werden müssen DLL's anders initialisiert werden. Direkt mal reinlesen. Das sollte das Problem mit der DLL lösen :)


Gruß

Uwe

stahli 10. Jun 2020 19:35

AW: OTA - komplexer Experte
 
Vielen Dank Uwe.
Auf dem Weg bin ich leider nicht weiter gekommen.

Das Video-Tutorial scheint das schon korrekt zu realisieren.

Mein Problem konnte ich jetzt allerdings sehr einfach lösen, indem ich die Initialisierung des DockingExperten auf beiden Wegen in den MainWizard integriert habe:

Delphi-Quellcode:
unit OTAUnitOptimizerWizard;

interface

...

procedure Register;

function InitWizard(const BorlandIDEServices: IBorlandIDEServices;
  RegisterProc: TWizardRegisterProc; var Terminate: TWizardTerminateProc)
  : Boolean stdcall;

exports InitWizard Name WizardEntryPoint;

implementation

uses
  DockFormExpert, // <-------------------------------------
  VCL.Dialogs,
  OTAUnitOptimizerSplashScreen,
  OTAUnitOptimizerAboutBox;

procedure Register;
begin
  RegisterPackageWizard(TOTAUnitOptimizerWizard.Create);
  RegisterPackageWizard(TDockFormExpert.Create as IOTAMenuWizard); // <-------------------------------------
end;

function InitWizard(const BorlandIDEServices: IBorlandIDEServices;
  RegisterProc: TWizardRegisterProc; var Terminate: TWizardTerminateProc)
  : Boolean stdcall;
begin
  RegisterProc(TOTAUnitOptimizerWizard.Create);
  RegisterProc(TDockFormExpert.Create); // <-------------------------------------
  Result := True;
end;
Ich habe es einfach so ausprobiert und bin nicht ganz sicher, ob es der absolut korrekte Weg ist.
Aber es funktioniert erst einmal augenscheinlich völlig problemlos.

stahli 14. Jun 2020 18:56

AW: OTA - komplexer Experte
 
Liste der Anhänge anzeigen (Anzahl: 1)
Noch eine Frage:

Ich erzeuge in der IDE ein eigenes Menü und kann über Click auf ein MenuItem auch eine Methode aufrufen.
Dem MenuItem ist auch ein Shortcut zugewiesen, der auch dargestellt wird.
Beide Stellen sind rot markiert.

Ausführen kann ich die Methode jedoch über die Tastenkombination nur, wenn diese nicht schon verwendet ist.

Ctr+Shift+O funktioniert nicht, Ctr+Shift+ALt+O funktioniert.
Wo der Tastendruck ggf. abgefangen wird weiß ich nicht.

Wie kann ich festlegen, dass der neue Eintrag Vorrang haben und ggf. alte Zuweisungen ersetzen soll?

Ich könnte natürlich nochmal über ein KeyBinding die Methode einem ShortCut zuweisen (wie gelb markiert).
Das wäre aber eine (unnötige?) Dopplung, die ich eigentlich gern vermeiden würde.

Wie macht man es richtig?

Uwe Raabe 14. Jun 2020 21:26

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1467242)
Wie kann ich festlegen, dass der neue Eintrag Vorrang haben und ggf. alte Zuweisungen ersetzen soll?

Wenn es kein Standart-ShortCut der IDE ist, dann kann die Reihenfolge der Erweiterungsmodule in den Optionen unter Tastaturbelegung eine Rolle spielen. Aber das müsste dann jeder Anwender in seiner IDE selbst anpassen. Außerdem ist es ja objektiv nicht nachvollziehbar, warum gerade dein Experte da Vorrang haben sollte.

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.

stahli 18. Jun 2020 22:49

AW: OTA - komplexer Experte
 
Ich will mich jetzt mal um einen Installer kümmern...

Eine eigene Lösung mit Eintrag in Registry, Lizenzdatei und optional UpdateCheck würde ich mir grundsätzlich zutrauen.

Wie steht es denn aber aktuell mit dem GetIt-Manager?
Lässt sich der für ein Projekt wie meins nutzen?
Muss Emba das genehmigen? Habe ich da überhaupt eine Chance? (Das Package müsste sich ja erst mal bewähren...)
Wie würde das mit "Lizenz kaufen" und überhaupt mit unterschiedlichen Lizenzen funktionieren?

(Einen älteren Beitrag dazu habe ich hier gefunden: https://www.delphipraxis.net/186196-...instellen.html. Leider nichts aktuelles.)

Uwe Raabe 19. Jun 2020 00:20

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1467719)
Wie steht es denn aber aktuell mit dem GetIt-Manager?
Lässt sich der für ein Projekt wie meins nutzen?

Ich denke, schon - aber s.u.

Zitat:

Zitat von stahli (Beitrag 1467719)
Muss Emba das genehmigen? Habe ich da überhaupt eine Chance? (Das Package müsste sich ja erst mal bewähren...)

Die Hürde ist nicht so hoch.

Zitat:

Zitat von stahli (Beitrag 1467719)
Wie würde das mit "Lizenz kaufen" und überhaupt mit unterschiedlichen Lizenzen funktionieren?

Zur Zeit - gar nicht. Wenn du es nicht gratis weggeben willst, kannst du in GetIt nur eine Trial anbieten.

Du könntest das allerdings so gestalten, daß sich die Trial mit einem Lizenzkey freischalten lässt, den der Anwender bei dir über einen anderen Kanal erwerben muss. Dann kannst du GetIt immerhin als Softwareverteiler und -updater einsetzen. Allerdings erst, wenn die Update-Funktionalität auch endlich verfügbar ist. Das kann aber auch noch 10.5 oder später sein und erreicht dann auch nur die Leute mit dieser Version. Die GetIt-Kataloge sind bisher jedenfalls an die Delphi-Version gebunden.

Mir persönlich ist das zu starr, zu eingeschränkt und zu umständlich. Mein Release-Prozess beschränkt sich aktuell auf einen Klick im CI-System und das Anlegen der neuen Version auf der jeweiligen Download-Seite. Das erlaubt mir Updates im Viertelstundentakt zu liefern (zumindest theoretisch). Wenn ich genug Zeit und Lust auf PHP hätte, würde ich das ja auf den besagten Klick reduzieren, aber so ist es auch akzeptabel.

Solange mir GetIt keine vergleichbaren Turnaround-Zeiten bietet, gibt es den MMX und meine Tools auch weiterhin nur auf meiner Website. Aber die sind ja auch gratis.

Man sollte dabei auch bedenken, daß GetIt ausschließlich für den Hobbybereich oder als Teaser gedacht ist. Für den professionellen Einsatz ist das nicht zu gebrauchen (und das weiß Embarcadero auch). Es ist halt ein Marketinginstrument - nicht mehr und nicht weniger. Insofern vermutlich durchaus interessant für dich.

stahli 19. Jun 2020 08:24

AW: OTA - komplexer Experte
 
Vielen Dank!

Ich werde erst mal ein eigenes System versuchen.

Später könnte man ja ggf. eine Free-Version noch in GetIt bringen, falls es Interesse gibt.

stahli 28. Jun 2020 12:12

AW: OTA - komplexer Experte
 
Ich habe mal einen Installer gebaut, der den Wizard für unterschiedliche Delphi-Versionen installieren und updaten kann.
Die grundsätzliche Arbeitsweise kann ich schon mal zeigen.

In den Wizards selbst könnte optional über verfügbare Updates informiert werden.
Das Update selbst müsste dann wieder über den Installer erfolgen (ebenso die Installation bei neuen Delphi-Versionen).

Der Installer würde in einfacher Form auf unterschiedliche verfügbare Lizenzen prüfen.
Das ist allerdings noch nicht umgesetzt und dann auch nicht Fort Knox.


Mich würde natürlich mal interessieren, was Ihr von dem Ansatz haltet: https://youtu.be/GjKGHGW_rII

stifflersmom 28. Jun 2020 17:00

AW: OTA - komplexer Experte
 
Tatsächlich finde ich das sehr gelungen (vom Formulardesign mal abgesehen).

So eine komfortabel Behandlung/Installation/Update eines Plugins für Delphi finde ich klasse.

stahli 29. Jun 2020 09:53

AW: OTA - komplexer Experte
 
Freut mich. :bounce2:

Wenn Du mit Formulardesign das Styling meinst, ich wollte eigentlich mit unterschiedlichen Styles arbeiten. Das funktioniert allerdings nicht korrekt.
Ich habe einen QC-Eintrag erstellt: https://quality.embarcadero.com/browse/RSP-29795

stifflersmom 29. Jun 2020 10:01

AW: OTA - komplexer Experte
 
Ich meinte das Formulargrau und die Linien, das sieht alles etwas "altbacken" aus.
Wobei ich mich da sehr weit aus dem Fenster lehne, meine Applikationen sehen immer so aus, da mein grafisches Talent dem eines Flaschenöffners gleicht...

Nebenbei:
Auf englisch heißt es : license

stahli 29. Jun 2020 10:16

AW: OTA - komplexer Experte
 
Ja, das sind Panels in einer Scrollbox.
Denen wollte ich gerade einen abweichenden Style zu weisen, damit es mehr nach ordentlicher Tabelle aussieht. Geht halt nur nicht. :-(

Mit dem englisch stimmt natürlich. :oops:

jaenicke 29. Jun 2020 12:31

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1468427)
Ja, das sind Panels in einer Scrollbox.
Denen wollte ich gerade einen abweichenden Style zu weisen, damit es mehr nach ordentlicher Tabelle aussieht. Geht halt nur nicht. :-(

Ich würde einfach eine echte Tabelle verwenden. Der Inhalt kann ja genauso aussehen, aber das ganze sieht dann deutlich besser aus und ist zudem deutlich einfacher und variabler.

Was das angeht ist es bei TMS z.B. schon ganz gut. Schade (um freundlich zu bleiben) ist dort nur, dass jeweils ein eigener Installer pro Paket verwendet wird und das ganze nicht direkt in den Subscription Manager integriert ist.

stahli 29. Jun 2020 13:56

AW: OTA - komplexer Experte
 
Ich hatte ein Stringgrid versucht, aber kam damit nicht zurecht.

Folgende Anforderungen:
- Rechte zwei Spalten fixe Breite
- Linke Spalte automatische Breite
- Zeilen optional ausblenden (man könnte natürlich auch Zeilen auslassen, also betreffende Datenrecords gar nicht erst als Zeile behandeln)
- 1 bis 3 Controls zentriert in einer Zelle platzieren (klickbar und hoverbar)

Dann hatte ich es mit einem Gridpanel versucht und es zum Schluss doch lieber dynamisch zusammengebaut.

Wenn ich die Zellen noch etwas gesondert stylen könnte (was ja theoretisch gehen sollte) wäre ich schon zufrieden. Ich warte einfach auf ein Fix.

jaenicke 29. Jun 2020 18:31

AW: OTA - komplexer Experte
 
All das und noch viel mehr kann die VirtualTreeView sehr gut. ;-)

stahli 6. Jul 2020 14:56

AW: OTA - komplexer Experte
 
Jetzt funktioniert alles schon sehr gut. :-)

Die Exe kann sich selbst updaten (Neustart wird über Batch geregelt) und die einzelnen Delphi-Wizards können auch problemlos installiert/geupdatet werden.

Letzte Aufgabe diesbezüglich ist die Verfügbarkeitsprüfung von Updates für die Wizards, wenn Delphi gestartet wird.

Ich könnte mir das so vorstellen, dass bei der Initialisierung nach dem Start vom jeweiligen Delphi jeder Wizard prüft, ob für ihn ein Update verfügbar ist.

Dazu müsste ich allerdings die Prüfung aus dem Installer (der lädt eine Liste aus dem Netz und vergleicht die Zeitstempel) nochmal in jedem Wizard für einen einzelnen Eintrag nachbauen.
Dann könnte eine Info ausgegeben werden: "Bitte Installer starten und updaten!".

Oder ich starte einfach den Installer mit einem Parameter "/quiet /10.4" und der prüft auf ein Update für diese Version. Wenn verfügbar bleibt er auf und zeigt das Formular an. Wenn nicht verfügbar beendet er sich wieder.

Wie würdet Ihr es lösen?

dummzeuch 6. Jul 2020 16:05

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1468947)
Oder ich starte einfach den Installer mit einem Parameter "/quiet /10.4" und der prüft auf ein Update für diese Version. Wenn verfügbar bleibt er auf und zeigt das Formular an. Wenn nicht verfügbar beendet er sich wieder.

Wie würdet Ihr es lösen?

Ich würde definitiv den Installer aufrufen statt den Code zu duplizieren. Das hat auch den Vorteil, dass der Code nicht innerhalb Delphi IDE ausgeführt wird und deshalb auch den Start der IDE nicht verzögert.

stahli 11. Jul 2020 20:15

AW: OTA - komplexer Experte
 
Hier mal ein kurzes Video, wie die Wizards upgedated werden: https://youtu.be/J138-YertKc

Und noch eins, wie der Installer sich selbst updatet: https://youtu.be/lRS03VDDpwQ

stahli 14. Jul 2020 22:52

AW: OTA - komplexer Experte
 
Hallo zusammen,

ich habe mal eine Bitte an die OTA-Profis unter Euch...

Ich nutze zwei DockableForms. Bei einer eingebundenen DLL funktioniert alles perfekt.
Wenn ich allerdings das Package installiere (um den Wizard debuggen zu können) stürzt Delphi beim Schließen oder beim deinstallieren des Packages ab.

Das ist etwas schwer genau zu beschreiben. Ich habe mal ein Video erstellt: https://youtu.be/00p1nSQwN28

Hat jemand mal Zeit und Lust, sich das anzusehen? Ich komme einfach nicht weiter.

Das Problem ist also das Erzeugen der Formulare innerhalb eines installierten Packages.


So sehen die Formularmethoden aus:
Delphi-Quellcode:
{ TFullSearchForm }

class procedure TFullSearchForm.CreateDockForm;
begin
  if not Assigned(FormInstance) then
    CreateDockableForm(FormInstance, TFullSearchForm);
end;

class procedure TFullSearchForm.ShowHideDockForm;
begin
  CreateDockForm;
  ShowHideDockableForm(FormInstance);
end;

class procedure TFullSearchForm.RemoveDockForm;
begin
  Codesite.Send('-> TFullSearchForm.RemoveDockForm');
  FreeDockableForm(FormInstance);
  Codesite.Send('<- TFullSearchForm.RemoveDockForm');
end;

stahli 15. Jul 2020 20:26

AW: OTA - komplexer Experte
 
Ich habe jetzt dem Formular Application als Owner zugewiesen.
Jetzt funktioniert das Öffnen, Schließen und Debuggen des Projektes.

Allerdings stürzt Delphi beim deinstallieren oder neuerlichen installieren des Packages manchmal stumpf ab.

Daher will ich nochmal nachfragen, ob vielleicht doch noch jemand einen Tipp hat.
Notfalls könnte ich zwar erst mal weiter arbeiten und müsste gelegentlich Delphi neu starten, aber schön ist das nicht.

Die DLL-Variante ist weiterhin stabil (jedenfalls habe ich keine Probleme festgestellt).


Delphi-Quellcode:
procedure CreateDockableForm(var FormVar: TDockableFormBase; FormClass: TDockableFormBaseClass);
begin
  Codesite.Send('-> CreateDockableForm');
  TCustomForm(FormVar) := FormClass.Create(Application); // <------------ statt nil
  RegisterDockableForm(FormClass, FormVar, TCustomForm(FormVar).Name);
  Codesite.Send('<- CreateDockableForm');
end;

Uwe Raabe 15. Jul 2020 21:26

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1469677)
Allerdings stürzt Delphi beim deinstallieren oder neuerlichen installieren des Packages manchmal stumpf ab.

...

Die DLL-Variante ist weiterhin stabil (jedenfalls habe ich keine Probleme festgestellt).

Die DLL kann man ja auch nicht deinstallieren.

stahli 15. Jul 2020 21:35

AW: OTA - komplexer Experte
 
Das stimmt.

Aber um das Package weiter zu entwickeln und zu debuggen muss man es ja deinstallieren bzw. neu installieren.
Sollte das nicht grundsätzlich machbar sein?

Uwe Raabe 15. Jul 2020 22:02

AW: OTA - komplexer Experte
 
Zitat:

Zitat von stahli (Beitrag 1469680)
Aber um das Package weiter zu entwickeln und zu debuggen muss man es ja deinstallieren bzw. neu installieren.
Sollte das nicht grundsätzlich machbar sein?

Im Prinzip schon. Allerdings hatte ich auch schon Probleme, ein Package reibungslos zu entladen und danach wieder zu laden. Das muss nicht mal an dem Package selbst liegen. Am Ende belässt man es dann einfach dabei, da der Anwender es ja in der Regel auch nicht so häufig entlädt und wieder lädt.

stahli 15. Jul 2020 22:25

AW: OTA - komplexer Experte
 
Ok vielen Dank.

Dann werde ich erst mal versuchen, so weiter zu arbeiten.
Wird halt den einen oder anderen zusätzlichen Neustart notwendig machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 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