Bei +Border wird Edit auf readonly gesetzt Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Ahk_fan
Posts: 238
Joined: 31 Aug 2018, 14:34
Contact:

Bei +Border wird Edit auf readonly gesetzt

Post by Ahk_fan » 18 Feb 2023, 04:14

Hallo,

hab folgendes komisches Verhalten:
In einem ParentGui wird ein Child-Gui geöffnet, wenn im :New die Option "+Border" steht, werden die Edit-Felder auf "readonly" gesetzt! Sehr eigenartig. als Version ist bei mir aktuell AHK 1.1.36.02, aber bei den älteren verhält es sich auch so.
Ein Beispiel:
-> auf "Verwaltung" klicken, Fenster öffnet sich, dann mal versuchen in die Editfelder zu tippen, geht nicht
-> Gui, 5:new, +ParentProgMain +Resize -DPIScale +hwndhVerwaltung5 +MaxSize%WinSize5W%x%WinSize5H% +Border +ToolWindow
Einfach mal -Border daraus machen,
-> tippen geht wieder

Code: Select all

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
SetBatchLines -1
SysGet, VirtualHeight, 79
SysGet, VirtualWidth, 78
VirtualHeight := VirtualHeight

SysGet, AnzahlMonitore, MonitorCount
if AnzahlMonitore > 1
	SysGet, Monitor, MonitorWorkArea , 2
else
	SysGet, Monitor, MonitorWorkArea , 1
;msgbox %MonitorTop% / %MonitorRight%
VirtualWidth := MonitorRight
hIEWind := VirtualHeight*1-50
wIEWind := round(hIEWind*0.75)
if (MonitorWorkAreaBottom = "" or MonitorWorkAreaRight = "")
{
	MonitorWorkAreaBottom := VirtualHeight
	MonitorWorkAreaRight := VirtualWidth
}

	Gui, ProgMain:new, -DPIScale +OwnDialogs +OwnDialogs +LastFound +MinSize1400x900 +Resize 
	Gui_ProgMain_ID := WinExist()
	Gui, ProgMain:Color, 0x5D6D7E
	Gui, ProgMain:Font, s11 norm cBlack, Arial
	Gui, ProgMain:Margin, 10, 10
	Gui, ProgMain:Font, bold s16
	;-----------------------------------------
		Gui, ProgSubMenu:New, -DPIScale -Border -Resize -Caption +ParentProgMain hwndhProgSubMenu
		Gui, ProgSubMenu:Color, 0x5D6D7E
		Gui, ProgSubMenu:Font, bold s12, Arial
		Gui, ProgSubMenu:add, Button, xm ym Section w220 gStartGui5, Verwaltung
		
		Gui, ProgSubMenu:add, Button, xs w220 , Betriebauftrag
		Gui, ProgSubMenu:add, Button, y+80 w220 gNeuLaden vNeuLadenButton, Menü neu laden
		Gui, ProgSubMenu:Show, % "x3 y3 h" VirtualHeight-100 " w" 240
	Gui, ProgMain:Add, Text, % "y0 x240 w3 h" VirtualHeight-100 " +0x1000"
	Gui, ProgMain:Font, norm cBlack s8, Arial
	Gui, ProgMain:Add, StatusBar, 0x100

	Gui, ProgMain:show, % "x0 y0 Maximize", Test
	WinGetPos , ProgMainX, ProgMainY, ProgMainWidth, ProgMainHeight, %ProgramTitle%
	ProgMainSizeH := ProgMainHeight-140
	ProgMainSizeW := ProgMainWidth-260
	GuiControl, MoveDraw, NeuLadenButton, % "x" 10 " y" ProgMainHeight-150
	OnMessage(0x03, "WM_MOVE")
Return

Neuladen:
	reload
return

ProgMainGuiClose:
	ExitApp
return

