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 3 von 4     123 4      
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#21

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

  Alt 18. Mär 2019, 20:10
Ich habe das als Statusanzeige für den Enduser verstanden. Und da finde ich ein Konsolenfenster in der heutigen Zeit weniger sinnvoll.

Aber wie dem auch sei, erst einmal geht es darum überhaupt etwas zu sehen, egal wie.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 18. Mär 2019, 21:38
Hallo Zusammen,

danke für Eure bisherigen Reaktionen und die für mich sehr lehrreiche Diskussion.
Ich habe für Euch eine kleine Demo vorbereitet. Diese besteht aus zwei Dateien:

1): DLL_for_Excel_Test_0.dll
2): DLL_for_Excel_Test_0.xlsm

Beide befinden sich gezippt in:

DLL_for_Excel_Test_0.zip

In der Excel-Datei gibt es auch einige Hinweise für die Benutzung.

Danke!

Viele Grüße

Andreas
Angehängte Dateien
Dateityp: zip DLL_for_Excel_Test_0.zip (1,18 MB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 18. Mär 2019, 22:19
Sorry, habe zuvor den Quellcode vergessen:

Delphi-Quellcode:
Library DLL_for_Excel_Test_0;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss die erste
  Unit in der USES-Klausel Ihrer Bibliothek UND in der USES-Klausel Ihres Projekts
  (wählen Sie 'Projekt-Quelltext anzeigen') sein, wenn Ihre DLL Prozeduren oder Funktionen
  exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Dies
  gilt für alle Strings, die an oder von Ihrer DLL übergeben werden, auch für solche,
  die in Records und Klassen verschachtelt sind. ShareMem ist die Interface-Unit zur
  gemeinsamen BORLNDMM.DLL-Speicherverwaltung, die zusammen mit Ihrer DLL
  weitergegeben werden muss. Übergeben Sie String-Informationen mit PChar- oder ShortString-Parametern, um die Verwendung von BORLNDMM.DLL zu vermeiden.
}


uses
  System.SysUtils
, System.Classes
, WinAPI.Windows
;

{$R *.res}

TYPE
  ExcelDouble = Double; {8 Bytes für diese 32-Bit-DLL}
  ExcelBoolean = WordBool; {2 Bytes für diese 32-Bit-DLL}

Procedure Zwischenwerte_Anzeigen(Text1: String);
VAR
  S : String;

Begin
   S:= 'Das ist ein provisorisches Anzeigefenster für optionale Zwischenergebnisse, ' + #13;
   S:= S + 'die nicht unbedingt nötig sind, oder welche Excel gar NICHT darstellen kann.' + #13;
   S:= S + 'Das können z. B. umfangreiche Vektoren, Matrizen etc. sein oder aber auch Ergebnisse, die mit ';
   S:= S + 'Multipräzisions-Arithmetik auf 75 .. 150 Ziffern genau ermittelt wurden' + #13 + #13;
   S:= S + 'Momentan wird dieser Text behelfsweise mittels WinAPI.Windows.MessageBox(..) dargestellt, weil ich ... ';
   S:= S + 'zu meiner Schade gestehen muß, daß ich nicht weiß, wie hier ich anstelle der MessageBox(..) z.B. ein ';
   S:= S + 'Memo-Fenster aufmachen kann.' + #13 + #13;
   S:= S + 'Vielleicht kannst DU mir dabei helfen???? Danke im Voraus!' + #13;
   S := S + 'Gruß, Andreas' + #13 + #13;
   S := S + Text1 + #13;
   MessageBox(0, PChar(S), 'Provisorische Notlösung...!', MB_OK);
End; {Zwischenwerte_Anzeigen}
{---------------------------}

  
Function Komplizierte_Berechnung(a, b: ExcelDouble; Zwischenwerte: ExcelBoolean = True): ExcelDouble; StdCall;
// Test zum Demonstrieren: Result := a*b;

Begin
  Try
    Result:= a*b;
    IF Zwischenwerte Then Begin
      Zwischenwerte_Anzeigen('Zwischenergebnis für den User= 1.2345678901234567890ABCDEFGHIJ123452345678901234567890ABCDEFGHIJ12345');
      Result:= a*b;
      Exit;
    End;
  Except
    Exit;
  End;
End;{Komplizierte_Berechnung}
{---------------------------}



Exports

Komplizierte_Berechnung
;

Begin

End.
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 18. Mär 2019, 22:20
Sorry, habe zuvor den Quellcode vergessen:

Delphi-Quellcode:
Library DLL_for_Excel_Test_0;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss die erste
  Unit in der USES-Klausel Ihrer Bibliothek UND in der USES-Klausel Ihres Projekts
  (wählen Sie 'Projekt-Quelltext anzeigen') sein, wenn Ihre DLL Prozeduren oder Funktionen
  exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Dies
  gilt für alle Strings, die an oder von Ihrer DLL übergeben werden, auch für solche,
  die in Records und Klassen verschachtelt sind. ShareMem ist die Interface-Unit zur
  gemeinsamen BORLNDMM.DLL-Speicherverwaltung, die zusammen mit Ihrer DLL
  weitergegeben werden muss. Übergeben Sie String-Informationen mit PChar- oder ShortString-Parametern, um die Verwendung von BORLNDMM.DLL zu vermeiden.
}


uses
  System.SysUtils
