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
#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