Du musst auch den Rückgabe Wert von StringReplace() speichern, sonst passiert nichts.
Z.B: $Replace = StringReplace($Replace, ";DISCONNECT;" & $i & ";", ";DISCONNECT_old;" & $i & ";")
Gruß,
UEZ
Du musst auch den Rückgabe Wert von StringReplace() speichern, sonst passiert nichts.
Z.B: $Replace = StringReplace($Replace, ";DISCONNECT;" & $i & ";", ";DISCONNECT_old;" & $i & ";")
Gruß,
UEZ
Dann einfach den Menü Eintrag disablen. ![]()
Gruß,
UEZ
Ich bekomme ein FM, wenn ich "Configuration -> Fanart" selektiere -> "An Error occured" und das Programm wird beendet.
Gruß,
UEZ
Interessanter Projekt. Ich werde es mir näher anschauen...
Damke und Gruß,
UEZ
Kleines Update: einige Fehler behoben.
Gruß,
UEZ
Hier mein Vorschlag:
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <File.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
Global $g_hGUI, $g_hGraphics, $g_hBmp_Buffer, $g_hGfx_Buffer, $g_hImage
Global $g_iMouseX, $g_iMouseY
Local $hGUI, $hGraphic, $hPen,$aArray,$g_hBmp_Buffer,$g_hGraphics
Local $g_iMouseX,$g_iMouseY,$lParam, $fY1, $fY2, $fY = 180.0
$hGUI = GUICreate("GDI+", 1000, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
If Not _FileReadToArray("a2.din", $aArray, 0) Then
MsgBox($MB_SYSTEMMODAL, "", "There was an error reading the file. @error: " & @error) ; An error occurred reading the current script file.
EndIf
$hPen = _GDIPlus_PenCreate(0xFF101060)
For $x = 1 To UBound($aArray)-1
If StringInStr($aArray[$x],"G00 X") Then
;~ _GDIPlus_GraphicsDrawLine($hGraphic, StringTrimLeft($spl[2],1), StringTrimLeft($spl[3],1), StringTrimLeft($spl2[2],1), StringTrimLeft($spl2[3],1), $hPen)
ElseIf StringInStr($aArray[$x],"G01 X") Then
$spl = StringSplit($aArray[$x]," ")
$spl2 = StringSplit($aArray[$x-1]," ")
If $spl[0] >= 3 and $spl2[0] >= 3 Then
IF StringTrimLeft($spl2[2],1) = "-0.1" Then
Else
$fY1 = -StringTrimLeft($spl[3],1) + 2 * $fY ;y1 Punkt an der Koordinate fY spiegeln
$fY2 = -StringTrimLeft($spl2[3],1) + 2 * $fY ;y2 Punkt an der Koordinate fY spiegeln
_GDIPlus_GraphicsDrawLine($hGraphic, StringTrimLeft($spl[2],1),$fY1, StringTrimLeft($spl2[2],1), $fY2, $hPen)
EndIf
EndIf
EndIf
Next
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Clean up resources
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Gruß,
UEZ
Ist mir nie aufgefallen, aber du hast recht. Danke, habe die Zeile nach oben verschoben. ![]()
_WinAPI_AnimateWindow() hat manchmal komische Seiteneffekte...
Ich hoffe, dass der Code einigermaßen lesbar und verständlich ist, da ich kaum kommentiere. ![]()
Gruß,
UEZ
Kannst du nicht die Ini anders speichern, z.B. die Trennung der Zellen nicht Komma ist, sondern irgend ein anderes sinnvolles Zeichen?
So wird das ziemlich kompliziert....
Gruß,
UEZ
Schaue mal, ob du damit was anfangen kannst:
#include <Array.au3>
$String = '"testfenster, test, test (abcd)", 10, 10, iniread("test.ini","test","test","test"), "test"' & @CRLF
$aResult = StringSplitW(StringRegExpReplace($String, '(",")', "|"), ",")
_ArrayDisplay($aResult)
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ========================================================================================================================================
; Name .................: StringSplitW()
; Description ..........: Splits a string into columns instead of rows as it is done by SplitString(), like a csv file to a 2d array ![]()
; Syntax ...............: StringSplitW($sString, $sDelimiter, $iWidthLen)
; Parameters ...........: $sString - string to split
; $sDelimiter - [optional] the delimter how to split the string
; $iWidthLen - [optional] length of the row (amount of columns - default is 256)
; Return values .......: Success - 2d array
; Error 1 - either $sString or $delimter is not set
; Error 2 - array width exceeded
; Error 3 - error splitting string
;
; Version .............: v0.95 build 2014-06-06 beta
; Author ..............: UEZ
; Modified ............:
; Remarks .............: RegEx take from http://stackoverflow.com/questions/4476…r-within-quotes
; Related .............: StringSplit, StringReplace, StringRegExpReplace, StringLen, StringStripCR
; ===================================================================================================================================================
Func StringSplitW($sString, $sDelimiter = ";", $sQuotationMark = '"', $sDummy = "¦", $iWidthLen = 256)
If $sString = "" Or $sDelimiter = "" Then Return SetError(1, 0, 0)
Local $chk, $iWidth, $i, $j, $k, $iLen, $iMax = 1, $iMaxWidth
Local $aPos[1], $l = 0
Local $aSplit = StringSplit(StringStripCR($sString), @LF)
If @error Then Return SetError(3, 0, 0)
Local $aVertical[$aSplit[0]][$iWidthLen], $iDelimiterLen = StringLen($sDelimiter) - 1, $sLine
For $k = 1 To $aSplit[0]
$iLen = StringLen($aSplit[$k])
If $iLen > 1 Then
$sLine = StringRegExpReplace($aSplit[$k], '(?m)' & $sDelimiter & '(?=[^' & $sQuotationMark & ']*' & $sQuotationMark & '(?:[^' & $sQuotationMark & '\r\n]*' & $sQuotationMark & '[^' & $sQuotationMark & ']*' & $sQuotationMark & ')*[^' & $sQuotationMark & '\r\n]*$)', $sDummy)
$chk = StringReplace($sLine, $sDelimiter, $sDelimiter)
$iWidth = @extended
If $iWidth > $iWidthLen Then Return SetError(2, 0, 0)
If $iWidth >= $iMax Then $iMax = $iWidth + 1
Switch $iWidth
Case 0
$aVertical[$l][0] = $sLine
Case Else
Dim $aPos[$iWidth * 2 + 2]
$j = 1
$aPos[0] = 1
For $i = 0 To $iWidth - 1
$aPos[$j] = StringInStr($sLine, $sDelimiter, 0, $i + 1) - 1
$aPos[$j + 1] = $aPos[$j] + 2 + $iDelimiterLen
$j += 2
Next
$aPos[UBound($aPos) - 1] = StringLen($sLine)
$j = 0
For $i = 0 To UBound($aPos) - 1 Step 2
$aVertical[$l][$j] = StringMid(StringReplace($sLine, $sDummy, $sDelimiter), $aPos[$i], $aPos[$i + 1] - $aPos[$i] + 1)
$j += 1
Next
EndSwitch
$l += 1
EndIf
Next
ReDim $aVertical[$l][$iMax]
Return $aVertical
EndFunc
Das Array wird als 2D Array erstellt.
Gruß,
UEZ
Läuft solange, bis man ESC drückt und die Musik läuft ca. 3:45 Minuten bis sie wieder von vorne anfängt.
Eigentlich wollte ich was in D2D machen, aber ist wieder mal was in GDI+ geworden.
Gruß,
UEZ
Habt ihr mal das About Intro getestet? -> AutoIt Label oben links anklicken und About selektieren.
Ist die Geschwindigkeit ok oder eher eine "Diashow"?
DANKE für's Testen! ![]()
Gruß,
UEZ
Ich weiß, dass StringRegExpReplace anders arbeitet als StringRegExp, wie es BugFix bereits gesagt hat. Man muss bei StringRegExpReplace anders, und in meinen Augen ist das schwieriger als StringRegExp, denken.
Gruß,
UEZ
Vielen Dank für das Feedback!
Habe jetzt den Code aktualisiert! Bitte testen, ob's noch richtig funzt! Wenn nicht, bitte hier melden!
VIELEN DANK.
Gruß,
UEZ
Ich hatte sowas mal gebastelt in GDI+: Speedometer
Du kannst den Code als Ideengeber nutzen und eine UDF daraus basteln, wenn du willst.
Gruß,
UEZ
@AspirinJunkie, Andy: das habe ich nicht so verstanden und wie gesagt, geht es mir nicht immer darum, den einfachsten Weg zu nehmen, sondern sich mit Themen zu beschäfftigen, die man eigentlicht selten benutzt, um seinen Horizont zu erweitern - war einfach eine nette Übung sich mit allen nicht GDI+ Dingen zu befassen.
Ich habe auch für gewisse Zwecke auch Einzeiler geschrieben, wo einfach eine GUI nicht passt, z.B. Robocopy Aufgaben zwecks Datenmigrationen.
Mein Job hat leider kaum noch was mit "Technik" zu tun, so dass ich mir immer wieder was einfallen lassen muss, um noch ein bisschen am Ball zu bleiben.
Gruß,
UEZ
Mir ging es nicht darum einen Einzeiler zu schreiben, sondern mich mit den verschiedenen Programmierpraktiken auseinander zu setzen. Ein Einzeiler mag zwar seinen Zweck erfüllen, aber das ist mir zu "langweilig". ![]()
Gruß,
UEZ
DIESES PROJEKT IST EINGESTELLT!
Hier ein kleines Tool zum Synchronisieren der Sysinternal Tools.
[Blockierte Grafik: https://www.autoitscript.com/forum/uploads/monthly_11_2014/post-29844-0-88399400-1415371664.png]
[Blockierte Grafik: https://www.autoitscript.com/forum/uploads/monthly_11_2014/post-29844-0-79721500-1416166438.jpg][Blockierte Grafik: https://www.autoitscript.com/forum/uploads/monthly_11_2014/post-29844-0-66857000-1416166886.jpg]
Source Code: AutoIt Sysinternal Tools Synchronizer v0.99.6 build 2020-09-23 beta.7z
Nur die Exe: @MediaFire
AutoIt version 3.3.13.20 oder höher wird benötigt!
Das AutoIt Label oben links anklicken, um das Kontext Menü zu aktivieren!
Der Rest der Bedienung sollte fast selbsterklärend sein.
Gruß,
UEZ
Hmm, anscheinend mag GDI+ nicht den Font, denn mit diesem Font kann _GDIPlus_FontFamilyCreate() nicht erstellt werden. Ich habe den Code angepasst, so dass bei nicht unterstützten Fonts es nicht zum Absturz kommt.
Warum dieser Font nicht unterstützt wird, weiß ich nicht. Aber, wenn du willst und das Prinzip verstanden hast, kann du auch ein alternative Messfunktion erstellen bzw. z.B. die von Melba23 nehmen.
Gruß,
UEZ
Welche Schriftart hast du genommen?
Gruß,
UEZ
Ich verstehe nicht, warum das umständlich oder schwer sein soll!
Ist doch im Prinzip sehr einfach gehalten.
Gruß,
UEZ