Code: Select all
#Include *i %A_ScriptDir%\Includes\IncludeMaster.ahk
FlexWin(ByRef Opt,Elemente*){
static ; muss zwingend in der ersten Funktions-Zeile stehen.
global Mem,GuiHwnd,oGuiNr,11GuiEdit1,12GuiEdit1,13GuiEdit1,14GuiEdit1,15GuiEdit1
; ,11GuiButton1
KorrekturX := 10
RelLageOpt :=
if NOT KorrekturYEingelesen
{
IfExist %A_Temp%\GuiYEich.txt
{
FileRead,KorrekturY,%A_Temp%\GuiYEich.txt
if NOT ErrorLevel
KorrekturYEingelesen := true
}
}
if(KorrekturY="")
KorrekturY := 48 ; Priv 4K-Laptop
; KorrekturY := 30 ; Gesch-Laptop-Gr
if (GuiNr = "")
GuiNr := 10
if (NOT IsObject(Mem))
Mem := {}
if (NOT IsObject(GuiHwnd))
GuiHwnd := {}
if (NOT IsObject(oGuiNr))
oGuiNr := {}
if(Opt.Close)
{
if(Opt.GuiHwnd <> "")
{
DieseGuiNr := oGuiNr[Opt.GuiHwnd]
Gui,%DieseGuiNr%:Destroy
; + ggf. Aufraeumen bei den Daten
}
else
{
; gosub Schlussabwicklungen
ExitApp
}
}
else if(Opt.New)
{
++GuiNr
DieserGuiName := Opt.GuiName
GuiNewOpt := Opt.GuiNewOpt
if(InStr(GuiNewOpt,"-DPIScale"))
{
DPIScale:=false
ScreenDPI := 96
DieseKorrekturY := 0
}
else
{
DPIScale:=true
ScreenDPI := A_ScreenDPI
DieseKorrekturY := KorrekturY
}
if(Opt.RelLage <> "") ; bspw. "Y|wieVor"
{
if(InStr(Opt.RelLage,"|"))
{
zeichen_von:= StrSplit(Opt.RelLage,"|",A_Space)
Lagewort := zeichen_von.1
HwndTest := zeichen_von.2
if(zeichen_von.2="LastGui")
{
Zeichen := StrSplit(zeichen_von.1)
Loop % Zeichen.MaxIndex()
{
temp := zeichen_von.2 Zeichen[A_Index]
RelLageOpt .= Zeichen[A_Index] %temp% A_Space
}
}
else if HwndTest is Integer
{
IfWinExist,ahk_id %HwndTest%
{
DieseWinhwnd := HwndTest
WinGetPos,WinX1,WinY1,WinW,WinH,ahk_id %DieseWinhwnd%
WinX2 := WinX1 + WinW
WinY2 := WinY1 + WinH
if(Lagewort = "RechtsVon")
{
temp := WinX2+6
RelLageOpt .= A_Space "X" temp A_Space
}
else if(Lagewort = "LinksVon")
{
WinNeuX2 := WinX1 -6
; RelLageOpt muss spaeter befuellt werden.
; RelLageOpt := berechne WinNeuX1 WinNeuX2
MsgBox Opt.RelLage %Lagewort% | ... wird noch nicht unterestuetzt!
}
else if(Lagewort = "OberhalbVon")
{
WinNeuY2 := WinY1 -6
; RelLageOpt muss spaeter befuellt werden.
; RelLageOpt := berechne WinNeuY1 WinNeuY2
MsgBox Opt.RelLage %Lagewort% | ... wird noch nicht unterestuetzt!
}
else if(Lagewort = "UnterhalbVon")
{
temp := WinX2+6
RelLageOpt .= A_Space "X" temp A_Space
}
else
MsgBox Opt.RelLage %Lagewort% | ... wird noch nicht unterestuetzt!
}
}
else
MsgBox Opt.RelLage ... | %HwndTest% wird noch nicht unterestuetzt!
}
else
MsgBox Opt.RelLage ohne | wird noch nicht unterestuetzt!
}
Gui,%GuiNr%:New, %GuiNewOpt% +HwndGui%GuiNr%WinHwnd, %DieserGuiName%
DiesesGuiHwnd := GuiHwnd[GuiNr] := Gui%GuiNr%WinHwnd
Mem[DiesesGuiHwnd] := {}
Mem[DiesesGuiHwnd].Elements := {}
oGuiNr[DiesesGuiHwnd] := GuiNr
EditNr := 1
StaticNr := 1
ButtonNr := 1
InclOut :=
InclOutFI :=
for index,Element in Elemente
{
; Ele[A_Index] := Element
if(NOT IsObject(Element))
{
MsgBox Elemente werden als Objekt erwartet. Stopp
return
}
else
{
Mem[DiesesGuiHwnd].Elements[index] := Element
if(NOT KorrekturYEingelesen AND A_Index=1)
{
if (Element.Opt="")
{
Element.Opt:= " y6 "
EichAnfY := 6
}
}
if(Element.RelLage = "YwieVor")
{
temp1 := (LastX+LastWidth+KorrekturX)/ScreenDPI*96
temp2 := (LastY-KorrekturY)/ScreenDPI*96
; temp2:=1
DynOpt := " X" temp1 " Y" temp2 " "
; DynOpt := " X" 1 " Y" 51 " "
}
else
DynOpt :=
if(Element.Witch = "Edit")
{
DiesesElementOpt := Element.Opt
DiesesElementTxt := Element.Txt
Gui,%GuiNr%:Add,Edit, %DynOpt% g%GuiNr%GuiEdit%EditNr% v%GuiNr%GuiEdit%EditNr% Hwnd%GuiNr%HwndEdit%EditNr% %DiesesElementOpt%,%DiesesElementTxt%
DiesesControl := "Edit" EditNr
Mem[DiesesGuiHwnd].Elements[index].ControlName := DiesesControl
Mem[DiesesGuiHwnd].Elements[index].KeyName := GuiNr "GuiEdit" EditNr
Mem[DiesesGuiHwnd].Elements[index].ControlVar := GuiNr "GuiEdit" EditNr
Mem[DiesesGuiHwnd].Elements[index].ControlLabel := GuiNr "GuiEdit" EditNr
Mem[DiesesGuiHwnd].Elements[index].ControlHwnd := %GuiNr%HwndEdit%EditNr%
++EditNr
}
else if(Element.Witch = "Text")
{
DiesesElementOpt := Element.Opt
DiesesElementTxt := Element.Txt
Gui,%GuiNr%:Add,Text, %DynOpt% Hwnd%GuiNr%HwndStatic%StaticNr% %DiesesElementOpt%,%DiesesElementTxt%
DiesesControl := "Static" StaticNr
Mem[DiesesGuiHwnd].Elements[index].ControlName := DiesesControl
Mem[DiesesGuiHwnd].Elements[index].KeyName := GuiNr "GuiStatic" ButtonNr
Mem[DiesesGuiHwnd].Elements[index].ControlHwnd := %GuiNr%HwndStatic%StaticNr%
++StaticNr
}
else if(Element.Witch = "Button")
{
DiesesElementOpt := Element.Opt
DiesesElementTxt := Element.Txt
Gui,%GuiNr%:Add,Button,g%GuiNr%GuiButton%ButtonNr% v%GuiNr%GuiButton%ButtonNr% Hwnd%GuiNr%HwndButton%ButtonNr% %DynOpt% %DiesesElementOpt%,%DiesesElementTxt%
DiesesControl := "Button" ButtonNr
Mem[DiesesGuiHwnd].Elements[index].ControlName := DiesesControl
Mem[DiesesGuiHwnd].Elements[index].KeyName := GuiNr "GuiButton" ButtonNr
Mem[DiesesGuiHwnd].Elements[index].ControlVar := GuiNr "GuiButton" ButtonNr
Mem[DiesesGuiHwnd].Elements[index].ControlLabel := GuiNr "GuiButton" ButtonNr
Mem[DiesesGuiHwnd].Elements[index].ControlHwnd := %GuiNr%HwndButton%ButtonNr%
++ButtonNr
}
Gui,%GuiNr%:Show,AutoSize
ControlGetPos,DiesesX,DiesesY,DiesesWidth,DiesesHeight,%DiesesControl%,ahk_id %DiesesGuiHwnd%
if(Element.RelLage = "YwieVor")
{
if(LastY <> DiesesY)
ControlMove,%DiesesControl%,,%LastY%,,,ahk_id %DiesesGuiHwnd%
}
if(EichAnfY>0 AND NOT KorrekturYEingelesen AND DiesesY<>"" AND DPIScale)
{
vorlKorrekturY := Round(DiesesY-ScreenDPI*EichAnfY/96)
if vorlKorrekturY is Integer
{
KorrekturY := vorlKorrekturY
FileAppend,%KorrekturY%,%A_Temp%\GuiYEich.txt
KorrekturYEingelesen := true
MsgBox Die Eichung KorrekturY ist mit dem Eichwert %KorrekturY% erfolgt.
}
else
EichAnfY :=
}
if(Element.AutoXYWH <> "")
{
; MsgBox % Element.AutoXYWH
InclOut .= A_Tab A_Tab A_Tab "ControlHwnd := MemGuiHwnd.Elements[" index "].ControlHwnd" "`r`n"
InclOut .= A_Tab A_Tab A_Tab "AutoXYWH(""" Element.AutoXYWH """, ControlHwnd)" "`r`n"
; MsgBox % InclOut
}
LastGuiHwnd := DiesesGuiHwnd
LastX := DiesesX
LastY := DiesesY
LastWidth := DiesesWidth
LastHeight := DiesesHeight
if(LastControlHwnd = Mem[DiesesGuiHwnd].Elements[index].ControlHwnd)
{
MsgBox %A_LineNumber% Zwei Hwnd's dürfen nicht gleich sein!`n%Index%
ListVars
}
}
}
DiesesGuiOpt := Opt.GuiOpt
Gui,%GuiNr%:Show,AutoSize %DiesesGuiOpt% %RelLageOpt% ; <--hier kann AutoSize verwendet werden
; MsgBox %DiesesGuiOpt% # %RelLageOpt%
WinGetPos,LastGuiX,LastGuiY,LastGuiW,LastGuiH,ahk_id %DiesesGuiHwnd%
InclOutFI =
(
%GuiNr%GuiSize(MemGuiHwnd="",GuiNr="",GuiHwnd=""){
global EndeHaupPrg
if EndeHaupPrg
{
if(IsObject(MemGuiHwnd))
{
%InclOut%
}
}
}
)
IfNotExist % A_ScriptDir "\includes\" GuiNr "GuiSize.ahk"
{
IfNotExist % A_ScriptDir "\includes"
FileCreateDir, % A_ScriptDir "\includes"
FileAppend,%InclOutFI%, % A_ScriptDir "\includes\" GuiNr "GuiSize.ahk"
if NOT ErrorLevel
FileAppend, #include *i %A_ScriptDir%\Includes\%GuiNr%GuiSize.ahk`r`n,%A_ScriptDir%\Includes\IncludeMaster.ahk
}
; MsgBox % InclOutFI
}
Mem[DiesesGuiHwnd].Opt := Opt
if(Opt.GuiHwnd = "")
Opt.GuiHwnd := DiesesGuiHwnd
Opt :=
return DiesesGuiHwnd
11GuiEdit1:
11GuiEdit2:
11GuiEdit3:
12GuiEdit1:
12GuiEdit2:
12GuiEdit3:
13GuiEdit1:
13GuiEdit2:
13GuiEdit3:
14GuiEdit1:
14GuiEdit2:
14GuiEdit3:
15GuiEdit1:
15GuiEdit2:
15GuiEdit3:
if (IsFunc("GuiEditAction"))
{
GuiNr:=SubStr(A_ThisLabel,1,2)
Gui,%GuiNr%:Submit, NoHide ; wird benoetigt sonst wird vVariable nicht aktualisiert beim Schreiben
DieserEditVarName := SubStr(A_ThisLabel,1,2) "GuiEdit" SubStr(A_ThisLabel,0)
DieserfuncName := "GuiEditAction"
%DieserfuncName%(GuiHwnd[SubStr(A_ThisLabel,1,2)],A_ThisLabel,%DieserEditVarName%)
}
return
11GuiButton1:
11GuiButton2:
11GuiButton3:
12GuiButton1:
12GuiButton2:
12GuiButton3:
13GuiButton1:
13GuiButton2:
13GuiButton3:
14GuiButton1:
14GuiButton2:
14GuiButton3:
15GuiButton1:
15GuiButton2:
15GuiButton3:
if (IsFunc("GuiButtonAction"))
{
DieserfuncName := "GuiButtonAction"
%DieserfuncName%(GuiHwnd[SubStr(A_ThisLabel,1,2)],A_ThisLabel)
}
return
11GuiClose:
12GuiClose:
13GuiClose:
14GuiClose:
15GuiClose:
if (IsFunc("GuiCloseAction"))
{
DieserfuncName := "GuiCloseAction"
SchliessHwnd := GuiHwnd[SubStr(A_ThisLabel,1,2)]
%DieserfuncName%(SchliessHwnd,A_ThisLabel)
}
return
11GuiSize:
12GuiSize:
13GuiSize:
14GuiSize:
15GuiSize:
if EndeHaupPrg
{
DieseGuiNr := SubStr(A_ThisLabel,1,2)
; MsgBox %DieseGuiNr% %A_ThisLabel%
DiesesGuiHwnd := GuiHwnd[DieseGuiNr]
; MsgBox % DiesesGuiHwnd
df := Func(A_ThisLabel)
df.Call(Mem[DiesesGuiHwnd],DieseGuiNr,DiesesGuiHwnd)
}
return
}
; =================================================================================
; Function: AutoXYWH
; Move and resize control automatically when GUI resizes.
; Parameters:
; DimSize - Can be one or more of x/y/w/h optional followed by a fraction
; add a '*' to DimSize to 'MoveDraw' the controls rather then just 'Move', this is recommended for Groupboxes
; cList - variadic list of ControlIDs
; ControlID can be a control HWND, associated variable name, ClassNN or displayed text.
; The later (displayed text) is possible but not recommend since not very reliable
; Examples:
; AutoXYWH("xy", "Btn1", "Btn2")
; AutoXYWH("w0.5 h 0.75", hEdit, "displayed text", "vLabel", "Button1")
; AutoXYWH("*w0.5 h 0.75", hGroupbox1, "GrbChoices")
; ---------------------------------------------------------------------------------
; Version: 2015-5-29 / Added 'reset' option (by tmplinshi)
; 2014-7-03 / toralf
; 2014-1-2 / tmplinshi
; requires AHK version : 1.1.13.01+
; =================================================================================
AutoXYWH(DimSize, cList*){ ; http://ahkscript.org/boards/viewtopic.php?t=1079
static cInfo := {}
If (DimSize = "reset")
Return cInfo := {}
For i, ctrl in cList {
ctrlID := A_Gui ":" ctrl
If ( cInfo[ctrlID].x = "" ){
GuiControlGet, i, %A_Gui%:Pos, %ctrl%
MMD := InStr(DimSize, "*") ? "MoveDraw" : "Move"
fx := fy := fw := fh := 0
For i, dim in (a := StrSplit(RegExReplace(DimSize, "i)[^xywh]")))
If !RegExMatch(DimSize, "i)" dim "\s*\K[\d.-]+", f%dim%)
f%dim% := 1
cInfo[ctrlID] := { x:ix, fx:fx, y:iy, fy:fy, w:iw, fw:fw, h:ih, fh:fh, gw:A_GuiWidth, gh:A_GuiHeight, a:a , m:MMD}
}Else If ( cInfo[ctrlID].a.1) {
dgx := dgw := A_GuiWidth - cInfo[ctrlID].gw , dgy := dgh := A_GuiHeight - cInfo[ctrlID].gh
For i, dim in cInfo[ctrlID]["a"]
Options .= dim (dg%dim% * cInfo[ctrlID]["f" dim] + cInfo[ctrlID][dim]) A_Space
GuiControl, % A_Gui ":" cInfo[ctrlID].m , % ctrl, % Options
} } }
global GuiHwnd,oGuiNr,11GuiEdit1,12GuiEdit1,13GuiEdit1,14GuiEdit1,15GuiEdit1,EndeHaupPrg
; MsgBox % 96/A_ScreenDPI
; --------------------------------------------------------------------------------
Opt := {}
Opt.New := true
; Opt.GuiNewOpt := " +resize " ; -DPIScale"
Opt.GuiNewOpt := " +resize -DPIScale"
Opt.GuiName := "Name"
Opt.GuiOpt := " x6 y6 "
Elem1 := {}
Elem1.Witch := "Text"
Elem1.Txt := "Name eingeben"
Elem2 := {}
Elem2.Witch := "Edit"
Elem2.AutoXYWH := "WH"
temp =
(
Vorname [zweiter Vorname] Name
weitere Vornamen
Spitz-Name
Künstler-Name
Privat:
Straße Hausnummer
Zusatz
D-12345 Meinestadt
Deutschland
Tel. Festnetz
Tel. Mobil
Fax
E-Mail
HomePage
Sonstiges
Privat:
Straße Hausnummer
Zusatz
D-12345 Meinestadt
Deutschland
Tel. Festnetz
Tel. Mobil
Fax
E-Mail
HomePage
Sonstiges
)
Elem2.Txt := temp
Elem3 := {}
Elem3.Witch := "Button"
Elem3.AutoXYWH := "Y"
Elem3.Txt := "Name speichern"
Elem4 := {}
Elem4.RelLage := "YwieVor"
Elem4.Witch := "Button"
Elem4.AutoXYWH := "XY"
Elem4.Opt := "X260"
Elem4.Txt := "überspringen"
FirstWinHwnd := FlexWin(Opt,Elem1,Elem2,Elem3,Elem4)
; MsgBox vor Resize
; AutoXYWH("Resize")
; --------------------------------------------------------------------------------
Opt := {}
Opt.New := true
Opt.GuiNewOpt := " +resize "
Opt.GuiName := "Suche"
Opt.RelLage := "X|LastGui" ; (relative-)Laage geplant: FreieStelle, X/Y/W/H|wieVor X/Y/W/H|Hwnd rechts/links/ueber/unter|Hwnd
; dito fuerd Elem#.
; Opt.GuiOpt := " x1 y1 " ; oder Zeile drueberRelLage
Elem1 := {}
Elem1.Witch := "Edit"
Elem1.Txt := "Vor-Filter "
Elem2 := {}
Elem2.RelLage := "YwieVor"
Elem2.Witch := "Edit"
Elem2.AutoXYWH := "W"
Elem2.Txt := "End-Filter "
Elem3 := {}
Elem3.Opt := " x10 "
Elem3.Witch := "Button"
Elem3.Txt := "Suche"
Elem4 := {}
Elem4.RelLage := "YwieVor"
Elem4.Witch := "Button"
Elem4.Txt := "öffnen"
Elem5 := {}
Elem5.RelLage := "YwieVor"
Elem5.Witch := "Button"
Elem5.Txt := "einfügen"
Elem6 := {}
Elem6.Witch := "Edit"
Elem6.AutoXYWH := "WH"
Elem6.Opt := " x10 "
temp =
(
; --------------------------------------------------------------------------------
; Gui's mal kurz erstellen mit Grund-Funktionalität
; Window / Gui erstellen
Opt := {} ; Objekt Opt anlegen
Opt.New := true ; Opt füllen
Opt.GuiNewOpt := " +resize " ; Gui Optionen bei Bedarf
Opt.RelLage := "REchtsVon|" FirstWinHwnd ; (relative-)Laage Hwnd von vorigem Gui
Opt.GuiOpt := " y6 " ; Optional oben
; ; Control's einfügen
Elem1 := {} ; Objekt Elem1 anlegen
Elem1.Witch := "Edit" ; Element füllen hier ein Edit-Feld
Elem1.Txt := "Vor-Filter " ; Text reinschreiben
Elem2 := {} ; weitere Element-Objekte anlegen
Elem2.Witch := "Text" ; hier statischer Text
Elem2.Txt := "Dieses Gui dient nur zur Demonstration"
Elem3 := {}
Elem3.Witch := "Button" ; hier Button
Elem3.Txt := "OK"
Elem3.AutoXYWH := "XY"
Elem3.Opt := " x300 "
FlexWin(Opt,Elem1,Elem2,Elem3) ; Gui zeichnen und mit Grundfunktionen
; - GuiClose
; - GuiSize
; ...
; versehen
; --------------------------------------------------------------------------------
)
Elem6.Txt := temp
FlexWin(Opt,Elem1,Elem2,Elem3,Elem4,Elem5,Elem6)
; --------------------------------------------------------------------------------
; Gui's mal kurz erstellen mit Grund-Funktionalität
; Window / Gui erstellen
Opt := {} ; Objekt Opt anlegen
Opt.New := true ; Opt füllen
Opt.GuiNewOpt := " +resize " ; Gui Optionen bei Bedarf
Opt.RelLage := "REchtsVon|" FirstWinHwnd ; (relative-)Laage Hwnd von vorigem Gui
Opt.GuiOpt := " y6 " ; Optional oben
; ; Control's einfügen
Elem1 := {} ; Objekt Elem1 anlegen
Elem1.Witch := "Edit" ; Element füllen hier ein Edit-Feld
Elem1.Txt := "Vor-Filter " ; Text reinschreiben
Elem2 := {} ; weitere Element-Objekte anlegen
Elem2.Witch := "Text" ; hier statischer Text
Elem2.Txt := "Dieses Gui dient nur zur Demonstration"
Elem3 := {}
Elem3.Witch := "Button" ; hier Button
Elem3.Txt := "OK"
Elem3.AutoXYWH := "XY"
Elem3.Opt := " x300 "
FlexWin(Opt,Elem1,Elem2,Elem3) ; Gui zeichnen und mit Grundfunktionen
; - GuiClose
; - GuiSize
; ...
; versehen
; --------------------------------------------------------------------------------
Opt := {}
Opt.New := true
Opt.GuiName := "Schluss"
xVersatz := A_ScreenWidth/4
yVersatz := A_ScreenHeight/4
Opt.GuiOpt := " x" xVersatz " y" yVersatz
Elem1 := {}
Elem1.Witch := "Text"
Elem1.Txt := "Stop"
Elem2 := {}
Elem2.Witch := "Edit"
Elem2.Txt := "Mit dem Button`r`nwird das Skript vollstaendig beendet"
Elem3 := {}
Elem3.Witch := "Button"
Elem3.Txt := "ExitApp"
CloseAllHwnd := FlexWin(Opt,Elem1,Elem2,Elem3)
; --------------------------------------------------------------------------------
EndeHaupPrg := true
return
; --------------------------------------------------------------------------------
#q::
for DieseHwnd,GuiNr in oGuiNr
{
Opt.GuiHwnd := DieseHwnd
Opt.Close := true
FlexWin(Opt)
ExitApp
}
return
GuiClose:
Exitapp
TooltipWeg:
ToolTip
return
GuiEditAction(DiesesHwnd,DiesesLabel,Text){
global CloseAllHwnd,GuiHwnd
if (DiesesHwnd = CloseAllHwnd) ; nur fuer Demo
ExitApp ; nur fuer Demo
ToolTip %DiesesHwnd% %DiesesLabel%`r`n%Text%
SetTimer, TooltipWeg,-3000
return
}
GuiButtonAction(DiesesHwnd,DiesesLabel){
global CloseAllHwnd,GuiHwnd
if (DiesesHwnd = CloseAllHwnd) ; nur fuer Demo
ExitApp ; nur fuer Demo
MsgBox %DiesesHwnd% %DiesesLabel%
return
}
GuiCloseAction(DiesesHwnd,DiesesLabel){
global CloseAllHwnd,GuiHwnd
MsgBox, 8228, Fenster schließen, Möchten Sie das Fenster %DiesesHwnd% wirklich schließen
IfMsgBox,Yes
{
Opt := {}
Opt.GuiHwnd := DiesesHwnd
Opt.Close := true
FlexWin(Opt)
}
else
return
; MsgBox Fenster zu %DiesesHwnd% %DiesesLabel%
return
}
Intressenten
Helfer
Übernahmekandidaten