Dialog-Refresh und PDF-Export

Fehlerberichte, Hilfe und Anregungen zu BasicMaker 2016 für Windows

Moderator: SoftMaker Team

Antworten
GodYa
Beiträge: 11
Registriert: 28.04.2015 18:30:29

Dialog-Refresh und PDF-Export

Beitrag von GodYa » 29.05.2015 12:42:03

Hallo, dann mache ich mal den Anfang hier... ;-)

Hab ein paar Fragen zum BasicMaker:

1) Gibt es eine Möglichkeit, das Fenster eines Dialogs zu aktualisieren, ohne dass das Fenster geschlossen werden muss?

Beim experimentieren mit der Dialog-Funktion ist mir aufgefallen, dass das verknüpfte Array einer ListBox problemlos neue Werte aufnimmt und das man diese dann auch über die Schaltflächen im Dialog abrufen kann. Es wäre jetzt nur toll, wenn sich die Anzeige der ListBox auch entsprechend der neuen Werte im Array anpasst. Damit erspart man dem Benutzer die etwas unschönen, in reihe geschalteten Dialoge bei einem Refresh.

2) Wie kann ich ein Dialog-Fenster, innerhalb einer Dialog-Funktion beenden? Die in der Dokumentation vorgeschlagene Methode, den ReturnValue auf null zu setzen (myDialogFunction=0), hat leider kein Effekt. Oder missverstehe ich da etwas? #-o

3) Gibt es einen Weg, den PDF-Export des PlanMakers, aus dem BasicMaker heraus anzuschubsen? Mit SendKeys lässt sich leider keine volle Automation erreichen. Die wäre mir aber für die Archivierung sehr wichtig.

Ansonsten, Hut ab, ein tolles Produkt! =D>

Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1859
Registriert: 06.02.2007 14:01:47

Re: Dialog-Refresh und PDF-Export

Beitrag von Dewes » 29.05.2015 16:30:06

1) Gibt es eine Möglichkeit, das Fenster eines Dialogs zu aktualisieren, ohne dass das Fenster geschlossen werden muss?
auf die Schnelle, ohne es getestet zu haben, würde ich sagen nein. Vielleicht könnte kann man mit einem Button "Refresh" arbeiten.
2) Wie kann ich ein Dialog-Fenster, innerhalb einer Dialog-Funktion beenden? Die in der Dokumentation vorgeschlagene Methode, den ReturnValue auf null zu setzen (myDialogFunction=0), hat leider kein Effekt. Oder missverstehe ich da etwas? #-o
Ich arbeite mit einem Button "Beenden" im Dialogfenster, hinterlegt wird der Befehl "Stop".
3) Gibt es einen Weg, den PDF-Export des PlanMakers, aus dem BasicMaker heraus anzuschubsen? Mit SendKeys lässt sich leider keine volle Automation erreichen. Die wäre mir aber für die Archivierung sehr wichtig.
Da sehe ich direkt in BM keine Möglichkeit, die SendKeys sind ein Problem, wurde auch schon öfters im Forum diskutiert. Ich würde ein kleines Script z.B. mit der Scriptsprache AutoIt oder Autohotkey schreiben und das Script in eine EXE umwandeln. Dann kann man dieses "compilierte" Script im BM-Script direkt aufrufen.

GodYa
Beiträge: 11
Registriert: 28.04.2015 18:30:29

Re: Dialog-Refresh und PDF-Export

Beitrag von GodYa » 30.05.2015 14:04:46

hmm... Ein Refresh-Button, innerhalb des Dialogs, funktioniert ja leider nicht. Da müsste man sich dann über mindestens zwei Fenster hinweg hangeln. Wenn man die Fenster aber geschickt anordnet, dann kann man damit leben.

Die Stop Anweisung ist mir etwas zu radikal, damit beendet man ja gleich das ganze Programm. Ich bräuchte etwas, womit sich die Dialog Instanz aus der Dialog-Funktion heraus löschen lässt. Ich glaube, ich versuche mein Glück mal mit der User32.dll. Über die Declare Anweisung kann man da vielleicht was brauchbares basteln.

