### UPDATE SEKTION ###
Link: http://terminal.rkgm.at/index.html
#CLOSED
Ältere Versionen
Datenfunk.zip Version 0.1 [Dropbox]
Datenfunk.zip Version 0.2 [Dropbox]
Datenfunk.zip Version 0.3 [Dropbox]
Datenfunk.zip Version 0.4 [Dropbox]
Neueste Version
Datenfunk.zip Version 0.5 [Dropbox]
Zur Veranschaulichung hier ein Bild des Originals:
[Blockierte Grafik: https://i.imgsafe.org/8e8214e837.jpg]
GUI von Version 0.4
[Blockierte Grafik: https://i.imgsafe.org/8eb4dc42ca.png]
Source passend zu Version 0.4
; VIELEN DANK AN (www.autoit.de):
; Oscar | alpines | Kanashius | UEZ und ein bisschen Großvater!
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
Global Const $SC_DRAGMOVE = 0xF012
Global $sGfxFolder = (@ScriptDir & "\gfx\")
Global $hMainGui = _GUICreate_Transparent($sGfxFolder & "terminal.png")
Global $aWinPos = WinGetPos($hMainGui)
Global $aNaviFiles[22]
$aNaviFiles[0] = "top_0"
$aNaviFiles[1] = "top_1"
$aNaviFiles[2] = "bottom_0"
$aNaviFiles[3] = "bottom_1"
$aNaviFiles[4] = "left_0"
$aNaviFiles[5] = "left_1"
$aNaviFiles[6] = "right_0"
$aNaviFiles[7] = "right_1"
$aNaviFiles[8] = "button_0"
$aNaviFiles[9] = "button_1"
$aNaviFiles[10] = "exit_0"
$aNaviFiles[11] = "exit_1"
$aNaviFiles[12] = "new_0"
$aNaviFiles[13] = "new_1"
$aNaviFiles[14] = "status_6_0"
$aNaviFiles[15] = "status_6_1"
$aNaviFiles[16] = "status_14_0"
$aNaviFiles[17] = "status_14_1"
$aNaviFiles[18] = "status_0_0"
$aNaviFiles[19] = "status_0_1"
$aNaviFiles[20] = "status_9_0"
$aNaviFiles[21] = "status_9_1"
;################## Koordinaten #####################
Global $aNaviCoord[22][2]
;Top
$aNaviCoord[0][0] = 811
$aNaviCoord[0][1] = 324
$aNaviCoord[1][0] = 811
$aNaviCoord[1][1] = 324
;Bottom
$aNaviCoord[2][0] = 811
$aNaviCoord[2][1] = 417
$aNaviCoord[3][0] = 811
$aNaviCoord[3][1] = 417
;Left
$aNaviCoord[4][0] = 790
$aNaviCoord[4][1] = 345
$aNaviCoord[5][0] = 790
$aNaviCoord[5][1] = 345
;Right
$aNaviCoord[6][0] = 883
$aNaviCoord[6][1] = 345
$aNaviCoord[7][0] = 883
$aNaviCoord[7][1] = 345
;Button
$aNaviCoord[8][0] = 828
$aNaviCoord[8][1] = 362
$aNaviCoord[9][0] = 828
$aNaviCoord[9][1] = 362
;Exit
$aNaviCoord[10][0] = 828
$aNaviCoord[10][1] = -50
$aNaviCoord[11][0] = 828
$aNaviCoord[11][1] = -50
;Neuer Auftrag
$aNaviCoord[12][0] = 655
$aNaviCoord[12][1] = -50
$aNaviCoord[13][0] = 655
$aNaviCoord[13][1] = -50
;Status 6
$aNaviCoord[14][0] = 572
$aNaviCoord[14][1] = 46
$aNaviCoord[15][0] = 572
$aNaviCoord[15][1] = 46
;Status 14
$aNaviCoord[16][0] = 572
$aNaviCoord[16][1] = 154
$aNaviCoord[17][0] = 572
$aNaviCoord[17][1] = 154
;Status 0
$aNaviCoord[18][0] = 572
$aNaviCoord[18][1] = 262
$aNaviCoord[19][0] = 572
$aNaviCoord[19][1] = 262
;Status 9
$aNaviCoord[20][0] = 572
$aNaviCoord[20][1] = 370
$aNaviCoord[21][0] = 572
$aNaviCoord[21][1] = 370
Global $iNaviCount = UBound($aNaviFiles)
Global $ahNavi[$iNaviCount]
For $i = 0 To $iNaviCount - 1
$ahNavi[$i] = _GUICreate_Transparent($sGfxFolder & $aNaviFiles[$i] & ".png", -1, -1, 255, $WS_EX_LAYERED + $WS_EX_TOPMOST + $WS_EX_MDICHILD, $hMainGui)
WinMove($ahNavi[$i], "", $aWinPos[0] + $aNaviCoord[$i][0], $aWinPos[1] + $aNaviCoord[$i][1])
GUISetCursor(0, -1, $ahNavi[$i])
Next
For $i = 0 To $iNaviCount - 1 Step 2
GUISetState(@SW_SHOW, $ahNavi[$i])
Next
GUISetState(@SW_SHOW, $hMainGui)
GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
Global $g_tStruct = DllStructCreate($tagPOINT)
Global $aMsg, $iOld = -1, $hHover
While True
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_MOUSEMOVE
DllStructSetData($g_tStruct, "x", MouseGetPos(0))
DllStructSetData($g_tStruct, "y", MouseGetPos(1))
$hHover = _WinAPI_WindowFromPoint($g_tStruct)
If $hHover = $hMainGui Then
If $iOld > -1 Then GUISetState(@SW_SHOW, $ahNavi[$iOld])
$iOld = -1
EndIf
For $i = 0 To 20 Step 2
If $hHover = $ahNavi[$i] Then
GUISetState(@SW_HIDE, $ahNavi[$i])
GUISetState(@SW_SHOW, $ahNavi[$i + 1])
If $iOld > -1 Then GUISetState(@SW_SHOW, $ahNavi[$iOld])
$iOld = $i
ExitLoop
EndIf
Next
EndSwitch
WEnd
Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
If $iOld > -1 Then
Local $sNavi = StringTrimRight($aNaviFiles[$iOld], 2)
ConsoleWrite($sNavi & @CR)
If $sNavi = "exit" Then
_Exit()
ElseIf $sNavi = "new" Then
_New()
ElseIf $sNavi = "top" Then
_Top()
ElseIf $sNavi = "bottom" Then
_Bottom()
ElseIf $sNavi = "right" Then
_Right()
ElseIf $sNavi = "left" Then
_Left()
ElseIf $sNavi = "button" Then
_Button()
ElseIf $sNavi = "status_6" Then
_Status_6()
ElseIf $sNavi = "status_14" Then
_Status_14()
ElseIf $sNavi = "status_0" Then
_Status_0()
ElseIf $sNavi = "status_9" Then
_Status_9()
EndIf
Return
EndIf
_SendMessage($hMainGui, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
EndFunc ;==>_WM_LBUTTONDOWN
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _New()
EndFunc ;==>_New
Func _Top()
EndFunc ;==>_Top
Func _Bottom()
EndFunc ;==>_Bottom
Func _Right()
EndFunc ;==>_Right
Func _Left()
EndFunc ;==>_Left
Func _Button()
EndFunc ;==>_Button
Func _Status_6()
EndFunc
Func _Status_14()
EndFunc
Func _Status_0()
EndFunc
Func _Status_9()
EndFunc
; #INDEX# =======================================================================================================================
; Title .........: GUICreateTransparent
; AutoIt Version : 3.3.6.1
; Description ...: Transparente BildGUIs erstellen.
; Author(s) .....: UEZ und ein bisschen Großvater (www.autoit.de)
; Dll ...........:
; ===============================================================================================================================
; #CURRENT# =====================================================================================================================
; _GUICreate_Transparent
; ===============================================================================================================================
; #FUNCTION# ====================================================================================================================
; Name...........: _GUICreate_Transparent
; Description ...: Transparente Popup-GUIs aus Bildern (z.B. PNG) erstellen
; Syntax.........: _GUICreate_Transparent($sImage, $iLeft = -1, $iTop = -1, $iOpacity = 255)
; Parameters ....: $sImage - Pfad zur Bilddatei
; $iLeft - Bidschirmposition der linken Seite des GUI in Pixeln
; |Default - -1 (zentriert)
; $iTop - Bidschirmposition der oberen Seite des GUI in Pixeln
; |Default - -1 (zentriert)
; $iOpacity - Transparenz für das gesamte GUI (siehe WinSetTrans())
; |Default - 255 (nicht transparent)
; Return values .: Im Erfolgsfall: HWND des GUI aus GUICreate()
; Im Fehlerfall: False, @error wird gesetzt:
; |1 = GDIPlus konnte nicht gestartet werden
; |2 = Die Bilddatei konnte nicht geladen werden
; Author ........: UEZ (www.autoit.de/index.php?page=Thread&postID=199839#post199839)
; Modified.......: Großvater (www.autoit.de)
; Remarks .......: Das GUI wird immer in der Originalgröße des Bildes mit dem Style $WS_POPUP und dem
; Exstyle $WS_EX_LAYERED erstellt. Der Exstyle $WS_EX_LAYERED verträgt sich offenbar
; nicht mit normalen Child-GUIs. Controls müssen deshalb in (einer) eigenen GUI(s)
; mit den Exstyles $WS_EX_MDICHILD und $WS_EX_LAYERED und der HWND des Bild-GUI
; als Parent erstellt werden. Dafür liefert UEZ im o.a. Thread ein Beispiel.
; Related .......:
; Link ..........:
; Example .......:
; ===============================================================================================================================
Func _GUICreate_Transparent($sImage, $iLeft = -1, $iTop = -1, $iOpacity = 255, $iExStyle = $WS_EX_LAYERED + $WS_EX_TOPMOST, $hParent = 0)
; GDIPlus starten
If Not _GDIPlus_Startup() Then Return SetError(1, 0, 0)
; Bild laden
Local $hImage = _GDIPlus_ImageLoadFromFile($sImage)
If @error Then
_GDIPlus_Shutdown()
Return SetError(2, 0, 0)
EndIf
Local $iWidth = _GDIPlus_ImageGetWidth($hImage)
Local $iHeight = _GDIPlus_ImageGetHeight($hImage)
; GUI erstellen
Local $hGUI = GUICreate("", $iWidth, $iHeight, $iLeft, $iTop, $WS_POPUP, $iExStyle, $hParent)
Local $hDCDst = _WinAPI_GetDC($hGUI)
Local $hDCSrc = _WinAPI_CreateCompatibleDC($hDCDst)
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_WinAPI_SelectObject($hDCSrc, $hBitmap)
Local $tSize = DllStructCreate($tagSIZE)
Local $pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", $iWidth)
DllStructSetData($tSize, "Y", $iHeight)
Local $tSource = DllStructCreate($tagPOINT)
Local $pSource = DllStructGetPtr($tSource)
Local $tBlend = DllStructCreate($tagBLENDFUNCTION)
Local $pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", 1)
_WinAPI_UpdateLayeredWindow($hGUI, $hDCDst, 0, $pSize, $hDCSrc, $pSource, 0, $pBlend, $ULW_ALPHA)
; Ressourcen freigeben
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hDCSrc)
_WinAPI_ReleaseDC($hGUI, $hDCDst)
_GDIPlus_Shutdown()
; HWND des GUI zurückgeben
Return $hGUI
EndFunc ;==>_GUICreate_Transparent
Alles anzeigen
######################################
############ Original Post ##############
######################################
Hallo liebe Leute,
ich bins mal wieder
Derzeit bin ich an einem neuen Projekt, da das letzte leider im Sand verlaufen ist.
Also, es geht um ein Programm, welches die Einschulung auf ein Datenfunk-Terminal erleichtern soll.
Dabei wird ein Terminal simuliert und es können verschiedene Aufträge / Szenarien simuliert werden.
Nun ist es allerdings schon so, dass ich in der Anfangsphase schon vor einem Problem stehe und einfach nicht genug Hintergrundwissen habe, wenn es um GDI+, Interlaced Images und Image Buttons geht.
Hier sieht man nun das fertige Terminal-Image.
[Blockierte Grafik: https://i.imgsafe.org/7ba6ae0fe2.png]
Bedienelemte:
Button_Center (Aktiv und Inaktiv)
[Blockierte Grafik: https://i.imgsafe.org/7bada4e417.png][Blockierte Grafik: https://i.imgsafe.org/7badae750f.png]
Button_Links/Rechts/Oben/Unten (Aktiv und Inaktiv)
[Blockierte Grafik: https://i.imgsafe.org/7badb6daac.png][Blockierte Grafik: https://i.imgsafe.org/7badc10a99.png][Blockierte Grafik: https://i.imgsafe.org/7bbd865004.png][Blockierte Grafik: https://i.imgsafe.org/7bbd8c15d6.png][Blockierte Grafik: https://i.imgsafe.org/7bbd91f5f2.png][Blockierte Grafik: https://i.imgsafe.org/7bbda6f003.png][Blockierte Grafik: https://i.imgsafe.org/7bbda1a809.png][Blockierte Grafik: https://i.imgsafe.org/7bbd9b6890.png]
Nun hab ich allerdings das Problem, dass sich durch die Viertelkreis-Form der Buttons die Bilder überschneiden/überlappen.
Hier nochmal das Background - Image, welches später quasi als GUI dienen soll:
[Blockierte Grafik: https://i.imgsafe.org/7be5b40c79.png]
Ich habs mal mit der Skin UDF von Yashied probiert und leider auch nicht wirklich auf einen grünen Zweig gekommen...
(Ja ich hab auch die Alpha_Images erstellt)
Eigentlich würde ich ja auch lieber die GUI ohne Fensterrahmen machen. Aber dem Problem stelle ich mich erst, wenn ich die Buttons im Griff habe.
Ja ich weiß, es gibt zu dem Thema viel Stoff der schon bearbeitet wurde, allerdings hab ich nicht gefunden, was auch wirklich meinen Vorstellungen entspricht.
Ich hab die Dateien alle als [.ai | .psb | .bmp | .png].
Würd mich freuen, wenn jemand einen guten Vorschlag zur Umsetzung hätte!
Lg Stoani