, System.Classes
, WinAPI.Windows
;

{$R *.res}

TYPE
  ExcelDouble = Double; {8 Bytes für diese 32-Bit-DLL}
  ExcelBoolean = WordBool; {2 Bytes für diese 32-Bit-DLL}

Procedure Zwischenwerte_Anzeigen(Text1: String);
VAR
  S : String;

Begin
   S:= 'Das ist ein provisorisches Anzeigefenster für optionale Zwischenergebnisse, ' + #13;
   S:= S + 'die nicht unbedingt nötig sind, oder welche Excel gar NICHT darstellen kann.' + #13;
   S:= S + 'Das können z. B. umfangreiche Vektoren, Matrizen etc. sein oder aber auch Ergebnisse, die mit ';
   S:= S + 'Multipräzisions-Arithmetik auf 75 .. 150 Ziffern genau ermittelt wurden' + #13 + #13;
   S:= S + 'Momentan wird dieser Text behelfsweise mittels WinAPI.Windows.MessageBox(..) dargestellt, weil ich ... ';
   S:= S + 'zu meiner Schade gestehen muß, daß ich nicht weiß, wie hier ich anstelle der MessageBox(..) z.B. ein ';
   S:= S + 'Memo-Fenster aufmachen kann.' + #13 + #13;
   S:= S + 'Vielleicht kannst DU mir dabei helfen???? Danke im Voraus!' + #13;
   S:= S + 'Gruß, Andreas' + #13 + #13;
   S:= S + Text1 + #13;
   MessageBox(0, PChar(S), 'Provisorische Notlösung...!', MB_OK);
End; {Zwischenwerte_Anzeigen}
{---------------------------}

  
Function Komplizierte_Berechnung(a, b: ExcelDouble; Zwischenwerte: ExcelBoolean = True): ExcelDouble; StdCall;
// Test zum Demonstrieren: Result := a*b;

Begin
  Try
    Result:= a*b;
    IF Zwischenwerte Then Begin
      Zwischenwerte_Anzeigen('Zwischenergebnis für den User= 1.2345678901234567890ABCDEFGHIJ123452345678901234567890ABCDEFGHIJ12345');
      Result:= a*b;
      Exit;
    End;
  Except
    Exit;
  End;
End;{Komplizierte_Berechnung}
{---------------------------}



Exports

Komplizierte_Berechnung
;

Begin

End.
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 18. Mär 2019, 22:25
Sorry,
habe zuvor den Quellcode für die DLL vergessen!

Siehe Anhang:

DLL_for_Excel_Test_0.dpr

Gruß, Andreas
Angehängte Dateien
Dateityp: dpr DLL_for_Excel_Test_0.dpr (2,5 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
jsp

Registriert seit: 9. Aug 2003
50 Beiträge
 
#26

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

  Alt 19. Mär 2019, 11:04
Du könntest auch OutputDebugString verwenden, und dann einfach DebugView starten:
https://docs.microsoft.com/en-us/sys...oads/debugview

Gruss, Jörn
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 19. Mär 2019, 23:04
Zitat:
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.
Schau dir doch mal von Luckie die NonVcl Samples an damit sollte das kein Problem sein.

gruss
Danke für den tollen Tipp: Habe gerade angefangen, die Tutorien und die NonVcl Samples von "Luckie" zu studieren!

Gruß, Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#28

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

  Alt 20. Mär 2019, 10:00
So recht verstehe ich das Problem nicht. Es funktioniert mit der threadbasierten Lösung von mir genauso wie mit einem stinknormalen VCL-Formular. Beispiel mit einem VCL-Fenster siehe Anhang (für einen vollen Zeilenumbruch musst du den noch zu dem Windows-Zeilenumbruch ändern, sprich z.B. die Konstante sLineBreak nutzen, statt nur #13 zu benutzen).
Angehängte Dateien
Dateityp: zip DLL_for_Excel_Test_0.zip (2,3 KB, 2x aufgerufen)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 20. Mär 2019, 17:46
So recht verstehe ich das Problem nicht. Es funktioniert mit der threadbasierten Lösung von mir genauso wie mit einem stinknormalen VCL-Formular. Beispiel mit einem VCL-Fenster siehe Anhang (für einen vollen Zeilenumbruch musst du den noch zu dem Windows-Zeilenumbruch ändern, sprich z.B. die Konstante sLineBreak nutzen, statt nur #13 zu benutzen).
Sebastian, 10^6 Dank für Deine Hilfe! Es funktioniert einwandfrei und ich konnte die Lösung nachvollziehen und verstehen. Mein Fehler war, daß ich anstelle des VCL-Formulars eine VCL-Formularanwendung genommen habe...

Noch eine Frage bitte: Was müsste ich an Deiner Lösung modifizieren, wenn ich dasselbe Memo-Fenster in einer reinen Konsolenanwendung benutzen möchte? Oder geht es gar nicht, sondern nur über WinAPI-Routinen?

Gruß, Andreas
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 20. Mär 2019, 17:48
Du könntest auch OutputDebugString verwenden, und dann einfach DebugView starten:
https://docs.microsoft.com/en-us/sys...oads/debugview

Gruss, Jörn
Hallo Jörn,
danke für den Tipp, aber die Lösung von Sebastian ist die einfachste für meine Aufgabenstellung!

Gruß, Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      

 

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 06:59 Uhr.
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