Also den Select-Teil einfach so umschreiben:
[autoit]If $test1 = 1 Then HotKeySet( $hotkey1 , "_laufwerk")
If $test2 = 1 Then HotKeySet( $hotkey2 , "_ip")
Übrigens hast du Checkbox2 und Checkbox3 beim erstellen vertauscht.
Also den Select-Teil einfach so umschreiben:
[autoit]If $test1 = 1 Then HotKeySet( $hotkey1 , "_laufwerk")
If $test2 = 1 Then HotKeySet( $hotkey2 , "_ip")
Übrigens hast du Checkbox2 und Checkbox3 beim erstellen vertauscht.
-welches registermsg fehlt noch? - zeichnet nicht neu nach fenster überlappung
Bei mir schon
[autoit]-zeichnet farbe nicht drüber, sondern "vermischt" mit der vorherigen, wie kann ich das ändern?
_GDIPlus_GraphicsClear($hGraphic,0xFFF0F0F0)
[/autoit]
in Zeile 36
-und sonst pls mal drüber gucken ob das so vormell richtig ist
Also ich würd mit nem Backbuffer arbeiten, dann sollte es nicht so stark flackern.
-Wie kann man RGB to ARGB konventivern? gibt kein _colorgetalpha() ;([/quote]
Im Normalfall ist die Transparenz 255, also FF. RGB (0x00FF00 - Grün) -> ARGB (0xFF00FF00) wäre dann
$iARGB = 0xFF000000 + 0x00FF00
[/autoit]Achja Geheimtipp:
meinst du nicht @DesktopWidth statt @DesktopDir ?
Du erstellst das Bild ja auch bei X: 500, Y: 600
Versuch mal GUICtrlCreatePic("bg.jpg",0,0,500,600)
Und wo wir grade dabei sind: Die _IENavigate Funktion ist mE nach sehr buggy für JS.
Es kann auch schonmal passieren, dass man auf einer weißen Seite landet.
lieber mit execScript arbeiten:
[autoit]Func _IEJavaScript(ByRef $o_IE, $sCmd)
$o_IE.document.parentwindow.execScript($sCmd)
EndFunc
Wofür braucht man denn sowas?
So, ich weiß, dass ist nicht der erste Vorschlag zu dem Thema, jedoch scheinen andere Projekte eingeschlafen zu sein.
Und die Ersteller der anderen UDF Datenbanken waren Anfangs genauso motiviert. Ich will nicht alles, was gesagt wurde nochmal durchkauen, deswegen kurz und knapp: Nein, ich halte so eine Bibliothek für überflüssig. Warum steht in Andys (erstem) Post.
Soo hab jetzt auch eine Funktion eingebaut um einen JSON String zu erstellen.
Wobei das ganze sehr kompliziert wird, weil man den Array natürlich "von Hand" erstellen muss.
Die von Prog@ndy gepostete UDF scheint da einfacher in der Handhabung zu sein.
Hier nochmal der Link:
http://www.autoitscript.com/forum/index.php?showtopic=104150&st=0
Naja als Erweitertes Ini-Format war das eigentlich nicht gedacht, aber Ja - das würde auch funktionieren
Hallo,
Wer mal mit Ajax gearbeitet hat, der wird JSON kennen. Wer es nicht kennt:
http://de.wikipedia.org/wiki/JavaScrip…ormatdefinition
Wenn man mit AutoIt mal so einen JSON String auswerten möchte, der kommt um StringRegExp nicht herum. Und selbst damit ist es manchmal sehr nervenaufreibend.
Denn ein üblicher JSON String sieht ungefähr so aus:
{"Herausgeber": "Xema","Nummer": "1234-5678-9012-3456","Deckung": 2e+6,"Währung": "EURO","Inhaber": {"Name": "Reich","Vorname": "Rainer","männlich": true,"Hobbys": [ "Reiten", "Golfen", "Lesen" ],"Alter": 42,"SozialesGewissen": null}"Firma": "Abc-Firma","Standort": ["Am Gewerbegebiet 25", "Etage 2"]}
Nur halt viieeeeel länger.
Ich bruachte jedenfalls eine Funktion um einen JSON String in AutoIt zu verwerten, weil ich mit RegExp gescheitert bin.
Das ganze funktioniert natürlich rekursiv (wie auch sonst).
Zurückgegeben wird ein 2 Dimensionaler Array, welcher das Hauptobjekt repräsentiert, in dem [n][0] der Schlüssel und [n][1] der Wert ist.
Der Schlüssel ist eine Zeichenkette. Der Wert enthält entweder eine Zeichenkette (oder Float), ein Objekt oder einen Array. Ein Array wird als 1D Array (im Array) eingebunden.
Der Funktion liegt auch ein Beispiel bei.
#include <Array.au3>
;Example starts here
[/autoit] [autoit][/autoit] [autoit]Local $aReturn, $aInhaber, $aHobbies, $aStandort, $sText
$sText = _
'{' & @CRLF & _
' "Herausgeber": "Xema",' & @CRLF & _
' "Nummer": "1234-5678-9012-3456",' & @CRLF & _
' "Deckung": 2e+6,' & @CRLF & _
' "Währung": "EURO",' & @CRLF & _
' "Inhaber": {' & @CRLF & _
' "Name": "Reich",' & @CRLF & _
' "Vorname": "Rainer",' & @CRLF & _
' "männlich": true,' & @CRLF & _
' "Hobbys": [ "Reiten", "Golfen", "Lesen" ],' & @CRLF & _
' "Alter": 42,' & @CRLF & _
' "SozialesGewissen": null' & @CRLF & _
' }' & @CRLF & _
' "Firma": "Abc-Firma",' & @CRLF & _
' "Standort": ["Am Gewerbegebiet 25", "Etage 2"]' & @CRLF & _
'}' & @CRLF
$aReturn = _JSON_Decode($sText)
[/autoit] [autoit][/autoit] [autoit]$aInhaber = $aReturn[4][1] ; Child Array
$aHobbies = $aInhaber[3][1] ; Child Array from $aInhaber
$aStandort = $aReturn[6][1] ; Child Array
_ArrayDisplay($aReturn, "Hauptobjekt")
_ArrayDisplay($aInhaber, "Inhaber")
_ArrayDisplay($aHobbies, "Hobbies")
_ArrayDisplay($aReturn, "Hauptobjekt")
_ArrayDisplay($aStandort, "Standort")
$sEncoded = _JSON_Encode($aReturn)
MsgBox(0,"",$sEncoded)
;Functions start here
[/autoit] [autoit][/autoit] [autoit]Func _JSON_Decode($sString)
Local $iIndex, $aVal, $sOldStr = $sString, $b
$sString = StringStripCR(StringStripWS($sString, 7))
If Not StringRegExp($sString, "(?i)^\{.+}$") Then Return SetError(1, 0, 0)
Local $aArray[1][2], $iIndex = 0
$sString = StringMid($sString, 2)
Do
$b = False
$aVal = StringRegExp($sString, '^"([^"]+)"\s*:\s*(["{[]|[-+]?\d+(?:(?:\.\d+)?[eE][+-]\d+)?|true|false|null)', 2) ; Get value & next token
If @error Then
ConsoleWrite("!> StringRegExp Error getting next Value." & @CRLF)
ConsoleWrite($sString & @CRLF)
$sString = StringMid($sString, 2) ; maybe it works when the string is trimmed by 1 char from the left ?
ContinueLoop
EndIf
$aArray[$iIndex][0] = $aVal[1] ; Key
$sString = StringMid($sString, StringLen($aVal[0]))
Switch $aVal[2] ; Value Type (Array, Object, String) ?
Case '"' ; String
; Value -> Array subscript. Trim String after that.
$aArray[$iIndex][1] = StringMid($sString, 2, StringInStr($sString, """", 1, 2) - 2)
$sString = StringMid($sString, StringLen($aArray[$iIndex][1]) + 3)
ReDim $aArray[$iIndex + 2][2]
$iIndex += 1
Case '{' ; Object
; Recursive function call which will decode the object and return it.
; Object -> Array subscript. Trim String after that.
$aArray[$iIndex][1] = _JSON_Decode($sString)
$sString = StringMid($sString, @extended + 2)
If StringLeft($sString, 1) = "," Then $sString = StringMid($sString, 2)
$b = True
ReDim $aArray[$iIndex + 2][2]
$iIndex += 1
Case '[' ; Array
; Decode Array
$sString = StringMid($sString, 2)
Local $aRet[1], $iArIndex = 0 ; create new array which will contain the Json-Array.
Do
$sString = StringStripWS($sString, 3) ; Trim Leading & trailing spaces
$aNextArrayVal = StringRegExp($sString, '^\s*(["{[]|\d+(?:(?:\.\d+)?[eE]\+\d+)?|true|false|null)', 2)
Switch $aNextArrayVal[1]
Case '"' ; String
; Value -> Array subscript. Trim String after that.
$aRet[$iArIndex] = StringMid($sString, 2, StringInStr($sString, """", 1, 2) - 2)
$sString = StringMid($sString, StringLen($aRet[$iArIndex]) + 3)
Case "{" ; Object
; Recursive function call which will decode the object and return it.
; Object -> Array subscript. Trim String after that.
$aRet[$iArIndex] = _JSON_Decode($sString)
$sString = StringMid($sString, @extended + 2)
Case "["
MsgBox(0, "", "Array in Array. WTF is up with this JSON shit?")
MsgBox(0, "", "This should not happen! Please post this!")
Exit 0xDEADBEEF
Case Else
ConsoleWrite("Array Else (maybe buggy?)" & @CRLF)
$aRet[$iArIndex] = $aNextArrayVal[1]
EndSwitch
ReDim $aRet[$iArIndex + 2]
$iArIndex += 1
$sString = StringStripWS($sString, 3) ; Leading & trailing
If StringLeft($sString, 1) = "]" Then ExitLoop
$sString = StringMid($sString, 2)
Until False
$sString = StringMid($sString, 2)
ReDim $aRet[$iArIndex]
$aArray[$iIndex][1] = $aRet
ReDim $aArray[$iIndex + 2][2]
$iIndex += 1
Case Else ; Number, bool
; Value (number (int/flaot), boolean, null) -> Array subscript. Trim String after that.
$aArray[$iIndex][1] = $aVal[2]
ReDim $aArray[$iIndex + 2][2]
$iIndex += 1
$sString = StringMid($sString, StringLen($aArray[$iIndex][1]) + 2)
EndSwitch
If StringLeft($sString, 1) = "}" Then
StringMid($sString, 2)
ExitLoop
EndIf
If Not $b Then $sString = StringMid($sString, 2)
Until False
ReDim $aArray[$iIndex][2]
Return SetError(0, StringLen($sOldStr) - StringLen($sString), $aArray)
EndFunc ;==>_JSON_Decode
Func _JSON_Encode($aArray)
Local $sString, $iDim = UBound($aArray, 0), $iUB, $iUB_2
Switch $iDim ; What type of Property?
Case 2 ; Object
$sString = "{"
$iUB = UBound($aArray)
$iUB_2 = UBound($aArray,2)
For $i = 0 To $iUB-1
$sString &= '"' & $aArray[$i][0] & '":'
If IsArray($aArray[$i][1]) Then
$sString &= _JSON_Encode($aArray[$i][1])
Else
$sString &= '"' & $aArray[$i][1] & '"'
EndIf
$sString &= ","
Next
$sString = StringTrimRight($sString, 1) & "}"
Case 1 ; Array
$sString = "["
$iUB = UBound($aArray)
For $i = 0 To $iUB - 1
If IsArray($aArray[$i]) Then
$sString &= _JSON_Encode($aArray[$i])
Else
$sString &= '"' & $aArray[$i] & '"'
EndIf
$sString &= ","
Next
$sString = StringTrimRight($sString, 1) & "]"
Case Else
Return SetError(1, 0, "")
EndSwitch
Return $sString
EndFunc ;==>_JSON_Encode
Ersetz mal
[autoit]$mouseout=0
[/autoit]
durch
Local Static $mouseout=0
[/autoit] ZitatNein, ich werde sie mir auch nicht kaufen
Und zwar weil ich mit meiner 7,99€ Tastatur von Saturn zufrieden bin.
Da gibts unten rechts einen Drehknopf für die Lautstärke, und rechts an der Seite hab ich die SoftKeys für meinen Mediaplayer, auf der anderen Seite die für den Browser. Das ist doch mehr als genug
Wie kann ich das ändern ?
Alternativ auch mit
Opt("MouseCoordMode",2)
bzw
Opt("MouseCoordMode",0)
Nähere Erklärungen findest du in der Hilfe unter "AutoItSetOption"
Bestimmt, aber da keiner von uns dieses Programm hat, können wir nur raten.
SEuBo: Klappt auch nicht bei mir xD... Irgendwie zeichnet er nur "weiß" auf den Button, mit der Schrift drüber noch...
Du kennst mich - ich poste nichts, was ich nicht getestet habe. Hast du auch das Bild im @Scriptdir gespeichert, das ich angehängt habe?
Bei mir kommt das hier raus:
autoit.de/wcf/attachment/10884/
Und wenn man beim GraphicsClear den Alphawert der Farbe auf 00 setzt (0x00FFFFFF statt 0xFFFFFFFF), sieht das so aus:
autoit.de/wcf/attachment/10885/
Und wenn man
GUICtrlSetImage($cZielButton, @TempDir & "\~buttonpic.bmp")
nutzt, dann wird das doch eh nur der Hintergrund des Buttons, oder? Es sollen ja mehrere kleine Bilder auf EINEN Button...
Deswegen setzt du die mehreren kleinen Bilder und die Texte die du brauchst, zu einem einzelnen Bild zusammen. Und das setzt du dann auf den Button....
#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]Local $sName, $sNachname, $sInfos
Local $hGraphics, $hBitmap, $hBuffer
Local $hExtraPic
$hGUI = GUICreate("", 400, 190)
$cName = GUICtrlCreateInput("Name", 20, 20, 200, 20)
$cNachname = GUICtrlCreateInput("Nachname", 20, 50, 200, 20)
$cInfos = GUICtrlCreateInput("Infos", 20, 80, 200, 20)
$cEintragen = GUICtrlCreateButton("Bild auf den Button", 20, 110, 200, 60)
$cZielButton = GUICtrlCreateButton("", 230, 20, 150, 150,0x0080)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $cEintragen
$sName = GUICtrlRead($cName)
$sNachname = GUICtrlRead($cNachname)
$sInfos = GUICtrlRead($cInfos)
;~ Wir erstellen jetzt zuerstmal die Bitmap, in der wir "zeichnen" werden.
;~ Danach laden wir das Bild, oder die Bilder wenn du mehrere willst, in den Speicher.
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(130, 130, $hGraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$hExtraPic = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Briefcase-32x32.png")
[/autoit] [autoit][/autoit] [autoit];~ Jetzt zeichnen wir ganz normal ein Bild, das später auf den Button kommt.
_GDIPlus_GraphicsClear($hBuffer,0xFFFFFFFF)
_GDIPlus_GraphicsDrawString($hBuffer, $sName, 5, 5)
_GDIPlus_GraphicsDrawString($hBuffer, $sNachname, 5, 35)
_GDIPlus_GraphicsDrawString($hBuffer, $sInfos, 5, 105)
_GDIPlus_GraphicsDrawImage($hBuffer, $hExtraPic, Random(20,70,1), 55)
;~ Und speichern das, um es auf den Button zu setzen
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_ImageSaveToFile($hBitmap, @TempDir & "\~buttonpic.bmp")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_ImageDispose($hExtraPic)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUICtrlSetImage($cZielButton, @TempDir & "\~buttonpic.bmp")
[/autoit] [autoit][/autoit] [autoit]EndSwitch
WEnd
Du könntest die Bilder für die Buttons zur Laufzeit mit GDI+ aus den einzelnen Teilstücken und Informationen erstellen, und diese dann speichern & mit GUICtrlSetImage auf den Button hauen.