tMsg() - Abschaltbare MsgBox-Option für den Testfall

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

tMsg() - Abschaltbare MsgBox-Option für den Testfall

07 May 2020, 11:02

Moin Leute,
mehr als im Titel getönt ist es auch nicht. Einfach im Skript den Schalter auf true bzw false setzen.
Und schon gibts sowas wie debugging für Bedürftige. War es irgendwie leid :arrow: ToolTips und :arrow: MsgBoxen ständig auskommentieren/entfernen zu müssen. Frohes gelingen :)

tMsg().ahk (einfach kopieren/download)

Code: Select all

;
; 
; tMsg	:= false														; soll eine Msg zu testzwecken angezeigt werden: true/false bzw. 1/0
;																		; tMsg ? (... ist 'tMsg' wahr, dann)
; tMsg ? tMsg("bez:msg","bez:msg")										; ... zeige statusmeldung an, z.B. <key>:<value> (default delimiter = ":")
; tMsg ? tMsg("abc", myVar)												; separate angaben eines strings und einer variablen (ausgabe aufeinanderfolgende zeile)
; tMsg ? tMsg("myVar:" myVar)											; angabe eines strings mit bezeichner und wert zzgl delimiter (ausgabe auf gleicher zeile)
; tMsg ? tMsg(myVar)													; hier wird lediglich ein wert übergeben												
; tMsg ? tMsg()															; ohne parameter angabe. Schreibt zeitstempel in datei "<scriptName>.log", in jeweils neuer zeile.
;
;

tMsg(v1:="",v2:="",v3:="",v4:="",v5:="",v6:="") {						; anzahl an elementen/eingangsparametern variabel (hier sechs) 
	fn := Func("tMsg")													; functionObj zur function erstellen
	if (v1 = "") {														; da function aufruf ohne angabe
		log:= FileOpen(SubStr(A_ScriptName,1,-4) . ".log", "a `r`n")	; ... datei öffnen (ggfs. erstellen), inhalte (hier zeitstempel) werden angehängt
		log.Write(A_Now "`n")											; ... datei beschreiben
		Log.Close()														; ... datei schließen
		Return															; back 2 sender
	}
	Loop % fn.MaxParams {												; da function aufruf mit angabe(n): abarbeiten der übergebenen werte (funcObj liefert anzahl der params=iterations)
		if InStr(v%A_Index%,":") {										; enthält der übergebene wert den default delimiter
			msg := StrSplit(v%A_Index%,":")								; ... wird bezeichner von wert separiert (ermöglicht anschließend beliebiges ausgabeformat)
			str .= msg[1] ":`t" msg[2] "`n"								; und nach editierung (auf gleicher zeile) concatiniert
		} Else {														; ... ansonsten
			str .= v%A_Index% "`n"										; ... wird ohne bezeichner (auf jeweils neuer zeile) concatiniert.
		}
	}
	MsgBox % str														; finale ausgabe übergebener werte (vars/strings) während testlauf.
	Return
	}
myTest.ahk (dito, und ist im selben verzeichnis zu starten)

Code: Select all

#NoEnv
#SingleInstance, Force
#Include tMsg().ahk								; einbinden/inkludieren der testMessage function AKA tMsg()

tMsg := 1										; schalter zum an-/abschalten (true/false bzw 1/0) aller nachfolgenden tMsg() aufrufe
var := 1234										; eine variable mit wert
fObj := {"a":"1","b":"2","c":"3"}				; ein array object

tMsg ? tMsg("Hallo Welt")						; mal grüßen!

Loop 2 {
	SoundBeep
	tMsg ? tMsg("Beep [" A_Index "]")			; anzahl soundbeeps zur laufzeit anzeigen
	}

tMsg ? tMsg("a :" fObj["a"],"b :" fObj["b"])	; key values von a, b des fObj arrays anzeigen
	
tMsg ? tMsg(bla())								; rückgabewert der bla() anzeigen

bla() {
	Return "Moin Moin!"
	}
	
tMsg ? tMsg("myTestVar:`t" var)					; variablennamen und wert anzeigen

Gui, Add, DDL, x10 y10 vDDL1 Choose1, A|B|C|D|E
Gui, Add, Button, xp+130 yp-1 gStart, Start
Gui, Show, x100 y100 w184 h40, myGui
Return

Start:
	Gui, Submit, NoHide
	tMsg ? tMsg("You've selected: " DDL1)		; gui-selection anzeigen
	Return
PS. Gerade bemerken dürfen, das Dinge ein- und auszuschalten nicht auf MsgBoxen beschränkt ist: https://www.autohotkey.com/boards/viewtopic.php?f=10&t=73656 :thumbup:
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

08 May 2020, 04:23

Moin,

man könnte hier auch eine Variadische Funktion nutzen:

Code: Select all

tMsg(p*) {	; variable Anzahl von Parametern, die Anzahl der tatsächlich übergebenen Parameter liefert p.Length()
}
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

08 May 2020, 04:44

Als ich den Link dazu in der AHK Hilfe sah, dachte ich an eine Romulanische (Weltraum-)Gehhilfe :lol: ... und hab schnell weitergeblättert :silent:
Danke ist notiert :)
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

14 May 2020, 02:35

Hallo BNOLI,
so was in der Art nutze ich auch, mit dem Unterschied, dass ich die Funktion direkt aufrufe und erst in der Funktion die Var tMsg checke. Hier durch erspart man sich jedesmal die Abfrage mit tMsg ?....
Allerdings mag Deine Variante eventuell etwas performanter sein, da hier der tMsg Check in nur einem Prozessschritt erledigt ist :)

