RMChart und Xbase++
Moderator: Moderatoren
Hallo Hubert
Ich weiß nicht so recht ob das hier noch rein gehört, aber
ich hab mich auch grad mal mit RMChart beschäftigt und mich würde mal interessieren ob du schon etwas hinbekommen hast? Und ggf. mal den Quelltext schicken könntest.
Bei der Komplexität der Funktionen würde ich denken, dass es am einfachsten ist, wenn man im RmcDesigner ein *.rmc File erzeugt. Danach nur hinten die Werte anpasst und das dann als Bild generiert, speichert und wiederum in einem xbpDialog als xbpBitmap anzeigt.
Was denkst du dazu?
Müsste man die gdiplus_dnld.exe dann auf jedem Kunden-Rechner installieren oder reicht nur wenn die gdiplus.dll vorhanden ist?
Ich glaub du hast schon mehr Erfahrung damit.
Danke Rolf
Ich weiß nicht so recht ob das hier noch rein gehört, aber
ich hab mich auch grad mal mit RMChart beschäftigt und mich würde mal interessieren ob du schon etwas hinbekommen hast? Und ggf. mal den Quelltext schicken könntest.
Bei der Komplexität der Funktionen würde ich denken, dass es am einfachsten ist, wenn man im RmcDesigner ein *.rmc File erzeugt. Danach nur hinten die Werte anpasst und das dann als Bild generiert, speichert und wiederum in einem xbpDialog als xbpBitmap anzeigt.
Was denkst du dazu?
Müsste man die gdiplus_dnld.exe dann auf jedem Kunden-Rechner installieren oder reicht nur wenn die gdiplus.dll vorhanden ist?
Ich glaub du hast schon mehr Erfahrung damit.
Danke Rolf
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo Rolf,
nein, mit List&Label hat es nichts zu tun, daher habe ich es mal verschoben. Es gehört eigentlich zu dem schon bestehenden Thread hier, (aber erstens wird der dauernd übersehen und zweitens weiß ich nicht wie ich 2 Threads mischen kann) :
Integration in RMChart.
Grundlagen zu F2BIN Parameterübergabe per Referenz....
Allerdings wird dieser häufig übersehen, liegt wohl am Titel, ich hatte es damals auch nicht gefunden .
Es gibt allerdings Beispielcode im genannten Thread, bei dem mit ActiveX erfolgreich angezeigt wurde.
nein, mit List&Label hat es nichts zu tun, daher habe ich es mal verschoben. Es gehört eigentlich zu dem schon bestehenden Thread hier, (aber erstens wird der dauernd übersehen und zweitens weiß ich nicht wie ich 2 Threads mischen kann) :
Integration in RMChart.
Grundlagen zu F2BIN Parameterübergabe per Referenz....
Allerdings wird dieser häufig übersehen, liegt wohl am Titel, ich hatte es damals auch nicht gefunden .
Ich denke, dass die RMC File plus CSV für Daten und direkt anzeigen besser ist, als die geänderte RMC File zu nutzen ... allerhings hagelt es bei mir nur so von Fehlermeldungen. Bin leider noch nicht weiter, und das obwohl die PowerBasic-Beispiele hier einwandfrei laufen.Bei der Komplexität der Funktionen würde ich denken, dass es am einfachsten ist, wenn man im RmcDesigner ein *.rmc File erzeugt. Danach nur hinten die Werte anpasst und das dann als Bild generiert, speichert und wiederum in einem xbpDialog als xbpBitmap anzeigt.
Was denkst du dazu?
Es gibt allerdings Beispielcode im genannten Thread, bei dem mit ActiveX erfolgreich angezeigt wurde.
Bei einem XP Recher braucht man gar nichts mitliefern, ansonsten reicht es aus - und wird von MS empfohlen - die gdiplus.dll ins Anwendungsverzeichnis zu kopieren (bei meinem Rechner gibt es 5 verschiedene Versionen in verschiedenen Anwendungsverzeichnissen...Müsste man die gdiplus_dnld.exe dann auf jedem Kunden-Rechner installieren oder reicht nur wenn die gdiplus.dll vorhanden ist?
Zuletzt geändert von brandelh am Mo, 19. Jun 2006 16:58, insgesamt 2-mal geändert.
Gruß
Hubert
Hubert
Danke Hubert
für deine Antwort, ich werde mich ggf. Morgen nochmals damit beschäftigen, je nach Zeitdruck.
Die Komponente ist auf den ersten Blick gut designed und durchdacht.
Ich hoffe RMorgen ist nicht mehr ärgerlich über die Bemerkungen in dem älteren Thread.
So viel Arbeit wie das alles macht und dann noch als Freeware. Das ist sehr zu loben.
ich hoffe es findet sich noch eine Lösung
bis Bald
Rolf
für deine Antwort, ich werde mich ggf. Morgen nochmals damit beschäftigen, je nach Zeitdruck.
Die Komponente ist auf den ersten Blick gut designed und durchdacht.
Ich hoffe RMorgen ist nicht mehr ärgerlich über die Bemerkungen in dem älteren Thread.
So viel Arbeit wie das alles macht und dann noch als Freeware. Das ist sehr zu loben.
ich hoffe es findet sich noch eine Lösung
bis Bald
Rolf
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo,
der von Thomas veröffentlichte Quellcode hat mir geholfen, da aber dort etwas fehlt (#include, main, 2x draw() und die RMC ), nochmals hier der Quellcode, der bei mir gelaufen ist:
Die SIMPLEBAR.RMC liegt im RMChart Verzeichnis.
Die DLLs und die RMC müssen in das gleiche Verzeichnis wie dieser Quellcode
Die Umsatzdaten werden in dieser RMC nicht berücksichtigt, aber die ursprüngliche Umsatz.RMC steht uns nicht zur Verfügung.
Nochmals Danke Thomas, dass du mir mit diesem Code gezeigt hast, dass es gehen muss ...
Im Moment bin ich dabei eine Classe _RMChart zu erstellen, welche die nötigen Funktionsaufrufe (ohne die Kurzform mit I am Ende - TYPE statt parameter) als Methoden abzubilden und die IDs intern zu verwalten.
Ich hoffe ich kann hier bald den funktionierenden Quellcode veröffentlichen ...
der von Thomas veröffentlichte Quellcode hat mir geholfen, da aber dort etwas fehlt (#include, main, 2x draw() und die RMC ), nochmals hier der Quellcode, der bei mir gelaufen ist:
Die SIMPLEBAR.RMC liegt im RMChart Verzeichnis.
Die DLLs und die RMC müssen in das gleiche Verzeichnis wie dieser Quellcode
Code: Alles auswählen
#include "Dll.ch"
#define CRLF chr(13)+chr(10)
STATIC nHDll
STATIC tpl_RMC_CreateChartFromFile
STATIC tpl_RMC_GetChartSizeFromFile
STATIC tpl_RMC_Draw
STATIC tpl_RMC_Paint
STATIC tpl_RMC_Reset
proc main
? "RMC_INIT()",RMC_INIT()
? "UMSATZ", umsatz()
wait
return
FUNCTION RMC_INIT
LOCAL hDll := DllLoad("RMCHART.DLL")
LOCAL lReply := .F.
IF hDll <= 0
MsgBox("RMCHART.DLL nicht vorhanden!")
ELSE
lReply := .T.
tpl_RMC_CreateChartFromFile := DllPrepareCall(hDll,DLL_STDCALL,"RMC_CREATECHARTFROMFILE")
tpl_RMC_GetChartSizeFromFile := DllPrepareCall(hDll,DLL_STDCALL,"RMC_GETCHARTSIZEFROMFILE")
tpl_RMC_Draw := DllPrepareCall(hDll,DLL_STDCALL,"RMC_DRAW")
tpl_RMC_Paint := DllPrepareCall(hDll,DLL_STDCALL,"RMC_PAINT")
tpl_RMC_Reset := DllPrepareCall(hDll,DLL_STDCALL,"RMC_RESET")
ENDIF
RETURN(lReply)
FUNCTION RMC_CreateChartFromFile(nHwnd,nCtrId,nX,nY,nExportOnly,cRMCFile)
RETURN( DllExecuteCall(tpl_RMC_CreateChartFromFile,nHwnd,nCtrId,nX,nY,nExportOnly,cRMCFile) )
FUNCTION RMC_GetChartSizeFromFile(cRMCFile,nWidth,nHeight)
RETURN( DllExecuteCall(tpl_RMC_GetChartSizeFromFile,cRMCFile,@nWidth,@nHeight) )
FUNCTION RMC_Draw(nCtrId)
RETURN( DllExecuteCall(tpl_RMC_Draw,nCtrId) )
FUNCTION RMC_Paint(nCtrId)
RETURN( DllExecuteCall(tpl_RMC_Paint,nCtrId) )
FUNCTION RMC_Reset(nCtrId)
RETURN( DllExecuteCall(tpl_RMC_Reset,nCtrId) )
FUNCTION umsatz
LOCAL hWin := SetAppWindow():getHWND()
LOCAL nIx
LOCAL c := ""
FOR nIx = 1 TO 12
c += STR(nIx,2)+CRLF
NEXT nIx
MEMOWRIT("UMSATZ.CSV",c)
RMC_CreateChartFromFile(hWin,1,0,0,0,"simplebar.rmc") // "UMSATZ.RMC")
RMC_Draw(1)
RMC_Draw(1)
RETURN(.T.)
Nochmals Danke Thomas, dass du mir mit diesem Code gezeigt hast, dass es gehen muss ...
Im Moment bin ich dabei eine Classe _RMChart zu erstellen, welche die nötigen Funktionsaufrufe (ohne die Kurzform mit I am Ende - TYPE statt parameter) als Methoden abzubilden und die IDs intern zu verwalten.
Ich hoffe ich kann hier bald den funktionierenden Quellcode veröffentlichen ...
Zuletzt geändert von brandelh am Mi, 14. Jun 2006 17:56, insgesamt 1-mal geändert.
Gruß
Hubert
Hubert
Hi Hubert
hab ich dich richtig verstanden das der Quelltext bei dir so funktioniert?
Ich weiß nicht bei mir bekomme ich eine Absturz in RMC_CREATECHARTFROMFILE(33) bei der Operation dllExecuteCall mit der Beschreibung "Interne Datenstrukturen beschädigt".
Das würde mir so sagen, dass mindestens ein Parameter einen falschen Datentyp hat.
Na ja in dem Thread mit den Zugriff auf Dll's wurde ja auf
cDouble := F2BIN(nDouble)
dllfunction xyz( @cDouble )
hingewiesen, das hab ich auch schon so ein bisschen versucht bisher ohne Erfolg.
Liegt das nun an meiner xBase Version 1.70 oder bist du auch noch am basteln.
Gruß Rolf
hab ich dich richtig verstanden das der Quelltext bei dir so funktioniert?
Ich weiß nicht bei mir bekomme ich eine Absturz in RMC_CREATECHARTFROMFILE(33) bei der Operation dllExecuteCall mit der Beschreibung "Interne Datenstrukturen beschädigt".
Das würde mir so sagen, dass mindestens ein Parameter einen falschen Datentyp hat.
Na ja in dem Thread mit den Zugriff auf Dll's wurde ja auf
cDouble := F2BIN(nDouble)
dllfunction xyz( @cDouble )
hingewiesen, das hab ich auch schon so ein bisschen versucht bisher ohne Erfolg.
Liegt das nun an meiner xBase Version 1.70 oder bist du auch noch am basteln.
Gruß Rolf
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Erste Testversion der RMChart-Klasse
Hallo,
die Anwort auf diesen Thread ist scheinbar nicht möglich, hier ist eine
Lösung des RMChart Problemes in Xbase++ 1.90 ActiveX:
Lösung mit AxtiveX
dennoch werde ich meine DLL-Classe weiterentwickeln, denn ActiveX geht nicht immer. Für 1.90 Anwender die ActiveX verwenden können dürte dies aber auf jeden Fall besser sein, denn das Refresh(Repaint)-Verhalten gibt bei meiner DLL Lösung noch Probleme auf.
Die DLL-Version ist fast fertig. Man kann an die KlassenMethoden direkt Xbase++ Arrays mit den Werten übergeben, die Klasse formt dies dann intern um und gibt ein C-Double-Array inkl. Anzahl der Elemente weiter.
Die endgültige Versionen werde ich als ZIP auf meiner Homepage unterbringen, und von hier bzw. der Wissensbasis verlinken.
die Anwort auf diesen Thread ist scheinbar nicht möglich, hier ist eine
Lösung des RMChart Problemes in Xbase++ 1.90 ActiveX:
Lösung mit AxtiveX
dennoch werde ich meine DLL-Classe weiterentwickeln, denn ActiveX geht nicht immer. Für 1.90 Anwender die ActiveX verwenden können dürte dies aber auf jeden Fall besser sein, denn das Refresh(Repaint)-Verhalten gibt bei meiner DLL Lösung noch Probleme auf.
Die DLL-Version ist fast fertig. Man kann an die KlassenMethoden direkt Xbase++ Arrays mit den Werten übergeben, die Klasse formt dies dann intern um und gibt ein C-Double-Array inkl. Anzahl der Elemente weiter.
Die endgültige Versionen werde ich als ZIP auf meiner Homepage unterbringen, und von hier bzw. der Wissensbasis verlinken.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Fr, 23. Sep 2005 16:07
- Wohnort: Bad Oldesloe
- Kontaktdaten:
Hallo Hubert.
Gerade habe ich mich ein wenig mit Deiner HB_RMChart Klasse beschäftigt und kann nur
sagen : „ Super !!!“
Im Programmbeispiel „NEUGRAFIK.PRG“ ist mir aufgefallen, das mit einem Mausklick auf die
Grafik das Programm keine Rückmeldung mehr liefert.
Hast Du vielleicht eine Idee woran das liegen könnte ?
Gruß
Thomas
Gerade habe ich mich ein wenig mit Deiner HB_RMChart Klasse beschäftigt und kann nur
sagen : „ Super !!!“
Im Programmbeispiel „NEUGRAFIK.PRG“ ist mir aufgefallen, das mit einem Mausklick auf die
Grafik das Programm keine Rückmeldung mehr liefert.
Hast Du vielleicht eine Idee woran das liegen könnte ?
Gruß
Thomas
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo Thomas,
das habe ich in der Liesmich.txt beschrieben.
RMChart verarbeitet selbst die Mausklicks und gibt diese nicht an Xbase++ weiter. Mal sehen ob Rainer das noch ändert. In PowerBasic kann man callback Routinen schreiben, welche dann von RMchart aufgerufen werden, bei Xbase++ soll sowas aber nicht funktionieren. Ich denke am besten würde Rainer die Mausabfrage per Parameter abschaltbar machen.
Bis dahin rate ich zur versteckten Erzeugung eines JPG und Anzeige im XbpBitmap.
das habe ich in der Liesmich.txt beschrieben.
RMChart verarbeitet selbst die Mausklicks und gibt diese nicht an Xbase++ weiter. Mal sehen ob Rainer das noch ändert. In PowerBasic kann man callback Routinen schreiben, welche dann von RMchart aufgerufen werden, bei Xbase++ soll sowas aber nicht funktionieren. Ich denke am besten würde Rainer die Mausabfrage per Parameter abschaltbar machen.
Bis dahin rate ich zur versteckten Erzeugung eines JPG und Anzeige im XbpBitmap.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 160
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
Chart Drucken
Hallo.
Ich habe mit rmchart und ActiveX control ein paar schöne Statistiken auf dem Monitor.
Leider kann ich diese nicht drucken.
Ich erzeuge ein Fenster oForm und übergebe die Drawing Area .
oControl := XbpActiveXControl():new( oForm:drawingArea )
oControl:CLSID := "rmchart.rmchartx"
oControl:create( ,, {20,40},{800,600} )
Soweit so gut.
Zum Drucken wollte ich nun statt der drawingArea vom xbpdialog (oFrom) ein Presspace vom Drucker übergeben. Printerobject anlegen.
oPrinterPS:create( oDC )
oControl := XbpActiveXControl():new( oPrinterPS )
Nun erhalte ich aber einen Fehler beim Erzeugen von oControl.
Wie kann ich die mit rmchart erzeugte Statistik wenn möglich auf
einem Farbdrucker ausgeben.
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
-
- Rekursionen-Architekt
- Beiträge: 160
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
Drucken mit rmchart
Hallo.
Ich habe die Sache von der falschen Seite angegangen.
Mit oControl:draw2file und draw2printer geht es natürlich recht einfach.
Ein Blick in die Doku und die Lösung war da.
Sorry
Bernd
Ich habe die Sache von der falschen Seite angegangen.
Mit oControl:draw2file und draw2printer geht es natürlich recht einfach.
Ein Blick in die Doku und die Lösung war da.
Sorry
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
-
- Rekursionen-Architekt
- Beiträge: 160
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
Nur ein Teilerfolg
Hallo zusammen.
Das mit dem Drucken von rmchart geht auf den Standarddrucker.
Aber auf einen ausgewählten Drucker geht es (noch) nicht.
In der Doku von rmchart steht, dass man einfach den Handle für den Drucker übergeben muss. Also hole ich den Wert und übergebe diesen an rmchart. Allerdings druckt doch nur der Standardducker.
Code: Alles auswählen
cMyDrucker := "EPSON Stylus C86 Series" // fDruckAuswahl()
oDC := XbpPrinter():new()
oDC:Create(cMyDrucker)
aForms = oDC:forms()
oDC:setupDialog()
nhDC := oDC:getHDC()
msgbox(str(nhDC))
oControl:draw2Printer(nhDC)
oForm:destroy()
Für nHDC erhalte ich aber immer einen anderen numerischen Wert 18941707 oder beim nächsten Aufruf: 220268302.
Gedruckt wird aber immer auf dem Standarddrucker.
Irgend eine Idee wo der Fehler liegt?
Benötige ich hier BAP für eine Konvertierung?
Auszug aus der Doku.
control.Draw2Printer([nPrinterDC], [nLeft], [nTop], [nWidth], [nHeight], [nFileType]))
Purpose Sends a chart to a printer
Parameter
nPrinterDC (Long) A valid printer DC. If omitted or 0: the default printer is used.
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
- Martin Altmann
- Foren-Administrator
- Beiträge: 16552
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Version 4.0
Hallo allerseits.
Rainer hat mittlerweile die Version 4.0 fertiggestellt - einige neue schöne Dinge sind hinzugekommen...
Ich habe es mir aber noch nicht angeschaut - werde es wohl auch vor der DevCon nicht mehr schaffen...
Viele Grüße,
Martin
Rainer hat mittlerweile die Version 4.0 fertiggestellt - einige neue schöne Dinge sind hinzugekommen...
Ich habe es mir aber noch nicht angeschaut - werde es wohl auch vor der DevCon nicht mehr schaffen...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.