;#########################################################################################
StartGui5:
	WinAbstand5X := 10
	WinAbstand5Y := 10
	WinSize5H := ProgMainSizeH+30
	WinSize5W := ProgMainSizeW-80

	WinSize5WTab := WinSize5W-50
	WinSize5HTab := WinSize5H-50

	WinSize5WIE := round(WinSize5WTab*0.4)
	WinSize5HIE := WinSize5HTab-100

	WinSize5WLV1 := WinSize5WTab-WinSize5WIE-(WinAbstand5X*3)
	WinSize5HLV1 := 400

	WinSize5WZW1 := round(WinSize5WLV1/3-(2*WinAbstand5X)/3)
	WinSize5HZW1 := round((WinSize5HTab-WinSize5HLV1-1*WinAbstand5Y)/2)-50

	WinSize5WZW2 := round(WinSize5WLV1/3-(2*WinAbstand5X)/3)
	WinSize5HZW2 := round(WinSize5HZW1*0.7)-10

	WinSize5WBut := 150
	WinSize5HBut := 25
	Gui, 5:new, +ParentProgMain +Resize -DPIScale +hwndhVerwaltung5 +MaxSize%WinSize5W%x%WinSize5H% +Border +ToolWindow
	Gui, 5:Color, 0x5D6D7E
	Gui, 5:Margin, %WinAbstand5X%, %WinAbstand5Y%
	Gui, 5:Font, s11 norm cBlack cBlack, Arial
	Gui, 5:Font, norm s8
	;-----------------------------------------
	Gui, 5:Font, norm s10
	Gui, 5:Add, Tab2,% "x" WinAbstand5X " y" WinAbstand5Y " h" WinSize5HTab " w" WinSize5WTab " vGewaehlerTab AltSubmit -buttons ", Anfragen|KundenBestellungen|Betriebsaufträge|Artikel
	;-------------------------------
	Gui, 5:Tab, 1
	Gui, 5:Font, norm s10

	Gui, 5:add, text, x+5 Section, Vorgang:
	Gui, 5:add, Edit, x+10 h35 w200  vvListeDatenSucheVorgang, 
	Gui, 5:add, text, x+10 h35 , Kunde:
	Gui, 5:add, Edit, x+10 w150 h35vvListeDatenSucheKunden,     
	Gui, 5:add, Edit, x+10 w100 h35 vSQLvListeDatenSucheKunden, 
	
	Gui, 5:Font, norm s8
	Gui, 5:add, ListView, % "xs Section w" WinSize5WLV1 " h" WinSize5HLV1 " HWNDhHLV grid AltSubmit  vResultsLV  +LV0x10000", Art|Bild|VorgangNr|Vorgang|Kunde|TERMIN|Jahr|DatumAnfrage|DatumAuftrag|PfadAnfrage|PfadAuftrag|Art|StatusVorgang|KundenNr|Beschreibung
	Gui, 5:Add, ActiveX, % "ys w" WinSize5WIE " h" WinSize5HIE " vWB VScroll", Mozilla.Browser
	ComObjConnect(WB, WB_events) 
	;-------------------------------------------------------------------------------
	Gui, 5:Tab, 2
	
	gui, 5:Add, Edit, x10 y+10 Section vBestellungenKundeKundeFilter 
	gui, 5:Add, Edit, ys vBestellungenKundeBestellnrFilter 
	Gui, 5:add, ListView, % "xs Section w" WinSize5WLV1 " h" WinSize5HLV1 " HWNDHLVBestellungenKunde grid AltSubmit  vResultsLVBestellungenKunde  +LV0x10000", LfdNr|Kunde|Bestellnummer|Liefertermin|Auftrag BIOS|Ersteller|Datum Ablage|Pfad|erledigt
	
	;-------------------------------------------------------------------------------
	Gui, 5:show, x250 y10 w%WinSize5W% h%WinSize5H% ,Übersicht
Return


GuiShowVerwaltung:
	Gui, 5:show
return

5GuiClose:
	SG2 := ""
	Gui, 5:Destroy
