hey leute
ich bin neu im GDI Plus bereich und wollte euch fragen wie man in GDI Plus ein Input erstellt.
noch eine frage die ich mir stelle ist, wie man selbsterstellte buttons (mit _GDIPlus_GraphicsDrawImage eingefügt) ansteuern kann => wenn man auf den butten klickt dann kommt z.B. ne msgbox
ich freu mich auf eure antworten
DFPWare
GDI Plus Input & Button
-
- [ gelöst ]
-
DFPWare -
9. Dezember 2010 um 17:59 -
Geschlossen -
Erledigt
-
-
1) Mit GDI+ kannst du nicht mit einem Befehl ein Input erstellen, du musst dir da schon selbst was zusammenbasteln. Am besten mit _isPressed oder HotKeySet die Taste abfragen und dann mit _GDIPlus_GraphicsDrawString die Zeichen zeichen.
2) Erstelle ein Label an der Stelle und frage einen Klick darauf ab, oder frage die Mausposition ab und ob die Maus gedrückt wurde. -
danke erstmal

aber wie kann man den abfragen ob das Label oder das Bild was ich als Button verwenden will gedrückt wurde?
danke
DFPWare
-
bin der Meinung du solltest dich erst in die Grundlagen von GDI+ einarbeiten. Danach kannst du dir ja solche [UDF] GUICtrlPic - Update am 10.12.2010 Skripte analysieren, um hinter die Feinheiten zu kommen,
mfg autoBert
-
Hier mal BSP für das anklicken (mit Koordinaten, ohne Label dahinter!)
[autoit]
Ich hab das Script bei mir rumfliegen gehabt, kann sein das es von jemand anderem ist, also sag ich jetzt nicht es ist von mir:#include <GuiConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <GdiPlus.au3>;das include
#include <Misc.au3>
#include <WindowsConstants.au3>
$GUI_Width = 200
$GUI_Height = 200$Gui = GUICreate ("Dies ist ein Test GUI", 200, 200, 500, 200, $WS_POPUP)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]GUISetBkColor (0x149999, $Gui)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
_GDIPlus_Startup()GUISetState(@SW_SHOW)
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($Gui)
$btn_exit = _GDIPlus_GraphicsFillEllipse($hGraphic,180,0,20,20) ;kreis
;~ _GDIPlus_ArrowCapCreate(20, 20) ;Pfeil
_GDIPlus_GraphicsDrawString ($hGraphic, "Test zu Gdi+ koordinaten + klick", 20, 40, "Times",
While 1
[/autoit][autoit][/autoit][autoit]$mouse = GUIGetCursorInfo()
[/autoit][autoit][/autoit][autoit]
If IsArray ($mouse) then
If $mouse[2] = 1 Then
If $mouse[0] > 180 And $mouse[1] < 20 Then
Exit
EndIf
EndIf
EndIfSwitch GUIGetMsg()
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Case $GUI_EVENT_CLOSE
Exit
EndSwitchWEnd
[/autoit] -
Hi,
ich hab dir mal schnell ein Beispiel für einen GDI+ Button gemacht.Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
;By Sprenger120
HotKeySet("{Esc}", "_Exit")$hGUI = GUICreate("", 500, 500, -1, -1, $WS_POPUP)
[/autoit] [autoit][/autoit] [autoit]
$hGUI_DC = _WinAPI_GetDC($hGUI)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hGUI_DC, 500, 500)
$hBitmapDC = _WinAPI_CreateCompatibleDC($hGUI_DC)
_WinAPI_SelectObject($hBitmapDC, $hBitmap)GUISetState()
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$hGraphics = _GDIPlus_GraphicsCreateFromHDC($hBitmapDC)
$hBrush_Weiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
Dim $aButtonArray[1][6]
$hUser32 = DllOpen("user32.dll")AddButton(5, 5, 100, 50, "Test", "ButtonFunc1")
[/autoit] [autoit][/autoit] [autoit]
AddButton(200, 50, 100, 50, "Test Button 2", "ButtonFunc2")While Sleep(10)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 500, 500, $hBrush_Weiss);Buttons Zeichnen Zeichnen
[/autoit] [autoit][/autoit] [autoit]
For $x = 0 To UBound($aButtonArray) - 1
_GDIPlus_GraphicsDrawRect($hGraphics, $aButtonArray[$x][0], $aButtonArray[$x][1], $aButtonArray[$x][2], $aButtonArray[$x][3])
_GDIPlus_GraphicsDrawString($hGraphics, $aButtonArray[$x][4], _
$aButtonArray[$x][0] + 5, _
$aButtonArray[$x][1] + 5)Next
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_BitBlt($hGUI_DC, 0, 0, 500, 500, $hBitmapDC, 0, 0, $SRCCOPY)If Not _IsPressed("01", $hUser32) Then ContinueLoop
[/autoit] [autoit][/autoit] [autoit]
$aCoords = GUIGetCursorInfo()
If @error Then ContinueLoopFor $x = 0 To UBound($aButtonArray) - 1
[/autoit] [autoit][/autoit] [autoit]
If _RectCollision($aCoords[0], $aCoords[1], 0, 0, $aButtonArray[$x][0], $aButtonArray[$x][1], $aButtonArray[$x][2], $aButtonArray[$x][3]) Then Call($aButtonArray[$x][5])
NextWEnd
[/autoit] [autoit][/autoit] [autoit]Func ButtonFunc1()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, "", "Test Button1")
EndFunc ;==>ButtonFunc1Func ButtonFunc2()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox(0, "", "Test Button2")
EndFunc ;==>ButtonFunc2Func AddButton($x, $Y, $Breite, $Hoehe, $Name, $sFunc)
[/autoit] [autoit][/autoit] [autoit]
Local $iDim = 0
If $aButtonArray[0][0] <> "" Then
$iDim = UBound($aButtonArray) - 1
EndIf$aButtonArray[$iDim][0] = $x
[/autoit] [autoit][/autoit] [autoit]
$aButtonArray[$iDim][1] = $Y
$aButtonArray[$iDim][2] = $Breite
$aButtonArray[$iDim][3] = $Hoehe
$aButtonArray[$iDim][4] = $Name
$aButtonArray[$iDim][5] = $sFunc
ReDim $aButtonArray[$iDim + 2][6]
EndFunc ;==>AddButtonFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
;~ _GDIPlus_PenDispose($hPen_Schwarz)
;~ _GDIPlus_BrushDispose($hBrush_Schwarz)
_GDIPlus_BrushDispose($hBrush_Weiss)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
_WinAPI_ReleaseDC($hGUI, $hGUI_DC)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hBitmapDC)
DllClose($hUser32)
Exit
EndFunc ;==>_ExitFunc _RectCollision($iX1, $iY1, $iWidth1, $iHeight1, $iX2, $iY2, $iWidth2, $iHeight2)
[/autoit]
;Author: Faweyr
Return $iX1 + $iWidth1 > $iX2 And $iX1 < $iX2 + $iWidth2 And $iY1 + $iHeight1 > $iY2 And $iY1 < $iY2 + $iHeight2
EndFunc ;==>_RectCollision -
wow danke an alle
ich hab das heute in der schule erst geschrieben und schon so viele antworten vielen dank=)
ich arbeite mich da jetz mal durch xD
danke
DFPWare