1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Cawa

Beiträge von Cawa

  • GDI DrawLine auf PDF

    • Cawa
    • 2. Januar 2020 um 20:40

    Hallo Sunlight

    …und ob och deine Kritik ernst nehme… Ich bin sogar froh darüber… :saint:

    Habe mir vor ca 10 Jahren AutoIt selbst beigebracht und damit paar Bots und kleine Programme geschrieben… Bei GDI hab ich immer aufgehört… Bis heute bin ich absoluter Anfänger.

    Die letzten 5 Jahre habe ich mit AutoIt kaum Kontakt gehabt und jetzt brauch ich für die Arbeit mal ein „größeres“ Programm. AutoIt hat sich die letzten Jahre aber sehr verändert. Damals hatte ich für Bots ganze Exceltabellen verwaltet… heut bekomm ich kein Wert mehr ausgelesen. Meine alten Skripte bringen nix mehr… ;(


    Aber jetzt zu dein Skript 2 Fragen:

    $gdiBrushBg - (linie 20) - ?BrushBackGround? -> Was ist das?

    Habe _GDIPlus_GraphicsFillRect($buffer, 0, 0, $Gdi_x2, $Gdi_y2, $Bitmap ) versucht, wird aber alles schwarz.

    GdiDrawGrid() und GdiDrawMapObjects() hab ich nirgendwo gefunden. Wo find ich diese Befehle?

    Aktuell sieht es so aus bei mir:

    Unbenannt2.jpg

    BugFix : Ich nehme alle Schuld auf mich: Wenn man schon einen Screenshot macht und ihn bearbeitet, sollte man ihn nicht vergessen mit hochzuladen…

    Dies sind die „Kurven“ von den ich gesprochen hatte. Die dicken Balken oben, unten und links sind von mir geschwärz worden.

    Unbenannt.jpg

  • GDI DrawLine auf PDF

    • Cawa
    • 28. Dezember 2019 um 14:07

    Hallo

    Mein Name ist Cawa, ich beschäftige mich jetzt schon seit paar Jahren mit AutoIt, habe aber nie große Programme geschrieben. Die meisten waren Kleinstprogramme, die mit Google, deutschen u. englischen Forum „durchgemogelt“ wurden… Haben aber (irgendwann) funtioniert…!

    Mein erster Post an euch ist mein erster großer Stolperstein…

    Ich bin gerade dabei eine Diagrammauswertung zumachen.

    Einige dieser Diagramme sind Temperatur/Zeit-Kurvendiagramme die in PDF gespeichert vor mir liegen. Um diese Kurven auszulesen dachte ich mir: ich setze die PDF als Hintergrund einer GUI, einen Slider unter diese PDF, richte ihn an Kurvenanfang u –ende aus und den Sliderwert nutz ich zur Verhältnisgleichung um die Uhrzeit zu berechnen und in Excel zu speichern… Programm funktioniert bis dahin (kleine Bauphasen sind noch).

    Aber um den Slider besser ablesen zu können will ich jetzt eine senkrechte, mit den Slider bewegliche Linie auf diese PDF malen und somit mein erstes GDI-Projekt starten…

    Linie malen funktioniert, malt aber einen ScannerCode auf die PDF…

    Ich hab „versucht“ ein handle von der GUI, von der File, vom Obj und von Active_X zu bekommen, kein Erfolg…

    Hab es mit _GDIPlus_Bitmap, Image und Graphic versucht, entweder lösch ich die komplette GUI und seh nur schwarzes Flackern oder die Linie ist nicht zu sehen.

    Meine Denkweise wie ich GDI bis jetzt verstanden habe ist:

    - Man nehme ein Bild ($GUI) und mache eine Kopie ($HGraphic)

    - Diese Kopie kopieren wir als Sicherheitskopie in $Buffer

    do

    Malen $Buffer auf die GUI und malen den Strich auf Position

    Until…

    Ich brächte an der Stelle mal bitte einen kleinen Denkanstoß für einen GDI (und auch Object) Neuling… Wo liegt hier mein Denkfehler

    C
    #include <GUIConstants.au3>
    #include <SliderConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>
    #include <Date.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    #include <String.au3>
    #include <excel.au3>
    #include "DTC.au3"
    
    
    Opt("GUIOnEventMode");, 1)
    _GDIPlus_Startup()
    Local $hPen
    
     ; Get file to display
        Local $sFile = FileOpenDialog("Choose PDF", "M:\Documents", "PDF Files(*.pdf)", 3) ; put your own start folder here
        If @error Then
            MsgBox(0, "Error", "No file selected")
            Exit
        EndIf
    
    
    
    $DeskH = @DesktopHeight - 100
    $DeskW = @DesktopWidth - 100
    
    Local $oPDF = ObjCreate("AcroPDF.PDF.1");
        $oPDF.src = $sFile
    
    
    Local $Form1 = GUICreate("AutoIt PDF Reader", @DesktopWidth, @DesktopHeight,1,1)
        Local $GUI_ActiveX = GUICtrlCreateObj($oPDF, 200, 10, @DesktopWidth - 200, @DesktopHeight-100)
        ;GUICtrlSetStyle($GUI_ActiveX, $WS_VISIBLE)
        GUICtrlSetResizing($GUI_ActiveX, $GUI_DOCKAUTO) ; Auto Resize Object
       GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEButton")
    
    
    
    
    $GeladeneDateiName =GUICtrlCreateLabel("...",10,10,155,25)    ; geladene Datei...
    $LadeButton =GUICtrlCreateButton("...",165,10, 25,25)  ;Datei laden
    
    GUICtrlCreateLabel("A - Nr.",10,70,80,25)
    $ANr = GUICtrlCreateLabel("...",90,70,100,25)    ;StringAnfang
    
    GUICtrlCreateLabel("A-Name (Excel)",10,100,80,25)
    $AName = GUICtrlCreateLabel("...",90,100,100,25)    ;geladen aus Excel
    
    GUICtrlCreateLabel("A-Charge (Excel)",10,130,80,25)
    $ACharge = GUICtrlCreateLabel("...",90,130,100,25)        ;geladen aus Excel
    
    GUICtrlCreateLabel("Start Anlage",10,190,80,25)
    $StartAnlageExcel = GUICtrlCreateLabel("...",90,190,100,25)        ;geladen aus Excel
    
    GUICtrlCreateLabel("Ende Anlage",10,220,80,25)
    $EndeAnlageExcel = GUICtrlCreateLabel("...",90,220,100,25)        ;geladen aus Excel -> ausgabe für Input StartDatum
    
    GUICtrlCreateLabel("Temperatur",10,250,80,25)
    $ATempExcel = GUICtrlCreateLabel("...",90,250,50,25)            ;geladen aus Excel
    GUICtrlCreateLabel("°C",140,250,50,25)
    
    $ProzLabel = GUICtrlCreateLabel("...",10,280,80,25)            ;Härten/Vorwärmen... H/V... Phasen
    $ProzLabel2 =GUICtrlCreateLabel("...",90,280,100,25)        ;StringEnde (später aufteilung auf verschiedene Phasen)
    
    
    GUICtrlCreateLabel("Start Datum",10,340,75,25)
    $InputStartDatum = GUICtrlCreateDate("2019/12/26",90, 340, 100, 25, $DTS_SHORTDATEFORMAT)    ;ManuelleEingabe Datum -> Datum aus "Ende Anlage"
    GUICtrlCreateLabel("Start Uhrzeit",10,370,75,25)
    $InputStartZeit = GUICtrlCreateInput("12:10:00",90, 370, 100, 25,$DTS_TIMEFORMAT)        ;ManuelleEingabe Zeit
     $LabelStartTime = GUICtrlCreateLabel("",100,400,90,25)    ; ->DateTimeFormat
    
    
    Local $BStart = GUICtrlCreateButton("Start",    10,430,75,25)        ;Sliderwert als DatumUhrzeit in Label eintragen
    Local $LabelZStart = GUICtrlCreateLabel("",90,430,75,25)
    Local $BHaltezeit = GUICtrlCreateButton("Haltezeit",10,460,75,25)
    Local $LabelZHaltezeit = GUICtrlCreateLabel("",90,460,75,25)
    Local $BProzEnde = GUICtrlCreateButton("ProzessEnde",10,490,75,25)
    Local $LabelZProzEnde = GUICtrlCreateLabel("",90,490,75,25)
    Local $B80Grad = GUICtrlCreateButton("80°C",        10,520,75,25)
    Local $LabelZ80Grad = GUICtrlCreateLabel("",90,520,75,25)
    Local $BEnde = GUICtrlCreateButton("Ende",        10,550,75,25)
    Local $LabelZEnde = GUICtrlCreateLabel("",90,550,75,25)
    
    GUICtrlCreateLabel("Ende Datum",10,610,55,25)        ;;ManuelleEingabe Datum
    $ButDatLinks = GUICtrlCreateButton("-1",65,610,25,25)
    $InputEndeDatum = GUICtrlCreateDate("",90, 610, 75, 25, $DTS_SHORTDATEFORMAT)
    $ButDatRechts = GUICtrlCreateButton("+1",165,610,25,25)
    
    GUICtrlCreateLabel("Ende Zeit",10,640,55,25)        ;ManuelleEingabe Zeit
    $ButZeitLinks = GUICtrlCreateButton("-1h",65,640,25,25)
    $InputEndeZeit = GUICtrlCreateInput("08:10:00",90, 640, 75, 25,$DTS_TIMEFORMAT)
    $ButZeitRechts = GUICtrlCreateButton("+1h",165,640,25,25)
    
    GUICtrlCreateLabel("Gesamtzeit",10,700,80,25)
    $LabelGesamtzeitStunden = GUICtrlCreateLabel("",90,700,75,25)    ;errechnet Ende-Start = 44h"
    
    Local $Speichern = GUICtrlCreateButton("Speichern",10,760,180,30)    ;trägt Label 1-5 in Excel ein...
    ;GUICtrlSetOnEvent($Speichern, "Test")
    
    
    
    
    
    Local $sFile
    Local $LabelTest = GUICtrlCreateLabel("",10,840,180,30)
    Local $sOutZMStart
    Local $sOutZMEnde
    Local $SliderPosInTime
    Local $DiffDate
    
    ;.....SLIDER.....
    
    $ZeitFaktor = guictrlread($LabelGesamtzeitStunden)     ;44h * 60min =
    $SliderAbstanRandLinks = 475
    $SlDeskW = @DesktopWidth - $SliderAbstanRandLinks -203                                ;breiteSlider
    Local $sliderStart = GUICtrlCreateSlider($SliderAbstanRandLinks,$DeskH,$SlDeskW,60)
     GUICtrlSetLimit($sliderStart, $ZeitFaktor, 0)
    
    
    
    
    
    Local $hGraphic
    Local $hGraphicsBMP
    Local $hBuffer
    ;------Draw line----------------------------------------------------------------------------------------
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
    Local $hPen = _GDIPlus_PenCreate()
    Local $hbuffer = _GDIPlus_ImageGetGraphicsContext($hGraphic)
    
    
    AnzeigeLaden()
    ZeitAnzeige()
    GUISetState(@SW_SHOW,$Form1)
    ;----------------------------------------------------------------------------------
    
    While 1
    $msg = GUIGetMsg()
    Switch $msg
       Case $msg = $sliderStart
          Sliderline()
       Case $GUI_EVENT_CLOSE
          Exit
          closeButton()
       Case $msg = $Speichern
          MsgBox(0,"","")
          AnzeigeLaden()
       Case $LadeButton
          load()
       Case $msg = $BStart
          GUICtrlSetData($LabelZStart,GUICtrlRead($LabelTest))
       Case $msg = $BHaltezeit
          GUICtrlSetData($LabelZHaltezeit,GUICtrlRead($LabelTest))
       Case $msg = $BProzEnde
          GUICtrlSetData($LabelZProzEnde,GUICtrlRead($LabelTest))
       Case $msg = $B80Grad
          GUICtrlSetData($LabelZ80Grad,GUICtrlRead($LabelTest))
       Case $msg = $BEnde
          GUICtrlSetData($LabelZEnde,GUICtrlRead($LabelTest))
       Case $msg = $InputStartDatum Or $InputStartZeit Or $InputEndeDatum Or $InputEndeZeit
          ZeitAnzeige()
    
    
    EndSwitch
    Sleep(10)
    
    
    
    WEnd
    
    
    
    
    
    
    
    func ZeitAnzeige()
    
       $ZMStart = guictrlread($InputStartDatum) &" "& GUICtrlRead($InputStartZeit)
       $ZMEnde = guictrlread($InputEndeDatum) &" "& GUICtrlRead($InputEndeZeit)
    
       Local $sOutZMStart = _Date_Time_Convert($ZMStart, "dd/MM/yyyy HH:mm:ss", "yyyy/MM/dd HH:mm:ss")
       Local $sOutZMEnde = _Date_Time_Convert($ZMEnde, "dd/MM/yyyy HH:mm:ss", "yyyy/MM/dd HH:mm:ss")
    
       GUICtrlSetData($LabelStartTime,$sOutZMStart)
       Local $DiffDate = _DateDiff('n', $sOutZMStart, $sOutZMEnde)
    
       GUICtrlSetData($LabelGesamtzeitStunden,$DiffDate )
       GUICtrlSetLimit($sliderStart, $DiffDate, 0)
    EndFunc
    
    
    func Test()
    
    EndFunc
    
    func load()
        Local $sFile = FileOpenDialog("Choose PDF", "M:\Documents", "PDF Files(*.pdf)", 3) ; put your own start folder here
        If @error Then
            MsgBox(0, "Error", "No file selected")
            Exit
        EndIf
    
       Local $oPDF = ObjCreate("AcroPDF.PDF.1");
        $oPDF.src = $sFile
    
       Local $GUI_ActiveX = GUICtrlCreateObj($oPDF, 200, 10, @DesktopWidth - 200, @DesktopHeight-100)
        GUICtrlSetStyle($GUI_ActiveX, $WS_VISIBLE)
        GUICtrlSetResizing($GUI_ActiveX, $GUI_DOCKAUTO) ; Auto Resize Object
    
    
       AnzeigeLaden()
       ZeitAnzeige()
    EndFunc
    
    
    Func AnzeigeLaden()
       $arStrFilePfad = StringSplit($sFile,"\")
       $StrSplitPfadName = StringSplit($arStrFilePfad[7], " ")
    
      ;_ArrayDisplay($StrSplitPfadName)
    
       GUICtrlSetData($GeladeneDateiName,$arStrFilePfad[7])   ;geladene datei name
       GUICtrlSetData($ANr,$StrSplitPfadName[1])  ; Anzeige A-Nummer
    
    
      If $StrSplitPfadName[UBound($StrSplitPfadName) -1] = "H.pdf" Then   ; Anzeige Härten/Vorwärmen
          GUICtrlSetData($ProzLabel, "H")
          GUICtrlSetData($ProzLabel2, "Härten")
       ElseIf $StrSplitPfadName[UBound($StrSplitPfadName) -1] = "V.pdf" Then
          GUICtrlSetData($ProzLabel, "V")
          GUICtrlSetData($ProzLabel2, "Vorwärmen")
       EndIf
    
    
    
    
    EndFunc
    
    
    func Sliderline()
    
       $state = GUICtrlRead($sliderStart) ;500min
       $ZeitFaktor = guictrlread($LabelGesamtzeitStunden)
    
       $xWert = 10
       $neuLi = 475 + $xWert + 1
       $neuRe = 203 + $xWert + 6  ; Feinausrichtung Slider
       $xProzent = ($state *100)/$ZeitFaktor
       $xPos = ($xProzent * (@DesktopWidth - $neuLi - $neuRe))/100
       $posX = $xPos + $neuLi        ;Position Feinausrichtung Linie
    
         $HLinie = @DesktopHeight - 100
    
    ;------- Zeitübergabe ------------------------------------------------------
    
    Local $SliderPosInTime =  _DateAdd('n', $state, GUICtrlRead($LabelStartTime))
    GUICtrlSetData($LabelTest,$SliderPosInTime)
    
    ;------Draw line----------------------------------------------------------------------------------------
    ;Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
    ;Local $hPen = _GDIPlus_PenCreate()
    ;_GDIPlus_GraphicsClear ( $hGraphic)
    
         ;_GDIPlus_GraphicsClear($hGraphic)
        ;$hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
        Local $hbuffer = _GDIPlus_ImageGetGraphicsContext($hGraphic)
        _GDIPlus_GraphicsDrawImageRect($hGraphic,$hbuffer, 200, 10, @DesktopWidth - 200, @DesktopHeight-100)
       $hPen = _GDIPlus_PenCreate()
       _GDIPlus_GraphicsDrawLine($hGraphic, $posX, 150, $posX, $HLinie, $hPen)
    Sleep(200)
    
    
    EndFunc
    
    Func CLOSEButton()
       _GDIPlus_BitmapDispose($hGraphicsBMP)
       _GDIPlus_GraphicsDispose($hBuffer)
       _GDIPlus_GraphicsDispose($hGraphic)
       _GDIPlus_Shutdown()
    
          Exit
    EndFunc
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™