return
;#########################################################################################
WM_MOVE(wParam, lParam)
{
    X := lParam & 0xFFFF
    Y := lParam >> 16
	Gui +LastFound 
    if A_GuiControl
        Control := "`n(in control " . A_GuiControl . ")"
	;https://www.autohotkey.com/board/topic/50516-onmessage-wm-move-wm-windowposchanged-wait-till-done/
	;https://www.autohotkey.com/board/topic/96671-prevent-window-from-moving/  
	;https://www.autohotkey.com/board/topic/46525-detect-window-move/
	; Timer als Function https://www.autohotkey.com/boards/viewtopic.php?t=13010
	;global MovedGui := A_Gui
	;ToolTip You are moving the Gui window #%A_Gui% at client coordinates %X%x%Y%.%Control%/%A_GuiControl%
	If (X < 250 and (A_Gui = "5"))
	{
		
		funcFin := Func("Finished").bind(A_Gui,X,Y)
		SetTimer,% funcFin,-100
		;Gui, %A_Gui%:Show, x250
		;
	}
	If (Y < 35 and (A_Gui = "5"))
	{
		;ToolTip You are moving the Gui window #%A_Gui% at client coordinates %X%x%Y%.%Control%/%A_GuiControl%
		funcFin := Func("Finished").bind(A_Gui,X,Y)
		SetTimer,% funcFin,-100
		;Gui, %A_Gui%:Show, y40
	}
		;GuiControl, %A_Gui%:MoveDraw, %Control%, x250 y%Y%		
}

Finished(GuiW,X:=-9999999, Y:=-9999999){
if (GuiW = "ProgMain" or GuiW = "ProgSubMenu")
	return
	
	if (X < 250 and X != -9999999)
	{
		;Gui, %GuiW%:Hide
		Ynew := Y-30
		Gui, %GuiW%:Show, x250 y%Ynew%
	}
	if (Y < 10 and Y != -9999999)
	{
		;Gui, %GuiW%:Hide
		Gui, %GuiW%:Show, x%X% y10
	}
}
hat jemand eine Idee?
regards,
AHK_fan :)
https://hr-anwendungen.de
just me
Posts: 9574
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Bei +Border wird Edit auf readonly gesetzt  Topic is solved

Post by just me » 19 Feb 2023, 05:37

Moin,

dieses Problem wird immer mal wieder geschildert. Die Edits sind nicht 'readonly', es gelingt nur nicht immer, das 'Kindfenster' per Mausklick zu aktivieren. Du kannst allerdings per Tab-Taste in das Fenster gelangen.

Das Problem hängt offenbar mit der Option +Parent... zusammen, wenn das Fenster einen Rahmen mit Titelzeile hat. Dann gibt es häufig Probleme mit der Aktivierung, und Eingaben wie Maus und Tastatur gehen immer nur an das vollständig aktivierte Vordergrundfenster. Ohne Titelzeile gibt es diese Probleme in der Regel nicht. Anscheinend versucht AHK, das Hauptfenster (Elternfenster) aktiv zu halten, wenn versucht wird, das dem Hauptfenster zugewiesene Kindfenster zu aktivieren.

Man kann das weitestgehend umgehen, indem man nicht die Option +Parent... verwendet, sondern das 'Elternfenster' mit der API-Funktion SetParent() setzt. Dann sind die Fenster aber deutlich 'lockerer' miteinander verbunden und die Aktivierung des Kindfensters deaktiviert die Titelleiste des Elternfensters.

Code: Select all

	Gui, 5:new, +Resize -DPIScale +hwndhVerwaltung5 +MaxSize%WinSize5W%x%WinSize5H% +Border +ToolWindow ; <<<<< +Parent entfernt
	...
	DllCall("SetParent", "Ptr", hVerwaltung5, "Ptr", Gui_ProgMain_ID) ; <<<<< eingefügt
	Gui, 5:show, x250 y10 w%WinSize5W% h%WinSize5H% ,Übersicht
Ich verstehe nicht, wofür Kindfenster eine Titelzeile brauchen.
Ahk_fan
Posts: 238
Joined: 31 Aug 2018, 14:34
Contact:

Re: Bei +Border wird Edit auf readonly gesetzt

Post by Ahk_fan » 23 Feb 2023, 04:20

Hallo @just me

vielen Dank. Das hat funktioniert. Meine Kindfenster brauchen eine Titelzeile, weil ich mehrere habe und sie innerhalb des Parent-Windows verschiebe und anordne. Man kann es zwar auch mit OnMessage(0x200, "WM_MOUSEMOVE") und

Code: Select all

WM_MOUSEMOVE( wparam, lparam, msg, hwnd )
{
if wparam = 1 ; LButton
		PostMessage, 0xA1, 2,,, A ; WM_NCLBUTTONDOWN
		}
machen, aber das war mir zu umständlich.
regards,
AHK_fan :)
https://hr-anwendungen.de
Post Reply

Return to “Ich brauche Hilfe”