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
}