Weiß jemand wie man auf einer *.jpg Grafik
einen transparenten Button darstellen kann?
Ich habe *.gif und *.png probiert
klappt leider nicht!
Grüße
Ilse ![]()
Weiß jemand wie man auf einer *.jpg Grafik
einen transparenten Button darstellen kann?
Ich habe *.gif und *.png probiert
klappt leider nicht!
Grüße
Ilse ![]()
Ein Script von dir wäre nicht schlecht,
hast du schonmal GDI+ versucht? Anders ist das wohl kaum zu bewerkstelligen, außer suchst mal hier im Forum nach "Png in Gui" oder sowas, das gibts hier irgendwo...
Meinst du so etwas:
[autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$GUImain = GUICreate('Main', 255, 40, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", 0, 0, 255, 40)
GUICtrlSetState(-1, $GUI_DISABLE)
$GUIBtn = GUICreate("", 80, 20, 155, 10, $WS_POPUP, $WS_EX_MDICHILD, $GUImain)
WinSetTrans($GUIBtn, "", 150)
$Btn = GUICtrlCreateButton('Button', 0, 0, 80, 20)
GUISetState(@SW_SHOW, $GUIBtn)
GUISetState(@SW_SHOW, $GUImain)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
also ich möchte eine professionelle
Oberfläche für meine Gui:
Wenn ich eine Hintergrundgrafik verwende (Beispielgrafik)
stellt sich die Frage wie man Buttons der Grafik mit Autoit ansprechen kann.
...die Grafik vergrößert sich dynamisch
Kann man irgendwie Hotspots auf die Elemente setzen
die dann bei Klick Code ausführen?
(auch wenn das Fenster vergrößert wird?)
Beispiel-Code
[autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("Form1", 627, 448, 400, 156, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
$Pic2 = GUICtrlCreatePic("C:\ButtonBlue.gif", 8, 16, 81, 33, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Pic1 = GUICtrlCreatePic("C:\Backbild2.jpg", -24, -16, 644, 436, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUICtrlSetResizing(-1, $GUI_DOCKAUTO+$GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM+$GUI_DOCKHCENTER+$GUI_DOCKVCENTER+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Damit es toll aussieht müssten Hover-Effekte
für jeden Button gemacht werden.
Also, alles ziemlich aufwendig oder?
ZitatDeßhalb mal eine andere Frage:
Ist es möglich eine Oberfläche in Html/css...
mit Grafiken, Buttons... einzubetten. Ich meine eine html-Datei (local)
die meine Gif Buttons und Hintergrunddesigns bereits enthält?
Wenn ich dann z.B. auf einen Button der Html-Datei klicke,
daß dann der Autoit Code ausgeführt wird.
Oder wie machen das die Profis hier?
Viele Grüße
Ilse ![]()
Oder wie machen das die Profis hier?
Ich bin mal so frei und fühl mich mit angesprochen. ![]()
Aber letztlich bin ich da kein guter Ratgeber, da ich keinen Wert auf Style lege. Ich bin ein reiner Funktionalist.
Hallo Bugfix,
ich konnte mich leider erst heute wieder bei dir melden.
Ich habe mal mit deinem ersten Code experimentiert.
Eine Frage noch:
Wenn ich das Script starte, dann wird zuerst der Button kurz mit 100% gezeigt
und dann wird er erst transparent.
Kann man das ändern? Ich meine daß der transparente Button nicht zu sehen ist?
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$GUImain = GUICreate('Main', 255, 40, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", 0, 0, 255, 40)
GUICtrlSetState(-1, $GUI_DISABLE)
$GUIBtn = GUICreate("", 80, 20, 155, 10, $WS_POPUP, $WS_EX_MDICHILD, $GUImain)
WinSetTrans($GUIBtn, "", 5) ; erscheint kurz mit 100%
$Btn = GUICtrlCreateButton('Button', 0, 0, 80, 20)
GUISetState(@SW_SHOW, $GUIBtn)
GUISetState(@SW_SHOW, $GUImain)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Btn
MsgBox(4,"test","Test")
EndSwitch
WEnd
Wenn ich das Script starte, dann wird zuerst der Button kurz mit 100% gezeigt
und dann wird er erst transparent.
Passiert bei mir nicht. Vielleicht vom Windows-Style abhängig (habe Classic).
Kannst ja auch mal testen erst GUISetState für Main und dann für Child auszuführen.
Bei Trans 5 ist von dem Button ja gar nix mehr zu sehen. Ist das Absicht? Falls ja, brauchst du also nur einen "Klickbereich" der als Button verwertet wird. Das geht aber dann einfacher. (Koordinatenbereich definieren und in Schleife Mausklick auswerten - wenn im Koordinatenbereich dann...)
Hallo BugFix,
ZitatFalls ja, brauchst du also nur einen "Klickbereich" der als Button verwertet wird. Das geht aber dann einfacher. (Koordinatenbereich definieren und in Schleife Mausklick auswerten - wenn im Koordinatenbereich dann...)
Genau so etwas brauche ich! Im Prinzip verschiendene Klickbereiche (Hotspots), die sich auch mit Resize mit anpassen.
Wird das Fenster vergrößert, dann müsste auch der Klickbereich die Koordinaten verändern.
Beispiel:
Hintergrundgrafik mit Button
Wird die Grafik mit Resize aufgezogen, dann ist der Button der Grafik evtl. Größer und weiter rechts...
D.h. auch der klickbereich müsste sich ja verändern.
Mit $GUI_DOCKAUTO bin ich schon etliche Zeit am probieren.
Aber ich denke das wäre die Lösung.
Das mit dem Koordinatenbereich definieren die sich auch mit Resize anpassen, das wärs, aber das schaff ich nicht!
Würde mich freuen, wenn du mir dabei helfen könntest.
Huh...
Liebe Grüße
Ilse ![]()
Hi, wieso machst du denn die Abfrage, ob die Maus in einem bestimmten Bereich ist nicht einfach variabel und berechnest sie bei jedem Resize einfach neu. Du kannst die Buttuns doch einfach um den Faktor vergrößern mit dem auch die Gui vergrößert/verkleinert wird.
@ Bugfix
Ich habe mal eine Beispiel-Gui gemacht.
Diese Gui enthält einen Button der sich der Hintergrundgrafik anpasst. (Also im Prinzip einen Klickbereich)
Dieser Klickbereich darf natürlich nicht sichbar sein. (Mein Problem)
Wenn ich auf diesen "unsichbaren Bereich" klicke, sollte was passieren.
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("Form1", 738, 557, 253, 155, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
$Button1 = GUICtrlCreateButton("Button1", 608, 136, 35, 25, $BS_NOTIFY)
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
$Pic1 = GUICtrlCreatePic("C:\Backbild2.jpg", -24, -16, 750, 550, BitOR($GUI_SS_DEFAULT_PIC,$WS_CLIPSIBLINGS))
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(4,"Klicktest","Bereich wurde angeklickt!")
EndSwitch
WEnd
...mit einem Button geht das, nur ich bekomm das nicht unsichtbar hin!
@Raplt,
Zitat... ob die Maus in einem bestimmten Bereich ist nicht einfach variabel und berechnest sie bei jedem Resize einfach neu
Kannst du mir vielleicht ein Beispiel machen?
Ich versteh im Moment irgendwie nur Bahnhof...!
OK, hier mal ein kpl. Bsp.:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local $dll, $ret, $TitleHeight
$dll = DllOpen("user32.dll")
$ret = DllCall($dll, "long", "GetSystemMetrics", "long", 4)
$TitleHeight = $ret[0]
$ret = DllCall($dll, "long", "GetSystemMetrics", "long", 6)
$TitleHeight += 2*$ret[0]
DllClose($dll)
Global $GUI, $aGUI, $aClick[2][6] = [ _
[0,0 +$TitleHeight,50,20], _ ; Klickbereich1 [x,y,w,h,FaktorX,FaktorY] Index: 0
[0,100 +$TitleHeight,50,20]] ; Klickbereich2 Index: 1
; Die Klickbereiche sind deine "Pseudo-Button"
$GUI = GUICreate('Main', 255, 150, -1, -1, $WS_SIZEBOX)
$aGUI = WinGetPos($GUI) ; Größendaten GUI zum Vergleich speichern
; die Label nur damit man nicht allzu blind klicken muß
GUICtrlCreateLabel('|', 0, 0) ; Abgrenzung Label beim Start
GUICtrlCreateLabel('|', 51, 0) ; Abgrenzung Label beim Start
GUICtrlCreateLabel('|', 0, 100)
GUICtrlCreateLabel('|', 51, 100)
; === Größenverhältnis Klickbereich W u. H / GUI W u. H abspeichern
For $i = 0 To 1
$aClick[$i][4] = $aClick[$i][2]/$aGUI[2] ; Verhältnis W
$aClick[$i][5] = $aClick[$i][3]/$aGUI[3] ; Verhältnis H
ConsoleWrite($i & ': ' & $aClick[$i][4] & '/ ' & $aClick[$i][5] & @CRLF)
Next
GUISetState(@SW_SHOW, $GUI)
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_SIZE, '_mySize')
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYDOWN
Switch _GetClickedIndex($aClick)
Case 0
ConsoleWrite('Klickbereich 1: ' & $aClick[0][0] & ', ' & $aClick[0][1] -$TitleHeight & ', ' & _
$aClick[0][2] & ', ' & $aClick[0][3] & @CRLF)
Case 1
ConsoleWrite('Klickbereich 2: ' & $aClick[1][0] & ', ' & $aClick[1][1] -$TitleHeight & ', ' & _
$aClick[1][2] & ', ' & $aClick[1][3] & @CRLF)
Case Else
ConsoleWrite('Klick außerhalb' & @CRLF)
EndSwitch
EndSwitch
WEnd
Func _GetClickedIndex(ByRef $aClick)
$old = Opt('MouseCoordMode', 0)
Local $aM = MouseGetPos()
Opt('MouseCoordMode', $old)
For $i = 0 To UBound($aClick) -1
If ( $aM[0] >= $aClick[$i][0] ) And ( $aM[0] <= $aClick[$i][0] +$aClick[$i][2] ) And _
( $aM[1] >= $aClick[$i][1] ) And ( $aM[1] <= $aClick[$i][1] +$aClick[$i][3] ) Then Return $i
Next
Return -1
EndFunc
Func _mySize($hWnd)
If $hWnd <> $GUI Then Return 0
Local $aSize = WinGetPos($GUI)
For $i = 0 To UBound($aClick) -1
;~ ConsoleWrite('W/H vorher: ' & $aClick[$i][2] & ' / ' & $aClick[$i][3] & @CRLF)
$aClick[$i][2] = Int($aSize[2] * $aClick[$i][4])
$aClick[$i][3] = Int($aSize[3] * $aClick[$i][5])
;~ ConsoleWrite('W/H nachher: ' & $aClick[$i][2] & ' / ' & $aClick[$i][3] & @CRLF)
Next
$aGUI = $aSize
Return 0
EndFunc
Hallo Bugfix,
erstmal danke für deine Mühe.
Ich werde da wohl noch etwas brauchen um das nachzuvollziehen.
Wirklich schade, warum das nicht so einfach geht wie ich gedacht habe.
Transparentes gif auf die Gui, onClick... Code fertig.
In Koda (..ich weiß...vergiß Koda)
da gibt es ein Graphic Tool (Kreis zeichnen) und damit kann man das auch nicht irgendwie erledigen?
Ich meine transparenten Kreis auf die Gui legen (als unsichbarer Button) und mit Code versehen....?
Es würde wirklich die grafische Arbeit um vieles angenehmer machen.
Ilse ![]()
Wirklich schade, warum das nicht so einfach geht wie ich gedacht habe.
Transparentes gif auf die Gui, onClick... Code fertig.
Im Prinzip ist doch das genau der Fall, nur dass halt gar kein gif da ist. ![]()
Auch bei einem gif müsstest du, wenn du die GUI resizeable gestaltest, ein Sizemanagement gestalten. Und das ist es, was das Skript jetzt so gewaltig aussehen läßt. Bei einer GUI fixer Größe ist das wesentlich unkomplizierter. Ich gestatte es dem User niemals, die Größe zu verändern. ![]()
Hallo Ilse,
wenn Du nur transparente "Klickflächen" auf ein Hintergrundbild legen willst, ist das nicht wirklich kompliziert:
#include <GuiConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
If Not IsDeclared("SS_REALSIZECONTROL") Then
Global Const $SS_REALSIZECONTROL = 0x40
EndIf
Opt("GUIOnEventMode", 1)
$GUI = GUICreate("GUI", 800, 600, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_Close")
$BG = GUICtrlCreatePic(@ProgramFilesDir & "\AutoIt3\Examples\GUI\msoobe.jpg", 0, 0, 800, 600, $SS_REALSIZECONTROL)
GUICtrlSetState(-1, $GUI_DISABLE) ; <-- Das Bild selbst darf nicht auf Mausklicks reagieren
GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
$Btn1 = GUICtrlCreateLabel("", 20, 20, 50, 50, $WS_BORDER) ; <-- WS_BORDER ist nur dafür da, dass Du es sehen kannst
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "Btn1_Clicked")
$Btn2 = GUICtrlCreateLabel("", 730, 20, 50, 50, $WS_BORDER)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "Btn2_Clicked")
$Btn3 = GUICtrlCreateLabel("", 20, 530, 50, 50, $WS_BORDER)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "Btn3_Clicked")
$Btn4 = GUICtrlCreateLabel("", 730, 530, 50, 50,$WS_BORDER)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "Btn4_Clicked")
$Btn5 = GUICtrlCreateLabel("", 360, 260, 80, 80, $WS_BORDER)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "Btn5_Clicked")
GUISetState()
While True
Sleep(100)
WEnd
Func Btn1_Clicked()
MsgBox(0, "Btn1", "Klick!", 1, $GUI)
EndFunc
Func Btn2_Clicked()
MsgBox(0, "Btn2", "Klick!", 1, $GUI)
EndFunc
Func Btn3_Clicked()
MsgBox(0, "Btn3", "Klick!", 1, $GUI)
EndFunc
Func Btn4_Clicked()
MsgBox(0, "Btn4", "Klick!", 1, $GUI)
EndFunc
Func Btn5_Clicked()
MsgBox(0, "Btn5", "Klick!", 1, $GUI)
EndFunc
Func GUI_Close()
Exit
EndFunc
BugFix
sorry, mußte arbeiten konnte mich erst heute wieder melden.
Möchte mich nochmals ganz ganz herzlich für deine Hilfe bedanken.
@ Großvater
super Beispiel.
Zitatwenn Du nur transparente "Klickflächen" auf ein Hintergrundbild legen willst, ist das nicht wirklich kompliziert:
Genau so hatte ich es gedacht.
Mal wieder ein DICKES LOB an alle ![]()
Liebe Grüße
Ilse ![]()