Optionale Programmparameter

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Optionale Programmparameter

17 Dec 2018, 14:08

Hallo zusammen,

ich habe ein kleines Script, das ich mit Parametern von anderen Programmen aufrufen möchte. Dabei sollen die letzten 3 Parameter optional sein:

Code: Select all

; Zeigt einen Tooltip mit den an dieses Script übergebenen Parametern an:
; 1. Parameter: (Text) - Der Text, der ausgegeben werden soll
; 2. Parameter: (Zeit) - Die Zeit in Sekunden, die der Tooltip angezeigt werden soll (ohne Parameter: 5 Sek.)
; 3. Parameter: (x) - x-Koordinate, wo der Tooltip erscheinen soll
; 4. Parameter: (y) - y-Koordinate, wo der Tooltip erscheinen soll

pText = %1%
pZeit = %2%
pX    = %3%
pY    = %4%

If (A_Args.Length() = 0)
{
	MsgBox, % "Mindestens ein Parameter erforderlich! - Abbruch"
	ExitApp
}

MyToolTip(pText, pZeit, pX, pY)
Return

MyToolTip(Text, Sekunden:=5, x:=100, y:=150){
	ToolTip, % "`n" Text "`n ", x, y
	Sleep Sekunden * 1000
}
Das funktioniert soweit gut, wenn ich alle 4 Parameter übergebe. Lasse ich aber die beiden letzten weg, dann erscheint der Tooltip nicht bei x: 100 / y: 150, sondern in der Nähe des Mauscursors.

Seltsam hierbei finde ich folgendes:
Konstruiere ich meine Funktion nur mit 2 Parametern (letzter optional): MyToolTip(Text, Sekunden:=5)..., dann kann ich bei der Parameterübergabe die Zeit weglassen und es wird die angegebenen 5 Sekunden gewartet.
Was mache ich falsch?

HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Optionale Programmparameter

17 Dec 2018, 16:59

pX und pY sind die Werte die übergeben werden.
Da du pY und pX festlegst werden immer pY und pX übergeben und niemals die Werte die eingegeben werden würden wenn du die beiden weglässt.
Wenn du die Parameter haben oder weglassen willst, je nachdem ob sie vorhanden sind oder nicht müsstest du hier entweder mit A_Args arbeiten oder viele Ifs verwenden.
Die A_Args Variante könnte so aussehen:

Code: Select all

; Zeigt einen Tooltip mit den an dieses Script übergebenen Parametern an:
; 1. Parameter: (Text) - Der Text, der ausgegeben werden soll
; 2. Parameter: (Zeit) - Die Zeit in Sekunden, die der Tooltip angezeigt werden soll (ohne Parameter: 5 Sek.)
; 3. Parameter: (x) - x-Koordinate, wo der Tooltip erscheinen soll
; 4. Parameter: (y) - y-Koordinate, wo der Tooltip erscheinen soll

If (A_Args.Length() = 0)
{
	MsgBox, % "Mindestens ein Parameter erforderlich! - Abbruch"
	ExitApp
}

MyToolTip(A_Args*) ;übergebe den Array als einzelne parameter.
Return

MyToolTip(Text, Sekunden:=5, x:=100, y:=150){
	ToolTip, % "`n" Text "`n ", x, y
	Sleep Sekunden * 1000
}
Recommends AHK Studio
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Optionale Programmparameter

17 Dec 2018, 17:36

...wow :clap:
schön schlank, übersichtlich und läuft! ... und jetzt habe ich endlich auch das "variadische" * verstanden.

Danke nnnik!
Herzliche Grüße aus dem Rheinland
Lucky Joe
garry
Posts: 3763
Joined: 22 Dec 2013, 12:50

Re: Optionale Programmparameter

01 Mar 2019, 07:29

@LuckyJoe, nnnik , danke
hier noch ein Beispiel wie ich Euer script verwendet habe

Code: Select all

;-------- https://www.autohotkey.com/boards/viewtopic.php?f=9&t=60075   user : LuckyJoe , nnnik 
;===================================================
;------- SEND.ahk  < run this after receiver.ahk is created 
/*
e4:="
(Ltrim Join_
Red-1-AAA
Green-2-BBB
Blue-3-CCC"
)
run,%a_scriptdir%\receiver.ahk First_Line 200 20 5 %e4%
return
*/
;===================================================
;====================================================================
;------- RECEIVER.ahk
If (A_Args.Length() = 0)
{
	MsgBox, % "at least 1 parameter - break"
	ExitApp
}
MyReceiver(A_Args*)
Return
;-----------
MyReceiver(P1:="", P2:="", P3:="", P4:="" ,P5:="")
{
;parameter-3 is GUI x-position
;parameter-4 is GUI y-position
global t1
transform,s,chr,32
Gui,1:Font,s12 cBlack, Lucida Console
Gui,add,text,vT1 
stringreplace,p5,p5,_,`n,all
stringreplace,p5,p5,-,%s%,all
Gui, Add, Edit, x10 y1 r10 w600 ReadOnly ,Parameter-1=%P1%`nParameter-2=%P2%`nParameter-5=`n%P5%
Gui, Show, x%p3% y%p4%, Receiver
GuiControl,1:Focus,T1
return
GuiClose:
ExitApp
}
;======================= end receiver.ahk =============================

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 76 guests