Für den PDF-Export habe ich wahrscheinlich auch eine Lösung gefunden, muss das aber in der Praxis noch austesten. Rein theoretisch müsste man mit Ghostscript und der PrintOut Anweisung etwas basteln können. Ghostscript bindet sich als quasi Drucker im System ein und lässt sich dann bequem über Befehlszeilen steuern. Das hört sich erst mal gut an. Mal gucken, ob das als Workaround auch wirklich klappt.

Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1859
Registriert: 06.02.2007 14:01:47

Re: Dialog-Refresh und PDF-Export

Beitrag von Dewes » 30.05.2015 16:00:00

Ein Refresh-Button, innerhalb des Dialogs, funktioniert ja leider nicht
Wenn man immer zum selben Unterprogramm bzw. Dialog zurück will, kann man diesen Aufruf hinterlegen.
Für den PDF-Export habe ich wahrscheinlich auch eine Lösung gefunden, muss das aber in der Praxis noch austesten. Rein theoretisch müsste man mit Ghostscript und der PrintOut Anweisung etwas basteln können. Ghostscript bindet sich als quasi Drucker im System ein und lässt sich dann bequem über Befehlszeilen steuern. Das hört sich erst mal gut an. Mal gucken, ob das als Workaround auch wirklich klappt.
Stimmt, da hatte ich gar nicht daran gedacht. Es muss nicht unbedingt Ghostscript sein, es gibt im Internet massenhaft Software die sich als PDF-Drucker einbinden lässt.

GodYa
Beiträge: 11
Registriert: 28.04.2015 18:30:29

Re: Dialog-Refresh und PDF-Export

Beitrag von GodYa » 02.06.2015 14:34:24

Für das Problem mit dem Dialog-Refresh habe ich nun auch eine passable Lösung zusammengeschustert. Ich denke, damit kann man leben :)

Wer auf eine ähnliche Hürde aufläuft, hier mein Lösungsansatz:

Code: Alles auswählen

Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
  (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As Long, ByVal lpWindowName As String) As Long
 
Const WM_DESTROY As Long = &H02

Dim ListA(4) As String
Dim ListB(4) As String

ListA(1) = "Test1"
ListA(2) = "Test2"
ListB(1) = "Test1"
ListB(2) = "Test2"

CreateDialog

Function CreateDialog()
  Begin Dialog TestDialog 120, 120, 400, 300, "Test-Dialog", .DialogFn
    CheckBox 8,8,150,8,"Test",.TestCheckBox
    DropListBox 204,8,190,240, ListA$(),.ListABox
    ListBox 8,24,386,250, ListB$(),.ListBBox
    OKButton 158, 280, 40, 14
    CancelButton 202, 280, 40, 14
  End Dialog
  Dim DlgTest As TestDialog
  rc% = Dialog(DlgTest)
End Function

Function DialogFn(ControlID$, Action%, SuppValue%)
  Select Case Action%
    Case 1
      'Print Init
    Case 2
      If ControlID$ = "ListABox" Then
        Dim hwnd As Long
        hwnd = FindWindow(0, "Test-Dialog")
        SendMessage hwnd, WM_DESTROY, 0, 0
        ListA(1) = "TestNeu1"
        ListA(2) = "TestNeu2"
        ListB(1) = "TestNeu1"
        ListB(2) = "TestNeu2"
        CreateDialog
      End If
    Case Else
  End Select
End Function

GodYa
Beiträge: 11
Registriert: 28.04.2015 18:30:29

Re: Dialog-Refresh und PDF-Export

Beitrag von GodYa » 07.06.2015 14:44:55

Und hier noch eine Variante, wie man ohne SendKeys-Funktion den PDF-Export vom PlanMaker anschubsen kann:

