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. name22

Beiträge von name22

  • GDI-Stapel-Bearbeitung

    • name22
    • 16. Februar 2014 um 16:42

    Wie wäre es damit?

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>

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

    Global $sPath_Image = @ScriptDir & "\Input.jpg"
    Global $sPath_Save = @ScriptDir & "\Output.png"

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

    _GDIPlus_Startup()

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

    OnAutoItExitRegister("_Shutdown")
    _AddInfoBar($sPath_Save, $sPath_Image, "Text2666699", "AutoIt Rocks!", 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 10, 12, 40)

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

    Func _AddInfoBar($sSavePath, $sImagePath, $sString1, $sString2, $iColor_Square, $iColor1 = 0xFF000000, $iColor2 = 0xFF000000, $iSize1 = 12, $iSize2 = 12, $iInfoBar_Height = 40)
    Local $hImage, $hBitmap, $hGraphics, $iImage_Width, $iImage_Height, $hBrush_White, $hBrush_Square, $hBrush_String1, $hBrush_String2
    Local $hPen_Square, $hFontFamily, $hFont1, $hFont2, $hStringFormat, $tRect_Layout1, $tRect_Layout2

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

    $hImage = _GDIPlus_ImageLoadFromFile($sImagePath)

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

    $iImage_Width = _GDIPlus_ImageGetWidth($hImage)
    $iImage_Height = _GDIPlus_ImageGetHeight($hImage)

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

    $hBitmap = _GDIPlus_BitmapCreateFromScan0($iImage_Width, $iImage_Height + $iInfoBar_Height)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetTextRenderingHint($hGraphics, 5)

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

    $hBrush_White = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $hBrush_Square = _GDIPlus_BrushCreateSolid($iColor_Square)
    $hPen_Square = _GDIPlus_PenCreate(0xFF000000, 1)
    $hBrush_String1 = _GDIPlus_BrushCreateSolid($iColor1)
    $hBrush_String2 = _GDIPlus_BrushCreateSolid($iColor2)
    $hFontFamily = _GDIPlus_FontFamilyCreate("Segoe UI")
    $hFont1 = _GDIPlus_FontCreate($hFontFamily, $iSize1)
    $hFont2 = _GDIPlus_FontCreate($hFontFamily, $iSize2)

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

    $tRect_Layout1 = _GDIPlus_RectFCreate($iImage_Width * 0.05, $iImage_Height, $iImage_Width * 0.35, $iInfoBar_Height)
    $tRect_Layout2 = _GDIPlus_RectFCreate($iImage_Width * 0.40, $iImage_Height, $iImage_Width * 0.35, $iInfoBar_Height)
    $hStringFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hStringFormat, 1)
    _GDIPlus_StringFormatSetLineAlign($hStringFormat, 1)

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

    _GDIPlus_GraphicsClear($hGraphics)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, $iImage_Width, $iImage_Height)
    _GDIPlus_GraphicsFillRect($hGraphics, 0, $iImage_Height, $iImage_Width, $iInfoBar_Height, $hBrush_White)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString1, $hFont1, $tRect_Layout1, $hStringFormat, $hBrush_String1)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString2, $hFont2, $tRect_Layout2, $hStringFormat, $hBrush_String2)
    _GDIPlus_GraphicsFillRect($hGraphics, $iImage_Width * 0.8, $iImage_Height + $iInfoBar_Height * 0.3, $iInfoBar_Height * 0.4, $iInfoBar_Height * 0.4, $hBrush_Square)
    _GDIPlus_GraphicsDrawRect($hGraphics, $iImage_Width * 0.8, $iImage_Height + $iInfoBar_Height * 0.3, $iInfoBar_Height * 0.4, $iInfoBar_Height * 0.4, $hPen_Square)

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

    _GDIPlus_ImageSaveToFile($hBitmap, $sSavePath)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BrushDispose($hBrush_Square)
    _GDIPlus_BrushDispose($hBrush_String1)
    _GDIPlus_BrushDispose($hBrush_String2)
    _GDIPlus_BrushDispose($hBrush_White)
    _GDIPlus_PenDispose($hPen_Square)
    _GDIPlus_FontDispose($hFont1)
    _GDIPlus_FontDispose($hFont2)
    _GDIPlus_FontFamilyDispose($hFontFamily)
    _GDIPlus_StringFormatDispose($hStringFormat)

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

    Return True
    EndFunc

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

    Func _Shutdown()
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit]
  • _FileWriteToLine Problem

    • name22
    • 13. Februar 2014 um 22:57

    Die Funktion _FileWriteToLine löscht alle Zeilen von $start bis $ende wenn du einen leeren String zum einfügen angibst. Die Zeilenanzahl nimmt also ab während das Script die _write Funktion ausführt. Irgendwann ist dann $i größer als die Zeilenanzahl der Datei.
    Interessanterweise tritt der Fehler bei mir aber mit deinen zur Verfügung gestellten Dateien nicht auf, wenn ich einfach nach dem öffnen des Programms auf "Upload" drücke.

  • Programm für CMD erstellen, welche von .bat gestartet wird

    • name22
    • 13. Februar 2014 um 16:10

    Ich bin mir nicht ganz sicher, was du möchtest... Soll ein AutoIt-Script von einem Batch-Script gestartet werden, oder umgekehrt? Welches öffnet das Konsolenfenster?
    Rein provisorisch gebe ich dir einfach mal den Tipp, dass man mit $CmdLineRaw Parameter auslesen kann die an ein AutoIt Script beim Start weitergegeben werden. Weiteres dazu findest du auch hier: http://translation.autoit.de/onlinehilfe/intro/running.htm
    Falls du etwas anderes vorhast dann musst du dich vermutlich verständlicher ausdrücken.

  • 3 Startseiten in Firefox

    • name22
    • 13. Februar 2014 um 16:04

    Der installierte Firefox macht das genauso ;). Die Veränderungen durch den Benutzer werden in der prefs.js gespeichert. Man kann diese Einstellungen auch durch Einstellungen in der user.js Datei überschreiben, die standardmäßig nicht existiert.
    Ich habe dafür ein kleines Script zusammengebastelt:

    Spoiler anzeigen
    [autoit]

    Global $sPath_DefaultProfile, $sData_Prefs, $aSearch_Setting, $hFile_Prefs, $aPreviousSetting
    Global $sPath_Profiles = @AppDataDir & "\Mozilla\Firefox"
    Global $sPath_ProfileIni = $sPath_Profiles & "\profiles.ini"
    Global $sNewValue = "autoit.de|autoitscript.com|xkcd.com"

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

    For $i = 0 To 15
    If IniRead($sPath_ProfileIni, "Profile" & $i, "Default", -1) <> -1 Then
    $sPath_DefaultProfile = IniRead($sPath_ProfileIni, "Profile" & $i, "Path", -1)
    If $sPath_DefaultProfile = -1 Then Exit 1
    EndIf
    Next

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

    $sPath_DefaultProfile = $sPath_Profiles & "" & StringReplace($sPath_DefaultProfile, "/", "")

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

    $sData_Prefs = FileRead($sPath_DefaultProfile & "\prefs.js")
    $aPreviousSetting = StringRegExp($sData_Prefs, 'user_pref\("browser\.startup\.homepage", "([^"]*)"\);', 3)

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

    If Not @error Then
    $hFile_Prefs = FileOpen($sPath_DefaultProfile & "\prefs.js", 2)
    FileWrite($hFile_Prefs, StringReplace($sData_Prefs, 'user_pref("browser.startup.homepage", "' & $aPreviousSetting[0] & '");', 'user_pref("browser.startup.homepage", "' & $sNewValue & '");'))
    Else
    $hFile_Prefs = FileOpen($sPath_DefaultProfile & "\prefs.js", 1)
    $sFileEnd = StringRight($sData_Prefs, 1)
    If $sFileEnd = @CR Or $sFileEnd = @LF Then
    FileWrite($hFile_Prefs, 'user_pref("browser.startup.homepage", "' & $sNewValue & '");' & @CRLF)
    Else
    FileWrite($hFile_Prefs, @CRLF & 'user_pref("browser.startup.homepage", "' & $sNewValue & '");' & @CRLF)
    EndIf
    EndIf

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

    FileClose($hFile_Prefs)

    [/autoit]


    Ich habe es zwar getestet, aber es ist natürlich trotzdem mit Vorsicht zu genießen wenn du kein Backup von deinen Benutzereinstellungen im Forefox hast. Das Script sucht automatisch nach dem Firefoxprofil das im Moment aktiv ist, also standardmäßig geladen wird wenn du den Firefox startest. Danach wird die prefs.js Datei des Benutzers durchsucht und die Einstellung für die Startseite entweder überschrieben oder hinzugefügt. Das ganze funktioniert allerdings nur wenn der Firefox nicht läuft während das Script arbeitet, sonst werden beim Beenden alle Änderungen vom Firefoxprozess überschrieben und die Datei sieht aus wie vorher.

  • Felder nach Eingabe prüfen

    • name22
    • 12. Februar 2014 um 18:39

    Ich habe mal etwas zusammengebastelt das hoffentlich deinen Vorstellungen aber nicht ganz deiner Beshcreibung entspricht. Nebenbei habe ich noch dein Script visuell etwas aufgeräumt und ein Font ausgewählt das nicht schrecklich aussieht wenn man es zu sehr vergrößert. ;)

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Winapi.au3>

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

    Global $iFocusSwitchTime = 2000, $iFocusID

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

    $Form1_1 = GUICreate("Form1", 615, 484, 192, 124)
    $btnEnde = GUICtrlCreateButton("beenden", 496, 416, 75, 25)
    GUISetFont(16, 400, 0, "Segoe UI", $Form1_1)
    $iCtrl_TabSwitchStart = GUICtrlCreateDummy()
    $txtJahr = GUICtrlCreateInput("2014", 128, 48, 59, 32)
    $txtOrdner = GUICtrlCreateInput("", 128, 112, 441, 32)
    $txtDatei = GUICtrlCreateInput("", 128, 168, 441, 32)
    $txtAdresse = GUICtrlCreateInput("", 128, 224, 441, 32)
    $txtKopie = GUICtrlCreateInput("", 128, 352, 441, 32)
    $iCtrl_TabSwitchEnd = GUICtrlCreateDummy()
    $btnStart = GUICtrlCreateButton("Start", 496, 40, 75, 41)
    GUISetFont(14, 400, 0, "Segoe UI", $Form1_1)
    $Label1 = GUICtrlCreateLabel("Jahr:", 72, 48, 45, 28)
    $lblOrdner = GUICtrlCreateLabel("Ordner", 48, 112, 64, 28, $SS_RIGHT)
    $lblDatei = GUICtrlCreateLabel("Datei", 69, 167, 46, 28, $SS_RIGHT)
    $lblAdresse = GUICtrlCreateLabel("Adresse", 38, 232, 74, 28, $SS_RIGHT)
    $lblKopie = GUICtrlCreateLabel("Kopie", 56, 354, 53, 28, $SS_RIGHT)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $btnEnde
    Exit
    Case $btnStart

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

    EndSwitch
    WEnd

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

    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hwnd, $iMsg, $wParam, $lParam
    Local $iControlMsg = BitShift($wParam, 16)
    Local $iControlID = BitAND($wParam, 0xFFFF)

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

    Switch $iControlMsg
    Case $EN_CHANGE
    If $iFocusID = $iControlID Then
    AdlibUnRegister("_FocusTimer")
    If GUICtrlRead($iControlID) <> "" Then AdlibRegister("_FocusTimer", $iFocusSwitchTime)
    EndIf
    Case $EN_SETFOCUS
    AdlibUnRegister("_FocusTimer")
    $iFocusID = $iControlID
    EndSwitch
    EndFunc

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

    Func _FocusTimer()
    If $iFocusID >= $iCtrl_TabSwitchStart And $iFocusID < $iCtrl_TabSwitchEnd Then ControlFocus($Form1_1, "", $iFocusID + 1)
    AdlibUnRegister("_FocusTimer")
    EndFunc

    [/autoit]


    $iFocusSwitchTime gibt an wie viel Zeit nach einer Textveränderung im Input bleibt bis gewechselt wird. Der Timer setzt sich nach einer Eingabe im fokussierten Control wieder zurück und wird bei manuellem Fokuswechsel beendet.

  • Einmal die rechte Maustaste, das andere Mal die linke

    • name22
    • 11. Februar 2014 um 18:29

    Im ersten Beispiel wird das Kontextmenü direkt den sichtbaren Controls zugeordnet. Standardmäßig wird ein Kontextmenü eines Controls mit der rechten Maustaste geöffnet.
    Im zweiten Beispiel werden die beiden Kontextmenüs Dummycontrols zugeordnet und "manuell" über eine Funktion (ShowMenu) aufgerufen sobald ein Button geklickt wurde.

  • CronTab

    • name22
    • 8. Februar 2014 um 22:50

    Das ist zwar nicht der schönste Weg das aufzuteilen, aber es funktioniert :D.

  • CronTab

    • name22
    • 8. Februar 2014 um 22:21

    Wenn die Tabelle immer die selbe Anzahl an Spalten hat und Spalten nicht leer sein können, sollte das kein Problem darstellen.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

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

    Global $sPath_File = @ScriptDir & "\Test.txt" ;Pfad zur Datei mit den Tabellendaten.
    Global $hFile = FileOpen($sPath_File)
    Global $aTable[_FileCountLines($sPath_File)][6], $iLine = 0

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

    While True
    $sLine = FileReadLine($hFile)
    If @error Then ExitLoop

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

    $aRow = StringSplit(StringReplace($sLine, " ", @CR, 5), @CR, 2)
    For $i = 0 To 5
    $aTable[$iLine][$i] = $aRow[$i]
    Next

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

    $iLine += 1
    WEnd

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

    _ArrayDisplay($aTable)

    [/autoit]
  • Glücklichen Herzwunsch zum Geburtstag, Schnitzel!

    • name22
    • 8. Februar 2014 um 21:58

    Ich hab den Thread auch erst jetzt bemerkt :(. Alles liebe und Gute zum Geburtstag nachträglich Schnitzel! :thumbup:

  • Happy Birthday, Andy

    • name22
    • 4. Februar 2014 um 21:08

    Alles Gute zum Geburtstag Andy! Hoffentlich dürfen wir uns auch weiterhin über deine konstante Anwesenheit im Forum freuen :D.

  • Hilfe mit GDIPlus

    • name22
    • 29. Januar 2014 um 17:39

    Die wichtigsten stehen im Anhang der Hilfe von AutoIt (findest du bestimmt, da ist nicht viel drin), darauf wird auch im Hilfeartikel zu GUIRegisterMsg verwiesen. Ansonsten findest du auch im MSDN eine Liste. Ein Programm kann sich aber auch beliebig neue Message IDs registrieren.

  • Hilfe mit GDIPlus

    • name22
    • 29. Januar 2014 um 17:09

    Windows verwendet ein Benachrichtigungssystem um die Kommunikation mit Programmen über deren Fenster zu ermöglichen. Wenn du in einem Programm darauf reagierst, dass ein Fenster geschlossen wird, dann reagierst du tatsächlich auf den Eingang einer Nachricht oder WindowMessage namens WM_CLOSE. Jedes Mal wenn die Maus innerhalb eines Fensters bewegt wird, sendet Windows an dein Fenster eine WM_MOUSEMOVE Nachricht die sogar die neuen Koordinaten des Zeigers enthält. WM_L/RBUTTONDOWN werden im Fall des drückens der rechten Maustaste gesendet und WM_MOUSELEAVE falls die Maus das Fenster verlassen sollte.
    WM_MOUSELEAVE ist von den geannnten die einzige Benachrichtigung die vor jedem Verlassen des Fensters ein mal resgistriert werden muss (durch TrackMouseEvent).
    Alle diese WindowMessages können mit der Funktion GUIRegisterMsg registriert werden. Dazu gibt man die ID der Nachricht (z.B. WM_MOUSEMOVE) und eine Funktion an die dafür aufgerufen werden soll.
    GUIRegisterMsg($WM_MOUSEMOVE, "_WM_Proc") ruft für jede Ankunft einer WM_MOUSEMOVE Nachricht (und somit für jede Bewegung des Mauszeigers im Fenster) ein mal die Funktion "_WM_Proc" auf. Jede dieser Nachrichten kann auch noch zusätzliche Informationen liefern (z.B. Mausposition) über die Parameter wParam und lParam. Diese Parameter werden zusammen mit dem Handle des Fensters an die die Nachricht gerichtet ist und deren ID an die Funktion übergeben. Dazu die 4 Parameter in der Funktionsdefinition (hWnd, iMsg, wParam, lParam).
    Informationen über die Nachrichten musst du für gewöhnlich dem Microsoft Developer Network entnehmen, falls es nicht schon jemand mit AutoIt gemacht hat.

  • Hilfe mit GDIPlus

    • name22
    • 29. Januar 2014 um 16:45
    Zitat

    Könntest du mir noch Speziell erklären wie du das mit dem Buffer gemacht hast ? wäre echt nett !


    Gerne. Gibt es was Spezielles, das du nicht verstehst?
    Im Grunde mache ich das Gleiche wie davor schon mit dem Backbuffer. Ich erstelle eine Bitmap für den "Tilebuffer" in der das Bild für eine "Ebene" gespeichert wird. Danach erstelle ich für beide Bitmaps (Backbuffer, Tilebuffer) jeweils einen GraphicsContext über den dann schließlich Zeichenoperationen auf den Bitmaps durchgeführt werden können.
    Das war es im Grunde schon. Danach muss nur die Reihenfolge der Zeichenvorgänge in den einzelnen Ebenen und die Reihenfolge in der die Bitmaps auf die GUI gezeichnet werden, beachtet werden. Im Moment wird zuerst der Tilebuffer auf den Backbuffer gezeichnet, danach wird der weiße Rahmen auf den Backbuffer gezeichnet, dann wird der Backbuffer auf die GUI (Frontbuffer) gebracht. Du musst dabei einfach nur beachten, das die einzelnen Bitmaps im Grunde separate Ebenen sind und keinen Effekt auf die anderen Ebenen haben und das die Reihenfolge der Zeiochenvorgänge entscheidend ist. Was zuletzt gezeichnet wird ershceint im Gesamtbild "zuoberst".

    Man könnte das ganze auch noch weiter optimieren und den Zustand der Tiles in ein Array speichern um später Probleme beim übereichnen zu vermeiden (wenn du z.B. ein Hintergrundbild verwenden willst funktioniert das so nicht mehr).
    Um beim "Zeichnen", bzw. gedrückt halten des Mauszeigers weiterhin Kacheln zu beeinflussen die von dem Mauszeiger berührt werden müsste man die Funktion mit den Abfragen der WindowMessages ein bisschen abändern. Wenn du willst kann ich das noch für dich machen.

  • Hilfe mit GDIPlus

    • name22
    • 29. Januar 2014 um 16:08

    Ich habe mal dein Script grundlegend überarbeitet, ich hoffe du hast nichts dagegen. Du hast mit deiner Version schon so viele potenzielle Probleme angefangen, dass es einfacher war den Hauptteil komplett neu zu schreiben.
    In dieser Version habe ich das WindowMessage Handling auf den OnEventMode umgestellt, so dass alles in Funktionen ausgelagert werden kann die dann automatisch ausgeführt werden. Den Teil des Programms der bestimmt in welcher Kachel sich die Maus befindet habe ich um einiges gekürzt (auf 2 kleine Zeilen) :whistling: . Des weiteren habe ich deine bisherigen Buffer und Bitmaps durch einen Backbuffer und einen "Tilebuffer" ersetzt. In die Tilebuffer Bitmap werden die Tiles gespeichert um sie danach auf den Backbuffer zu zeichnen woraufhin der weiße Rahmen ggf. darüberkommt. So muss möglichst wenig gezeichnet werden. Die Verfolgung des Mauszeigers habe ich über WindowMessages gemacht um das Script zu entlasten und die Performanz ein wenig zu verbessern.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPISys.au3>
    #include <Misc.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $hGuiH = 640, $hGuiW = 640, $iTileW = 32, $iTileH = 32, $hGuiTitle = "NewMap", $iLastmX = "", $iLastmY = ""

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

    $hGui = GUICreate($hGuiTitle, $hGuiH, $hGuiW)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()

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

    $hGr_Frontbuffer = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBitmap_Backbuffer = _GDIPlus_BitmapCreateFromGraphics($hGuiW, $hGuiH, $hGr_Frontbuffer)
    $hBitmap_Tilebuffer = _GDIPlus_BitmapCreateFromGraphics($hGuiW, $hGuiH, $hGr_Frontbuffer)
    $hGr_Backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap_Backbuffer)
    $hGr_Tilebuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap_Tilebuffer)
    _GDIPlus_GraphicsClear($hGr_Backbuffer)
    _GDIPlus_GraphicsClear($hGr_Tilebuffer)

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

    $hGlas = _GDIPlus_ImageLoadFromFile(@DesktopDir & "\NewGlassRed2.png");Irgend ein 32x32px png
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF)
    $hBrush = _GDIPlus_BrushCreateSolid()

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

    _Redraw(False)

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

    OnAutoItExitRegister("_Shutdown")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")

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

    GUIRegisterMsg($WM_MOUSEMOVE, "_WM_Proc")
    GUIRegisterMsg($WM_MOUSELEAVE, "_WM_Proc")
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_Proc")
    GUIRegisterMsg($WM_RBUTTONDOWN, "_WM_Proc")
    GUIRegisterMsg($WM_PAINT, "_WM_PAINT")

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

    While Sleep(1000)
    WEnd

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

    Func _WM_Proc($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam, $lParam
    Local Static $iX_Mouse, $iY_Mouse, $iX_Grid, $iY_Grid, $bTracking = False

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

    Switch $iMsg
    Case $WM_MOUSEMOVE
    $iX_Mouse = _WinAPI_LoWord($lParam)
    $iY_Mouse = _WinAPI_HiWord($lParam)
    If Not $bTracking Then
    ConsoleWrite("MouseEnter" & @CRLF)
    _WinAPI_TrackMouseEvent($hGui, $TME_LEAVE)
    $bTracking = True
    EndIf
    $iX_Grid = Floor($iX_Mouse / $iTileW)
    $iY_Grid = Floor($iY_Mouse / $iTileH)
    If WinActive($hGui) Then _Redraw(True, $iX_Grid, $iY_Grid)
    Case $WM_MOUSELEAVE
    $bTracking = False
    _Redraw(False)
    ConsoleWrite("MouseLeave" & @CRLF)
    Case $WM_LBUTTONDOWN
    _TileAdd($iX_Grid, $iY_Grid)
    Case $WM_RBUTTONDOWN
    _TileDel($iX_Grid, $iY_Grid)
    EndSwitch
    EndFunc

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

    Func _Redraw($bBorder = True, $iX_NewGrid = Default, $iY_NewGrid = Default)
    Local Static $iX_Grid, $iY_Grid
    If $iX_NewGrid <> Default Then $iX_Grid = $iX_NewGrid
    If $iY_NewGrid <> Default Then $iY_Grid = $iY_NewGrid

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

    _GDIPlus_GraphicsClear($hGr_Backbuffer)
    _GDIPlus_GraphicsDrawImage($hGr_Backbuffer, $hBitmap_Tilebuffer, 0, 0)
    If $bBorder Then _GDIPlus_GraphicsDrawRect($hGr_Backbuffer, $iX_Grid * $iTileW, $iY_Grid * $iTileH, $iTileW, $iTileH, $hPen)
    _GDIPlus_GraphicsDrawImage($hGr_Frontbuffer, $hBitmap_Backbuffer, 0, 0)
    EndFunc

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

    Func _TileAdd($iX_NewGrid, $iY_NewGrid)
    _GDIPlus_GraphicsDrawImageRect($hGr_Tilebuffer, $hGlas, $iX_NewGrid * $iTileW, $iY_NewGrid * $iTileH, $iTileW, $iTileH)
    _Redraw()
    EndFunc

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

    Func _TileDel($iX_NewGrid, $iY_NewGrid)
    _GDIPlus_GraphicsFillRect($hGr_Tilebuffer, $iX_NewGrid * $iTileW, $iY_NewGrid * $iTileH, $iTileW, $iTileH, $hBrush)
    _Redraw()
    EndFunc

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

    Func _WM_PAINT()
    _GDIPlus_GraphicsDrawImage($hGr_Frontbuffer, $hBitmap_Backbuffer, 0, 0)
    EndFunc

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

    Func _Shutdown()
    _GDIPlus_BitmapDispose($hBitmap_Backbuffer)
    _GDIPlus_BitmapDispose($hBitmap_Tilebuffer)
    _GDIPlus_GraphicsDispose($hGr_Backbuffer)
    _GDIPlus_GraphicsDispose($hGr_Tilebuffer)
    _GDIPlus_GraphicsDispose($hGr_Frontbuffer)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_Shutdown()
    EndFunc

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

    Func _Close()
    Exit
    EndFunc

    [/autoit]
  • Hilfe mit GDIPlus

    • name22
    • 29. Januar 2014 um 14:58

    Dann bräuchtest du aber auch noch eine Bitmap...
    Wie soll denn der Zeichenvorgang ablaufen?

  • Hilfe mit GDIPlus

    • name22
    • 29. Januar 2014 um 14:47

    Ein lauffähiges Script wäre ganz hilfreich, falls du uns das zur Verfügung stellen könntest. ;)
    Auf Anhieb kann ich dir aber schon mal sagen, dass es keinen Unterschied macht, ob du in $hGr_Backbuffer oder $hGr_OverBackbuffer zeichnest. Beide sprechen nämlich die selbe Bitmap an.
    Daher ist diese Operation hinfällig:

    [autoit]

    _GDIPlus_GraphicsDrawImage($hGr_Backbuffer,$hGr_OverBackbuffer,0,0)

    [/autoit]


    Und diese Zeile macht keinen Sinn, da die Funktion einen GraphicsContext als Parameter erwartet und nicht das Handle zu einer Bitmap:

    [autoit]

    _GDIPlus_GraphicsDrawImage($hBitmap_Backbuffer,$hGr_Backbuffer,0,0)

    [/autoit]

    Edit:

    Zitat

    warscheinlich liegt das daran das ich nicht weis wie man das macht :D

    Das kannst du unter anderem in der Hilfe zu _GDIPlus_PenCreate nachlesen ;). Mit _GDIPlus_PenDispose kannst du ein erstelltes Pen Objekt nach Gebrauch aus dem Arbeitsspeicher entfernen. Das Gleiche gilt übrigens für sämtliche GDI+ Objekte (die Funktionen sind ähnlich benannt und enthalten immer das Wort "Dispose", außerdem werden die Funktionen zum Entfernen normalerweise in Beschreibungen der Funktionen zum Erzeugen von Objetken erwähnt).

  • Liesview aufteilen ?!

    • name22
    • 25. Januar 2014 um 12:21

    Wenn ich dich richtig verstanden habe, möchtest du im Prinzip 2 Listview Controls untereinander haben um Horizontal Platz zu sparen. Das sollte machbar sein, aber ich glaube da fehlen noch ein paar Details.
    Muss dein Listview Konglomerat denn auch sortierbar sein? Wenn ja, wie soll das ablaufen? Sollen die Listviews sich je nach Anzahl der Items in der Höhe anpassen?

    Edit: Da finde ich den Vorschlag von BugFix wesentlich besser und einfacher :whistling: ...

  • GUI - Hintergrundbild

    • name22
    • 25. Januar 2014 um 00:22
    Zitat

    Ich nutze ungern und eigentlich nie Code in meinen Programmen / Tools den ich nicht verstehe, bzw nicht "kann".


    Es kommt aber auf das selbe raus wenn du eine interne "richtige" Funktion verwendest. Den tatsächlichen Code dahinter würdest du auch nicht verstehen und du kannst es noch nicht mal versuchen, weil AutoIt mittlerweile ein closed-source Projekt ist. ;)

    Das definieren von eigenen Funktionen um Arbeitsvorgänge zu abstrahieren und diese in UDFs zusammenfassen um sie mit anderen zu teilen ist eine Stärke von AutoIt. Ich kann nachvollziehen, dass du gerne den Code verstehen möchtest, aber dann setze doch da an und frag nicht nach einer weiteren Lösung... Eine bessere Lösung als die von chesstiger wirst du kaum finden und ich vermute, dass so auch eine "offizielle" Funktion von AutoIt vorgehen würde.

  • Grafik in Dokument hochladen

    • name22
    • 24. Januar 2014 um 22:41

    Das sollte mit der Funktion _Word_DocPictureAdd aus der Word.au3 möglich sein. Die UDF ist im Standard-Repertoire von AutoIt vorhanden und in der Hilfedatei sollte auch ein Eintrag zu dieser Funktion - mit Beispiel - vorhanden sein.

  • Feuerrad

    • name22
    • 17. Januar 2014 um 18:50

    Oscar Ein GUI(ctrl) Event lässt sich mit einem erneuten Aufruf der Funktion deregistrieren. Dazu muss nur als Funktionsname ein leerer String angegeben werden.

    Schönes Spiel übrigens :thumbup: .

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™