Re: ZackZackOrdner
Posted: 01 May 2016, 18:05
Mit der Version 0.217 ist eine Funktion mitgekommen, die auch für andere Skripte interessant sein könnte.
Für Leute denen MsgBox zu wenig Freiheiten lässt, die aber nicht immer gleich ein eigenes Gui-Fenster coden möchten. Sie unterstützt:
- bis zu 9 flexibel beschriftbare (rudimentär positionierbare) Buttons
- ein Text-Feld welches zur Anzeige und oder zur Rückgabe verwendet werden kannn
- ein Haupt-Fenster
Ohne dass für den Funktionsaufruf Gui's verinnerlicht werden müssen.
Im Quelltext finden sich AufrufBeispiele.
Code: Select all
AbfrageFenster()
Für Leute denen MsgBox zu wenig Freiheiten lässt, die aber nicht immer gleich ein eigenes Gui-Fenster coden möchten. Sie unterstützt:
- bis zu 9 flexibel beschriftbare (rudimentär positionierbare) Buttons
- ein Text-Feld welches zur Anzeige und oder zur Rückgabe verwendet werden kannn
- ein Haupt-Fenster
Ohne dass für den Funktionsaufruf Gui's verinnerlicht werden müssen.
Im Quelltext finden sich AufrufBeispiele.
Code: Select all
AbfrageFenster(FuncEinstellungen="",FensterTitel="",Frage="",ButtonText1="",ButtonText2="",ButtonText3="",ButtonText4="",ButtonText5="",ButtonText6="",ButtonText7="",ButtonText8="",ButtonText9="")
{
; FuncEinstellungen ist ein Objekt
; FuncEinstellungen: AbfrageFensterOnTop DisableMainWindow EditBeiErstEinfuegenLeeren EditHatFokus EditReadOnly MarkiereEdit <--- true or false
; FuncEinstellungen: DefaultButton <--- # or OK # ist die Nummer des Buttons
; AufrufBeispiele:
/*
AbfrageFenster() ; warten auf weiter
AbfrageFenster(,"Clipboard Anzeige",Clipboard) ; Anzeige der Zwischen-Ablage
FuncEinstellungen := {DefaultButton: 1}
Antwort:=AbfrageFenster(FuncEinstellungen,"Clipboard 2 Text",Clipboard,"Clipboard Inhalt in Text wandeln","Clipboard wie editiert uebernehmen","Abbruch") ; bearbeiten der Zwischen-Ablage
if(SubStr(Antwort,1,1)=1)
Clipboard:=Clipboard
else if(SubStr(Antwort,1,1)=2)
Clipboard:=SubStr(Antwort,2)
FuncEinstellungen := {DefaultButton: 7, EditReadOnly: 1}
AntwortButtonNummer:=SubStr(AbfrageFenster(FuncEinstellungen,"AnfangsBuchstabe","mit welchem Buchstabe soll begonnen werden?","a","b","c","d","e",">>>>mit einer Zahl",">>>>>>>>>>>>>>>>Abbruch"),1,1)
MsgBox % "Sie haben mit dem " AntwortButtonNummer ". Button geantwortet"
FuncEinstellungen := {DefaultButton: 2,EditBeiErstEinfuegenLeeren:1,EditHatFokus:1}
Antwort:=AbfrageFenster(FuncEinstellungen,"Notiz","Bitte schreiben Sie in dieses Feld Ihre Notiz in Prosa`n`n`n`nHinweis: das erste Zeichen wird versschluckt.",">>>habe keine Notiz",">>>>>>Notiz Hinterlassen")
if(SubStr(Antwort,1,1)=2)
MsgBox % SubStr(Antwort,2)
FuncEinstellungen := {DefaultButton: 2,EditHatFokus:1,MarkiereEdit:1}
Antwort:=AbfrageFenster(FuncEinstellungen,"Notiz","Bitte schreiben Sie in dieses Feld Ihre Notiz in Prosa`n`n`n`n",">>>habe keine Notiz",">>>>>>Notiz Hinterlassen")
if(SubStr(Antwort,1,1)=2)
MsgBox % SubStr(Antwort,2)
ExitApp
*/
static ; alle
AbfrageFensterErg:=0
; DefaultEinstellungen
DisableMainWindow:=false
AbfrageFensterOnTop:=true
EditReadOnly:=false
EditBeiErstEinfuegenLeeren:=false
DefaultButton:="OK"
EditHatFokus:=false
MarkiereEdit:=false
FirstEdit:=true
if(IsObject(FuncEinstellungen))
{
For FuncVarName, FuncVarInhalt in FuncEinstellungen
%FuncVarName% := FuncVarInhalt
}
if(FensterTitel="")
FensterTitel:=A_ScriptName
if(Frage="")
Frage:="weiter?"
Frage4711:=Frage
if(ButtonText1="")
ButtonText1:="OK"
ReadOnly=
If EditReadOnly
ReadOnly=ReadOnly
StringSplit, Frage4711Array, Frage4711, `n, `r
if LeerZeilenAmEndeWeglassen
{
Loop
{
IF(SubStr(Frage4711, 0,1)="`n")
StringTrimRight, Frage4711, Frage4711, 1
Else
Break
}
}
Default=
Loop, 10
{
If(ButtonText%A_Index%<>"")
{
ButtonText4711%A_Index%:=ButtonText%A_Index%
NeachRechts%A_Index%:=1
Index:=A_Index
Loop
{
IF(SubStr(ButtonText4711%Index%, 1,1)=">")
{
++NeachRechts%Index%
StringTrimLeft, ButtonText4711%Index%, ButtonText4711%Index%, 1
}
Else
Break
}
If (DefaultButton="OK")
{
IF(ButtonText4711%A_Index%="OK")
Default=Default
Else
Default=
}
else if DefaultButton is Integer
{
if (A_Index=DefaultButton)
Button%A_Index%Default:=true
else
Button%A_Index%Default:=false
}
}
Else
{
ButtonText47110:=A_Index - 1
Break
}
}
; Gui, 4:+owner1 ; Make the main window (Gui #1) the owner of the "about box" (Gui #2).
Gui,4:New,+HwndGui4WinHwnd
if DisableMainWindow
Gui +Disabled ; Disable main window.
if AbfrageFensterOnTop
Gui,4:+Resize AlwaysOnTop
else
Gui, 4:+Resize ; Make the window resizable.
loop % ButtonText47110
{
ThisButtonText:=ButtonText4711%A_Index%
ThisNeachRechts:=NeachRechts%A_Index%*4
if DefaultButton is Integer
{
if Button%A_Index%Default
Default=Default
else
Default=
}
If(A_Index=1 And NeachRechts%A_Index%>1)
Gui, 4:Add, Button, x%ThisNeachRechts% gG4Button%A_Index% %Default%, %ThisButtonText%
Else If(A_Index=1)
Gui, 4:Add, Button, gG4Button%A_Index% %Default%, %ThisButtonText%
Else
Gui, 4:Add, Button, x+%ThisNeachRechts% gG4Button%A_Index% %Default%, %ThisButtonText%
}
If(Frage4711<>"")
{
MaxBreite:=40
Loop, parse, Frage4711, `n, `r ; Specifying `n prior to `r allows both Windows and Unix files to be parsed.
{
ThisBreite:=strlen(A_LoopField)
If(MaxBreite<ThisBreite)
MaxBreite:=ThisBreite
}
EditBreite:=MaxBreite*10
If(A_ScreenWidth<EditBreite)
EditBreite:=A_ScreenWidth
Gui, 4:Add, Edit, HwndHwndG4Edit1 vFrage4711 gFrage4711 %ReadOnly% X1 W%EditBreite% R%Frage4711Array0%
}
Gui, 4:Show,, %FensterTitel%
if EditHatFokus
ControlFocus,,ahk_id %HwndG4Edit1% ; Edit fokusieren
If(Frage4711<>"")
GuiControl,4:, Frage4711, %Frage4711% ; Put the text into the control.
if MarkiereEdit
{
ControlFocus,,ahk_id %HwndG4Edit1% ; Edit fokusieren
Controlsend,Edit1,{Ctrl Down}a{Ctrl Up},ahk_id %Gui4WinHwnd% ; Edit markieren
}
Goto NachRet
4GuiSize:
if ErrorLevel = 1 ; The window has been minimized. No action needed.
return
; Otherwise, the window has been resized or maximized. Resize the Edit control to match.
NewWidth := A_GuiWidth - 2
ControlGetPos , Edit1X, Edit1Y, Edit1Width, Edit1Height, Edit1, %FensterTitel%
SysGet, TitleBarHeight, 31, SM_CYSIZE
; msgbox % TitleBarHeight
NewHeight := A_GuiHeight - Edit1Y + TitleBarHeight +4
; TrayTip,FensterGröße, % NewWidth " " NewHeight,5
GuiControl, Move, Edit1, W%NewWidth% H%NewHeight%
; GuiControl, Focus, Edit1
return
Frage4711:
if (FirstEdit and EditBeiErstEinfuegenLeeren)
{
ControlGetFocus, FocusedGuiConntrol,A
if (FocusedGuiConntrol="Edit1")
{
Frage4711:=
GuiControl,,%HwndG4Edit1%,
FirstEdit:=false
}
}
return
G4Button9:
++AbfrageFensterErg
G4Button8:
++AbfrageFensterErg
G4Button7:
++AbfrageFensterErg
G4Button6:
++AbfrageFensterErg
G4Button5:
++AbfrageFensterErg
G4Button4:
++AbfrageFensterErg
G4Button3:
++AbfrageFensterErg
G4Button2:
++AbfrageFensterErg
G4Button1:
++AbfrageFensterErg
Gui, Submit
AbfrageFensterErg=%AbfrageFensterErg%%Frage4711%
4GuiClose: ; User closed the window.
Gui, Destroy
Gui -Disabled ; Enable main window.
return AbfrageFensterErg
NachRet:
; WinWaitClose, %FensterTitel%
WinWaitClose, ahk_id %Gui4WinHwnd%
Gui -Disabled ; Enable main window.
return AbfrageFensterErg
}