Code: Alles auswählen

Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
        (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ 
        (ByVal lpClassName As Long, ByVal lpWindowName As String) As Long
Declare Function GetMenu Lib "user32.dll" (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib "user32.dll" (ByVal hmenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib "user32.dll" (ByVal hmenu As Long, ByVal nPos As Long) As Long

Const WM_COMMAND As Long = &H111
Dim pm As Object

Sub Main
  Call ConnectPlanMaker
  Call ExportPDF(pm.Application.ActiveWorkbook.Name)
End Sub

Function ConnectPlanMaker()
  Set pm = CreateObject("PlanMaker.Application")
  pm.Application.Visible = True
End Function

Function ExportPDF(FName As String)
  Dim hWnd, MenuID, SubID, ItemID
  hWnd = FindWindow(0, "PlanMaker - [" & FName & "]")
  MenuID = GetMenu(hWnd)
  SubID = GetSubMenu(MenuID, 1)
  ItemID = GetMenuItemID(SubID, 21)
  SendMessage hWnd, WM_COMMAND, ItemID, 0&
End Function
Funktioniert schon ganz gut so... Muss nur noch eine Lösung finden, damit automatisch der OK-Button abgefeuert wird. Das sollte aber auch machbar sein... stay tuned ;-)

GodYa
Beiträge: 11
Registriert: 28.04.2015 18:30:29

Re: Dialog-Refresh und PDF-Export

Beitrag von GodYa » 03.09.2015 12:17:41

Habe SoftMaker Basic, durch Visual Studio Community 2015 Edition (C#/.NET) ersetzt und somit alle Probleme gelöst. Für komplexere Aufgaben, sehr empfehlenswert! Funktioniert prima in Verbindung mit SoftMaker Office. Vielleicht sollte man den Basic Maker einstampfen und die Energie in den Ausbau der .COM Schnittstelle stecken?! :roll:

lutzeslife
Beiträge: 218
Registriert: 12.01.2008 21:29:19
Wohnort: Dresden

Re: Dialog-Refresh und PDF-Export

Beitrag von lutzeslife » 03.09.2015 13:17:50

Für einfache Sachen ist Basic Script okay. Für komplexe Sachen kann man schon mal auf Com umsteigen. Eine vernünftige API / Plugin wäre aber schöner.
Mit freundlichen Grüßen
Daniel

OS: Windows 10
CPU: I5 3 Ghz
RAM: 4 GB
HDD: 250 GB SSD

florian92
Beiträge: 2
Registriert: 03.09.2015 14:33:21

Re: Dialog-Refresh und PDF-Export

Beitrag von florian92 » 03.09.2015 14:43:09

Hi GodYa,

könntest du einen Code Ausschnitt zeigen, wie du in deinem .NET Programm über eine COM Schnittstelle auf SoftMaker Office zugreifst?
Also ich denke mal, dass du das über COM machst. Wüsste nicht, wie sonst.

Ich muss automatisiert viele Word-Dateien in SoftMaker öffnen, das Inhaltsverzeichnis erneuern und die Datei als PDF exportieren.. Nur habe ich leider null Erfahrung mit COM.. und im BasicMaker gibt es leider keine vergleichbaren Funktionen (außer das Öffnen der Datei natürlich :wink:)

Wäre super, wenn du mir helfen könntest.

Gruß Flo

GodYa
Beiträge: 11
Registriert: 28.04.2015 18:30:29

Re: Dialog-Refresh und PDF-Export

Beitrag von GodYa » 04.09.2015 10:24:21

Hi Flo, hab eine ähnliche Problematik gehabt! Für einen Kunden musste ich ein flexibles Rechnungssystem für Dienstleister erstellen, wo die Kunden- und Aufgabenlisten, auf gesonderten Arbeitsblättern im PlanMaker liegen - aber alles in einer Datei. Dann gibt es noch jeweils ein Arbeitsblatt für die Brutto- und Netto-Rechnung, die aus den Listen automatisch mit Daten versorgt werden - ein manueller Eingriff ist natürlich auch noch überall möglich. Die Aufgabenlisten sind Objektorientiert und werden entsprechend in Kategorien angezeigt - mit Suchfunktion. Und dann soll das Ganze auch noch automatisch als PMDX- und PDF- Datei archiviert werden. Der PMDX Export dient hauptsächlich der automatischen Erstellung eines Reports (frei wählbarer Zeitraum) für die Bilanzbuchhaltung und für die Verwaltung der Rechnungseingänge (S-Konto - frei Wählbar nach Prozent und Tagen). Die PDF's können dann auch noch automatisch aus dem Programm raus an die Kunden versendet werden - einzeln oder zusammen - wie man will. Insgesamt wurde eigentlich alles im Programm dynamisch angelegt, auch die Sprache und Formeln, so dass man das Programm schnell für andere Kunden anpassen kann. Werde das Tool demnächst veröffentlichen :) Der Kunde, wo es jetzt schon läuft, der ist hellauf begeistert durch die Zeit- und Kosteneinsparung =D>

Für C# kann man im Prinzip mit der Basic-Maker Anleitung arbeiten. Es sind die gleichen Befehle, die in der Rubrik "Objektstrukturen" beschrieben werden. Aber hier mal ein kleines Beispiel dazu...

Innherhalb der Form1 Klasse wird zuerst eine PlanMaker Variable "pm" angelegt:

Code: Alles auswählen

public partial class Form1:Form{
   public dynamic pm;	
   ...
}
Beim laden der Form1, wird automatisch die Funktion "ConnectPlanMaker" aufgerufen:

Code: Alles auswählen

private void Form1_Load(object sender, EventArgs e){
   ConnectPlanMaker();
   ...
}
Die eigentliche Funktion, die z. B. den PlanMaker mit C#/.NET verbindet:

Code: Alles auswählen

public void ConnectPlanMaker(){
   System.Type pmType = System.Type.GetTypeFromProgID("PlanMaker.Application");
   pm = System.Activator.CreateInstance(pmType);
}
Und nun könnte man mit folgendem Code die Zellen beschreiben oder auslesen:

Code: Alles auswählen

   pm.Application.Workbooks.Item("MeinDokument.pmdx").Sheets.Item("Tabelle1").Range("A1:D1").Item(1, 1).Value;

Dewes
SoftMaker Volunteers
SoftMaker Volunteers
Beiträge: 1859
Registriert: 06.02.2007 14:01:47

Re: Dialog-Refresh und PDF-Export

Beitrag von Dewes » 04.09.2015 13:16:28

Und nun könnte man mit folgendem Code die Zellen beschreiben oder auslesen:
Hört sich interessant an, werde mir das auch mal ansehen. BasicMaker ist ja inzwischen ein Stiefkind von Softmaker, wird auf der Website bei den Produkten nicht mehr aufgeführt.

Kann ich auch Methoden nachbilden wie z.B. das Format einer Zelle ändern.

florian92
Beiträge: 2
Registriert: 03.09.2015 14:33:21

Re: Dialog-Refresh und PDF-Export

Beitrag von florian92 » 07.09.2015 09:04:47

Hi GodYa,
vielen Dank dafür. Werde mich gleich mal daran probieren :D sieht auf dem ersten Blick super einfach aus. Hätte ich nicht gedacht. Hoffe, dass ich nun alles hinbekomme.. :)

Gruß Flo

lutzeslife
Beiträge: 218
Registriert: 12.01.2008 21:29:19
Wohnort: Dresden

Re: Dialog-Refresh und PDF-Export

Beitrag von lutzeslife » 07.09.2015 16:03:18

Bei Fragen kannst du gerne dich hier auch wenden. Bei API Sachen hilft der Support (orientieren kannst du dich an das BasicMaker Handbuch, da wird ja ein Großteil der API beschrieben) und hier im Forum sind auch einige C# Programmierer unterwegs (unter anderem meine Wenigkeit ) die im Notfall auch helfen können.
Mit freundlichen Grüßen
Daniel

OS: Windows 10
CPU: I5 3 Ghz
RAM: 4 GB
HDD: 250 GB SSD

Antworten

Zurück zu „BasicMaker 2016 für Windows“