Hallo
Ich hatte schon vor einiger Zeit maleine Frage gestellt wegen meines Maus - Macro Rekorder. Damals wars mein Problem das zuviele Einträge bei einem Mausklick gemacht werden. Jetzt ist mein Problem in etwa umgekehrt
Das Skript:
Spoiler anzeigen
;################Marco Rekorder################
;##################BlackFx#####################
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <GUIListView.au3>
HotKeySet("{ESC}","_exit")
Opt("GUIOnEventMode",1)
Global $Status = 0
;-------------GUI Erstellen---------------
$TitelGUI = GUICreate("Macro Tool - BlackFx",420,405,-1,-1,$WS_POPUPWINDOW)
$font = "Arial"
GUISetFont(8, 400, 0, $font)
$StatusLabel = GUICtrlCreateLabel("Herzlich Willkommen ",160,385)
GUICtrlCreateLabel("Status:",110,385)
GUICtrlCreateButton("Aufnahme",30,60,85,25)
GUICtrlSetOnEvent(-1,"_Aufnahme")
GUICtrlCreateButton("Pause",30,90,85,25)
GUICtrlSetOnEvent(-1,"_Pause")
GUICtrlCreateButton("Stopp",30,120,85,25)
GUICtrlSetOnEvent(-1,"_Stopp")
GUICtrlCreateButton("Beenden",30,250,85,25)
GUICtrlSetOnEvent(-1,"_exit")
$BefehlLV = GUICtrlCreateListView("Befehl|Wert(e)",165,30,250,350)
_GUICtrlListView_SetColumnWidth($BefehlLV,0,80)
_GUICtrlListView_SetColumnWidth($BefehlLV,1,165)
GuiSetState(@SW_SHOW,$TitelGUI)
;-----------/--GUI Erstellen--/------------
;------------- Funktionen ---------------
while 1
If $Status = 1 Then ;<===== Wenn Maustaste gedrückt, dann Eintrag in Listview mit Position und Rechts oder Links
If _IsPressed(01) Then
$pos = MouseGetPos()
GUICtrlCreateListViewItem("MausL|"&$pos[0]&","&$pos[1],$BefehlLV)
Do
Sleep(10)
Until Not _IsPressed(01)
EndIf
If _IsPressed(02) Then
$pos = MouseGetPos()
GUICtrlCreateListViewItem("MausR|"&$pos[0]&","&$pos[1],$BefehlLV)
Do
Sleep(10)
Until Not _IsPressed(02)
EndIf
EndIf
WEnd
func _Aufnahme() ;<===== Starten der Aufnahme
If $Status = 0 then _GUICtrlListView_DeleteAllItems($BefehlLV)
Global $Status = 1
GUICtrlSetData($StatusLabel,"Aufnahme")
EndFunc
func _Pause() ;<===== Pause mit der Möglichkeit des weiterführen der Aufnahme
If $Status = 1 then
Global $Status = 2
$ZaehlerLV = _GuiCtrlListView_GetItemCount($BefehlLV)
_GUICtrlListView_DeleteItem($BefehlLV,$ZaehlerLV-1)
GUICtrlSetData($StatusLabel,"Aufnahme pausiert")
EndIf
EndFunc
func _Stopp() ;<===== Stoppen der Aufnahme mit anschließenden Speichern
If $Status = 1 then
Global $Status = 0
$ZaehlerLV = _GuiCtrlListView_GetItemCount($BefehlLV)
_GUICtrlListView_DeleteItem($BefehlLV,$ZaehlerLV-1)
$Speichern = MsgBox(4,"Speichern...","Befehlsliste speichern?")
GUICtrlSetData($StatusLabel,"Aufnahme gestoppt")
ElseIf $Status = 2 then
$Speichern = MsgBox(4,"Speichern...","Befehlsliste speichern?")
GUICtrlSetData($StatusLabel,"Aufnahme gestoppt")
EndIf
EndFunc
func _Exit()
exit
EndFunc
;-----------/- Funktionen --/------------
Die Funktion: Bei einem klick auf "Aufnahme" werden sämtliche Mausklickaktionen (Rechts & Links) aufgenommen und mit Position ins ListView geschrieben. Bei einem klick auf den Pause-Button wird die Aufnahme pausiert und kann mit einem klick auf "Aufnahme" fortgesetzt werden. Der klick auf dem Stopp-Button beendet die Aufnahme und fordert zum speichern auf. Nachdem der Benutzer gespeichert (oder nicht gespeichert) hat kann mit klick auf "Aufnahme" ein neues Skript erstellt/aufgenommen werden. Das alte wird aus dem ListView gelöscht
Mein Problem: Bei einem klick auf den Pause oder Stopp Button wird ja die letzte Mausaktion miterfasst und ins ListView geschrieben. Dabei kann es beim Ausführen zu unerwünschten Nebenwirkungen kommen. Gelöst habe ich das Problem im Moment recht ... sagen wir mal ... provisorisch. Der letzte ListView - Eintrag wird einfach rausgelöscht. Somit sieht man kurzzeitig den Befehl und Wert. Dies ist sicherlich kein Beinbruch, aber nicht wirklich schick. Ich habe schon verschiedene Sachen probiert und wollte gerne eine etwas ansprechendere Variante haben.
Meine Frage: Hat jemand schonmal eine ähnliches Problem gehabt und erfolgreich gelöst .... Oder fällt jemanden eine bessere und einfacher Lösung ein als meine?
Falls irgendwelche weitere Verbesserungen oder Hinweise am Skript nötig sind dann gleich mitteilen. Bin über jeden Tipp froh.
P.S.: Das Skript ist gekürzt und beinhaltet nur die für die Frage notwendigen Bestandteile (zwegs Zeilenumfang). Das Speichern und weitere Funktionen sind im kompletten Skript vorhanden und funktionieren.
Danke schonmal im Voraus.
Ihr