AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?
Thema durchsuchen
Ansicht
Themen-Optionen

Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

Ein Thema von Andreas13 · begonnen am 17. Mär 2019 · letzter Beitrag vom 21. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2      
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#1

Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 17. Mär 2019, 12:15
Delphi-Version: XE5
Hallo Delphi Community,

da ich fast ausschließlich reine technische Berechnungen OHNE visuelle Komponenten programmiere, stoße ich mit folgender Aufgabenstellung leider an meine Grenzen:

Eine Berechnungsroutine ist über eine DLL in Excel eingebunden und erledigt umfangreiche Berechnungen und übergibt diese an Excel. So weit, so gut.

Nun möchte ich innerhalb obiger NICHT-visueller Berechnungsroutine ein Editor-Fenster oder Memo-Fenster etc. zur Anzeige von Zwischenergebnissen zur Laufzeit aufmachen.
Wie läßt sich das bewerkstelligen?

Vielen Dank für Eure Hilfe im Voraus!

Gruß
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#2

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 17. Mär 2019, 17:07
Vielleicht hilft dir diese Bibliothek:
https://github.com/jaenicke/MTCL
Die ist noch im Anfangsstadium, funktioniert aber schon. Und du kannst die Anzeige direkt aus einem Berechnungsthread aktualisieren.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 17. Mär 2019, 18:23
Würde es auch ein Konsolenfenster tun?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#4

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 17. Mär 2019, 18:52
Ein Konsolenfenster aus Excel heraus als Anzeige fände ich relativ unüblich. Möglich ist natürlich alles.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 17. Mär 2019, 19:49
Hallo Sebastian,

danke für den Tipp, aber leider konnte ich ihn (noch) umsetzen...
Mein Problem ist, daß meine Anwendung OHNE jedes Fenster läuft: es ist eine reine Berechnungsreoutine, die still und heimlich Excel mit Ergebnissen füttert.
Ich bräuchte lediglich ein Fester wie z.B. die MessageBox(..), wo ich viele Zwischenergebnisse anzeigen und das Fenster danach wieder schließen / löschen kann.

Gruß
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#6

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 17. Mär 2019, 21:37
Deshalb vermute ich ja, dass es damit gehen könnte, da das damit nicht über die VCL läuft. Denn die wäre in einer solchen DLL eventuell etwas zickig (es könnte aber auch gehen).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#7

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 18. Mär 2019, 12:40
Hallo Delphi Community,

da ich fast ausschließlich reine technische Berechnungen OHNE visuelle Komponenten programmiere, stoße ich mit folgender Aufgabenstellung leider an meine Grenzen:

Eine Berechnungsroutine ist über eine DLL in Excel eingebunden und erledigt umfangreiche Berechnungen und übergibt diese an Excel. So weit, so gut.

Nun möchte ich innerhalb obiger NICHT-visueller Berechnungsroutine ein Editor-Fenster oder Memo-Fenster etc. zur Anzeige von Zwischenergebnissen zur Laufzeit aufmachen.
Wie läßt sich das bewerkstelligen?

Vielen Dank für Eure Hilfe im Voraus!

Gruß
Andreas
Ich nehme mal an, die Berechnung soll weiter laufen, während das Fenster angezeigt wird? Das kriegst Du nur hin, wenn eines von beiden in einem sekundären Thread läuft.

Zuerst mal: es ist kein Problem, in einer DLL die VCL zu verwenden, solange Du nur modale Fenster anzeigst. Die haben ihre eigene Message loop und sind somit unabhängig von der message loop der Hostanwendung. Mein Vorschlag wäre also folgendes:
  • Lege ein normales VCL Form für die Anzeige an
  • In der nach Excel exportierten Funktion erzeugst Du eine Instanz dieses Forms und zeigst sie per ShowModal
  • Im OnPaint event des Forms setzt Du zuerst OnPaint auf nil, damit der Handler nur einmal aufgerufen wird, und startest dann den Thread für die Berechnung
  • Der Thread kann Zwischenergebnisse per Synchronize an das Form zur Anzeige schicken
  • Wenn die Berechnung fertig ist legt der Thread das Ergebnis in einem Feld des Forms ab und setzt Modalresult auf mrOK, beendet sich dann
  • In der exportierten Routine kehrt daraufhin der ShowModal-Aufruf zurück, die Routine holt das Ergebnis aus dem Feld des Forms, zerstört das Form, und gibt das Ergebnis an Excel zurück

Es gibt da noch ein potentielles Problem mit der Z-Order. Um das Meldungsfenster zuverlässig oberhalb des Excel-Fensters zu lassen solltest Du den formstyle auf fsTopMost setzen, oder die CreateParams-Methode überschreiben und params.wndParent auf den Rückgabewert von GetForegroundWindow setzen.
Peter Below

Geändert von peterbelow (18. Mär 2019 um 12:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#8

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 18. Mär 2019, 13:01
Es gibt da noch ein potentielles Problem mit der Z-Order. Um das Meldungsfenster zuverlässig oberhalb des Excel-Fensters zu lassen solltest Du den formstyle auf fsTopMost setzen, oder die CreateParams-Methode überschreiben und params.wndParent auf den Rückgabewert von GetForegroundWindow setzen.
Da schauderts mich schon wieder... fsTopMost ist die schlimmste Vergewohltätigung die TForm zu bieten hat. Besonders spaßig wenn sich eine MesageBox dahinter legt und dann das ganze Programm blockiert. IMHO sollte man sehen dass man sich das WindowHandle der Containeranwendung (in dem Fall Excel) besorgt und dieses bei der Anzeige von Sub-Fenstern oder MessageBoxes gebrauchen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#9

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 18. Mär 2019, 16:05
[*]Der Thread kann Zwischenergebnisse per Synchronize an das Form zur Anzeige schicken
Oder man benutzt wie vorgeschlagen ein multithreadfähiges Fenster.
Dann kann man direkt aus einem Berechnungsthread etwas in die Anzeige schreiben und die Anzeige läuft auch weiter, wenn der Hauptthread beschäftigt ist.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Editor-Fenster oder Memo-Fenster in einer NICHT-visuellen Routine?

  Alt 18. Mär 2019, 16:23
Wenn es nur darum geht, um zu gucken was die Berechnung machen (als Log/Debugging), dann würde sich immer noch ein Konsolenfenster anbieten.
  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 03:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz