Einzelnen Beitrag anzeigen

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