kann man sich mit AutoSize wunderbar die Fenster-Größe berechnen lassen.
Wenn man aber die Control-Größe eines bestehenden Control's optimieren möchte,
ist mir nur der Umweg über ein neues Dummy-Control in einem Dummy-Fenster eingefallen.
Diese Technik wurde im folgenden Clipboard-Anzeige-Skript angewand.
Nun zu meiner Frage: Kennt Ihr einen eleganteren Weg zur Größenbestimmung?
Code: Select all
; Flexieble Clipboard-Anzeige Fenster passt Goesse an's Clipboard an.
#SingleInstance Force
WinGuiNr7Exist:=false
SelfResized := false
GuiNr:=7
VorberErl:=true
OnClipboardChange:
if VorberErl
{
if(MaxB="")
MaxB := A_ScreenWidth/3 ; Anzeigebreite max 1/3 des Bildschirms
if(Maxh="")
MaxH := A_ScreenHeight-Round(80*A_ScreenDPI/96)
FlexGui(GuiNr,1,"GetClipboard",MaxB,Maxh)
}
return
FlexGui(GuiNr,EditNr,Text,MaxB="",MaxH=""){
global WinGuiNr7Exist,Gui7Edit1,Gui7WinHwnd,Gui99Edit1,SelfResized ; wenn andere GuiNr als 7 verwendet werden,
; muessen die ersten 3 Variabeln kopiert und entsprechend umbenannt werden
if(MaxB = "")
MaxB := A_ScreenWidth/2
if(MaxH = "")
MaxH := A_ScreenHeight/2
if (Text="GetClipboard")
Text:=Clipboard
if (Text="")
Text:="Das Clipboard ist leer!"
if (NOT WinGuiNr7Exist AND Text<>"")
{
Gui,%GuiNr%:New, +HwndGui%GuiNr%WinHwnd,Clip
WinGuiNr7Exist := true
try
Gui,%GuiNr%:Add,Edit,vGui%GuiNr%Edit%EditNr% +Multi -Wrap,%Text%
catch
Gui,%GuiNr%:Add,Edit,vGui%GuiNr%Edit%EditNr% +Multi,beim Erstaufruf`r`nwerden so lange Texte`r`nnicht unterstützt!
Gui %GuiNr%:+Resize
Gui,%GuiNr%:Show,AutoSize NoActivate ; <--hier kann AutoSize verwendet werden
SelfResized := true
}
else
{
DpiKorrektur:=A_ScreenDPI/96
Gui,99:New, +HwndGui99WinHwnd ; <--hier wird ein Dummy-Fenster erzeugt
try
{ ; nur um nochmals
Gui,99:Add,Edit,vGui99Edit1 +Multi -Wrap,%Text%
Gui,99:Show,AutoSize NoActivate ; AutoSize verwenden zu koennen, um
ControlGetPos, X, Y, Breite, Hoehe, ,ahk_id %Gui99WinHwnd% ; die breite und die Hoehe
} ; auslesen zu koennen.
catch
{
Breite := MaxB
Hoehe := MaxH
}
if(Breite > MaxB)
Breite := MaxB
if(Hoehe > MaxH)
Hoehe := MaxH
B2:=(Breite/DpiKorrektur)
H2:=(Hoehe/DpiKorrektur)
Gui,99:Destroy
GuiControl,%GuiNr%: Move, Gui%GuiNr%Edit%EditNr%, W%B2% H%H2%
SelfResized := true
Gui%GuiNr%Edit%EditNr% := Text
GuiControl,%GuiNr%: ,Gui%GuiNr%Edit%EditNr% ,%Text%
}
Gui,%GuiNr%:Show,x1 y1 AutoSize NoActivate
return
}
7GuiSize(GuiHwnd, EventInfo, Breite, Hoehe){
global GuiNr,SelfResized
MouseGetPos,xalt,yalt ; bis zum naechsten gleichnamigen Befehl
Loop 20 ; laesst sich einiges verbessern.
{ ; Ist aber nicht im Fokus dieses Forenbeitrags.
if ( GetKeyState("LButton"))
sleep 100
else
break
}
MouseGetPos,xneu,yneu
MaxB := Breite*2-42 -xalt+xneu
DeltaMaxH := HeigtAfter-(Hoehe/A_ScreenDPI*96+70)
MaxH := Hoehe*2 -yalt+yneu
if SelfResized
{
SoundBeep,6000
SelfResized := false
return
}
else
SoundBeep,1500
FlexGui(GuiNr,1,"GetClipboard",MaxB,MaxH)
SelfResized := true
return
}
7GuiClose:
ExitApp