Außer zum Debuggen, wäre das auch eine prima Idee, um anderen Usern speziell auch neuen Nutzern eine Step by Step Funktion anzubieten.
So hätte man einzelne Prozessschritte für alle am lebenden Objekt dokumentiert.
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

14 May 2020, 03:27

Hallo aiFritz,
irgendwie hatte ich das im Urin, das ich nicht der Erste/Einzige bin der diesen geradezu epochalen Einfall hat :lol:
Und ich kann auch nicht wirklich glauben, das da nicht noch viel mehr 'funny stuff' diesbzgl draussen herumschwirrt - von dem deren Coder wahrscheinlich meinen es wäre es nicht wert geteilt zu werden. Schade eigentlich :| Da fällt mir gerade ein, ich hatte da mal eine iniFunc() gebaut, die machte quasi alles mit wehrlosen ini's, hab ich wohl verloren. Schon wieder schade, eigentlich. Anyway ...

Als Verbesserungspotential fällt mir aktuell nur ein die Variable tMsg auf t zu verkürzen :mrgreen: .. die Variadic (hieß das so?), welche mir @just me empfohlen hat, steht z.B. auch noch aus.

[3min later] Mit Sichtung der AHK-Hilfe zur "variadischen Funktion", fiel dann noch der dynamische Funktionsaufruf ins Auge, und wie mein Kollege immer sagte:
Geht dem noch kürser ...
Damit ist nicht mal eine Abfrage nötig, sondern (d)eine Funktion wird schlicht ignoriert wenn die Variable sie nicht explizit mittels 'Namens'Wert enabled.
Außer zum Debuggen, wäre das auch eine prima Idee, um anderen Usern speziell auch neuen Nutzern eine Step by Step Funktion anzubieten.
So hätte man einzelne Prozessschritte für alle am lebenden Objekt dokumentiert.
AH, also sowas wie hier ...

Image

... na dann brauchts jetzt also nur noch ein paar Motivierte, die das in eine Gui giessen :shh: :silent:
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

14 May 2020, 10:37

Zum Debuggen sieht die Gui ja richtig toll aus!

Zum Aufzeigen der Prozessschritte dachte ich allerdings eher an wenige relevante Breakpoints, wo man sieht was als nächstes passiert.
Hier mal dazu meine spartanische Funktion für alle die es interessiert :)

Code: Select all

;Argument ist ein String der als Hinweis der angezeigt wird
;Die globale Variable SlowModus gibt an, ob ein Hinweis als ToolTip angezeigt wird (=true) oder nicht (=false oder leer)
;Um die Verarbeitung fortzusetzen, drückt man die Pausetaste

/*Beispiel
SlowModus := true
ToolTipMsg("Excel Tabelle Umsätze2019.xlsb starten")
Run %MeinPfad%\Umsätze2019.xlsb
*/
ToolTipMsg(Argument){
  global
  If SlowModus{
    ToolTip, % Argument
    pause
    KeyWait Pause, L
    ToolTip
  }
}

BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

14 May 2020, 12:25

Wie? Erst über meinen exessiven Buchstabenverbrauch tMsg ? tMsg (11) reklamieren, um danach selbst einen Funktionsnamen mit 10 Zeichen zu verwenden ... :lol: Also was ich supi finde, ist die Pausenoption des ToolTip - kannte ich so noch nicht. Merci :)
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

14 May 2020, 12:59

Nein, nein ich hab mich doch nicht über Deine Variablenname aufgeregt...sprechende Namen sind doch schon sehr vielsagend :ugeek:
Ich träum ja immer noch von einem universellen ahk Makrorekorder, der alles perfekt aufzeichen kann.
Der bräuchte dann auch so ein schöne Funktion, um die Prozessschritte dokumentieren zu können...aber da wären wir wahrscheinlich fast schon bei RPA angelangt...
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

15 May 2020, 00:10

Nun, wie ich immer wieder feststellen darf, bietet AHK mehr options als man denkt.
Stellt sich lediglich die Frage, ob man diese nutzen kann/möchte um eine "schönheitskosmetisch" ansprechendere Lösung eines :arrow: Debugger-client anzubieten ? :)

:arrow: Debug (ListVars | ListLines | OutputDebug | KeyHistory | DebugVars)
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

15 May 2020, 01:20

Debugview von sysinternals, oder Debugview++ (https://www.autohotkey.com/boards/viewtopic.php?p=297603#p297603) starten
und in den Code

Code: Select all

OutputDebug, % "Zeile " A_LineNumber " varname= " var
Mach ich manchmal. Man muß auch kein Test=an oder soetwas einbauen. Bei Bedarf startet man einfach Debugview.
Meistens wirds dann doch nur ein Tooltip oder eine MsgBox ..

Oooh Mann. Ich sehe gerade: in Scite4AutoHotkey werden die OutputDebugausgaben in der Konsole angezeigt, wenn man den Debugknopf vor dem ausführen drückt.
Da sag ich jetzt nichts weiter zu. Heul.
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

11 Jul 2020, 10:32

warum steht in dem code tMsg ? ?
nachdem ich es aus deinem code entfernt habe funktioniert er genau so
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

11 Jul 2020, 15:40

Siehe hier:

https://ahkde.github.io/docs/Variables.htm#ternary


tmsg ist hier eine Boolean-Variable und das Fragezeichen eine Kurzschreibweise für If...
Die Funktion mit dem gleichen Namen wird nur ausgeführt, wenn tmsg = true
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: tMsg() - Abschaltbare MsgBox-Option für den Testfall

12 Jul 2020, 07:31

danke, das klärt auch andere Fragen die ich noch gehabt hätte

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: hasantr and 21 guests