Liniendiagramm

  • Hallo zusammen,
    ich bräuchte für eine Anwendung ein Liniendiagramm, da es in Autoit kein Standard-Controll gibt muss ich das selbst erstellen was ja nicht sonderlich schwer ist.
    Für mich besteht jetzt nur die Frage wie ich das Zeichne?!
    Würdet ihr dafür GDI+ verwenden, oder doch über GUI?

  • Ich würde RMChart verwenden, da gibt es eine DLL dazu: http://www.brothersoft.com/rmchart-download-35638.html
    Die DLL verwendet GDIPlus zum Zeichnen, aber vereinfacht das ganze erheblich ;)

    hey habe mal nach dem programm gesucht ^^.... auch gefunden ... aber wie verwendet man die jetzt?

    MFG chris :D

  • Ich übersetze heute mal das POWERBASIC-include (rmchar.inc) nach AutoIt. Kann aber nicht etwas dauern, ich muss jetzt erst mal nach Stuttgart...

  • So, das include ist soweit übersetzt, dass Säulendiagramme funktionieren:

    Beispiel
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.1.0 (beta)
    Author: Prog@ndy

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Beispiel für rmchart

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here
    #include<rmchart.au3>
    $hGUI = GUICreate("Chart Test", 700,500)
    _RMC_LoadDLL("..\rmchart.dll")

    [/autoit] [autoit][/autoit] [autoit]

    $ChartID = 2101
    _RMC_CreateChart($hGUI, $ChartID ,10,10,600,450,0,0,0,"","")

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_AddRegion($ChartID,5,5,-5,-5)

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_AddCaption($ChartID,1, "Ein Diagramm")
    _RMC_AddGrid($ChartID,1)
    _RMC_AddDataAxis($ChartID,1,$RMC_DATAAXISLEFT, 0, 0,11,8, 0 , 0 ,$RMC_LINESTYLEDOT,0,"","")
    _RMC_AddLabelAxis($ChartID,1,"Label 1*Label 2*Label 3*Label 4*Label 5", 1, 5, 0, 0, 0, 0, 0, $RMC_LINESTYLENONE,"")

    [/autoit] [autoit][/autoit] [autoit]

    Local $Values[5] = [ 34, 12.2, 55, 20, 9]
    $Struct = _RMC_DoubleArrayToStruct($Values)
    _RMC_AddBarSeries($ChartID, 1, $Struct, 5, $RMC_BARSINGLE, $RMC_COLUMN_3D_GRADIENT, True, 0x3333FF)

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_Draw($ChartID)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If GUIGetMsg()=-3 Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _RMC_DoubleArrayToStruct(Const ByRef $adValues)
    ; Prog@ndy
    Local $UBound = UBound($adValues)
    If $UBound=0 Then Return SetError(1,0,0)
    Local $tdValues = DllStructCreate("double[" & $UBound & "]")
    For $i = 1 To $UBound
    DllStructSetData($tdValues,1, $adValues[$i-1], $i)
    Next
    Return $tdValues
    EndFunc

    [/autoit]

    //Edit: Anhang entfernt, neue Version in Post #19

    Einmal editiert, zuletzt von progandy (23. Mai 2009 um 19:34)

  • Einfach nur genial @ pro@andy....

    Nur könnte man es nich noch etwas vereinfachen?
    Sodass man nur noch ne art des diagrammes per id z.b. auswählt und dann noch die daten in nem 2d Array oder so?

    MFG chris :D


    Fertige Version der SMART RMC ist in neuem Post ... [ gelöst ] RMC_Smart UDF ( Säulendiagramme )

  • warum geht folgender DLL-Aufruf nicht?

    [autoit]

    DllCall("rmchart.dll", "LONG", "RMC_CREATECHART", "HWND", $GUI, "LONG", $Id, "LONG", 10, "LONG", 10,"LONG", 600, "LONG", 450,)

    [/autoit]


    laut RMChart-Hilfe ist der Rest doch Optional, siehe hier:


    @progandy
    wie kommst du manchml auf DWord wenn doch in der Readme long steht?!

  • @oliverh: Die funktioniert ja immer noch ...
    @h0scHberT: Schau dir doch mal an, wie ich die optinalen Parameter gelöst habe ;) Beim DLLCall müssen sie immer angegeben sein, aber die DLL versteht den Wert 0 als nicht gegebenen Parameter. Ich habe genau diese Funktion RMC_CREATECHART doch auch in der UDF verwendet.

    DWORD und LONG haben die gleiche Zahl von Bytes und Farben sind immer positive Zahlen. Daher ist DWORD der bessere Datentyp.

    //Edit: Ich hab bisher 33/187 Funktionen, also etwa 18%

    3 Mal editiert, zuletzt von progandy (23. Mai 2009 um 14:32)

  • Servus...

    Also habe jetzt mal eine art SMART RM Chart au3 erstellt...
    Sie kann bis jetzt das hier....

    [Blockierte Grafik: http://img200.imageshack.us/img200/139/aufzeichneny.png
    Wobei es mit nur 4 UDF Aufrufen erstellt wird....
    dabei werden die Daten aus einem 2D array akzeptiert...
    die rmchart.dll habe ich als EmbeddedDLL eingebunden und wird somit auch nicht mehr benötigt...
    Files die benötigt werden sind im Anhang...

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Authors: chrisatack ( Basics by Prog@ndy )

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Beispiel für rmchart_smart

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here
    #include 'rmchart_smart.au3'

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Chart Test", 700,500)

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_Smart_StartUp()
    $hChart = _RMC_Smart_ChartCreate($hGUI,"Ein Test Diagramm",10,10,600,450)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $data[5][2]
    $data[0][0] = "Menschen"
    $data[0][1] = 90
    $data[1][0] = "Tiere"
    $data[1][1] = 12.5
    $data[2][0] = "Elefanten"
    $data[2][1] = 55
    $data[3][0] = "Mücken"
    $data[3][1] = 20
    $data[4][0] = "Affen"
    $data[4][1] = 9

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_Smart_ChartAdd2DArray($hChart,$data,0x00FF00)
    _RMC_Smart_ChartDraw($hChart)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If GUIGetMsg()=-3 Then Exit
    WEnd

    [/autoit]


    Fertige Version der SMART RMC ist in neuem Post ... [ gelöst ] RMC_Smart UDF ( Säulendiagramme )

    MFG chris :D

  • Es dauert aber noch ne Weile bis auch die ganzen RMC_Set... -Funktionen übersetzt sind ;)
    Bisher hab ich RMC_Add..., RMC_CO..., RMC_Create..., RMC_Draw... und RMC_Get... Insgesamt sind das etwa 36%, der Rest fehlt noch ;)

    hübsch ;) bin gespannt, was ihr noch alles aus der dll rausholen könnt...


    Schu dir mal die Beispiele aus dem Komplettpaket an (die .rmc-Dateien mit dem rmcdesigner.exe öffnen)

  • Ach so :P
    Inzwischen hab ich die Hälfte fertig.
    //Edit: jetzt sind es 66% 75% 80%

    3 Mal editiert, zuletzt von progandy (23. Mai 2009 um 18:46)

  • So, die Funktionen sind jetzt zu 97% übersetzt. Die restlichen sind denke ich unnötig ;)
    Ein Beispiel mit ein paar mehr Funktionen:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.1.0 (beta)
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here
    #include<rmchart.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Chart Test", 700,500)
    _RMC_LoadDLL("..\rmchart.dll")
    ;~ MsgBox(0, '', _RMC_GetVersion())
    $ChartID = 2101
    _RMC_CreateChart($hGUI, $ChartID ,10,10,600,450,0,0,0,"","",100)

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_AddRegion($ChartID,5,5,-5,-5)

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_AddCaption($ChartID,1, "Ein Diagramm")
    _RMC_AddGrid($ChartID,1)
    _RMC_AddDataAxis($ChartID,1,$RMC_DATAAXISLEFT, 0, 60,11,8, 0 , 0 ,$RMC_LINESTYLEDOT,0,"","")
    _RMC_AddLabelAxis($ChartID,1,"Label 1*Label 2*Label 3*Label 4*Label 5", 1, 5, 0, 0, 0, 0, 0, $RMC_LINESTYLENONE,"")

    [/autoit] [autoit][/autoit] [autoit]

    Local $Values[5] = [ 34, 12.2, 55, 20, 9]
    $Struct = _RMC_A2SDouble($Values)
    _RMC_AddBarSeries($ChartID, 1, $Struct, 5, $RMC_BARSINGLE, $RMC_COLUMN_3D_GRADIENT, True, 0x3333FF)

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_SetCustomToolTipText($ChartID,1,1,3,"TestText")
    _RMC_SetCtrlStyle($ChartID, $RMC_CTRLSTYLE3DLIGHT )

    [/autoit] [autoit][/autoit] [autoit]

    _RMC_Zoom($ChartID,$RMC_ZOOM_INTERNAL)
    _RMC_Draw($ChartID)

    [/autoit] [autoit][/autoit] [autoit]

    $btnWerte = GUICtrlCreateButton("Zufallswerte", 10, 465, 100, 30)
    $btnInfo = GUICtrlCreateButton("Infos", 120, 465, 100, 30)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(1000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btnWerte
    Local $Values[5] = [ Random(0,60), Random(0,60), Random(0,60), Random(0,60), Random(0,60)]
    $Struct = _RMC_A2SDouble($Values)
    _RMC_SetSeriesData($ChartID, 1, 1, $Struct, 5)
    _RMC_SetCtrlBGColor($ChartID, Random(0x555555,0xCCCCCC,1) )
    _RMC_Draw($ChartID)
    Case $btnInfo
    MsgBox(0, 'Zoomen des Diagramms', ">> Zoom: Linke Muastaste drücken, REchteckaufziehen, loslassen" & @CRLF & ">> Letzte Zoomeinstellung: rechte Maustaste" & @CRLF & ">> Nächste Zoomeinstellung: SHIFT + rechte Maustaste" & @CRLF & ">> Standardeinstellung: mittlere Maustaste")
    EndSwitch
    WEnd

    [/autoit]

    chrisatack: Mach ruhig mit deiner RMC_Smart weiter ;)